Marc-Brief plus what-landed / deferred / CI / production-deploy / v1.4.20-preview sections. Mirrors the v1.4.18 report shape. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25 KiB
v1.4.19 marathon — state log
Status: finished Last update: 2026-05-10T14:45+02:00
Previous milestone: v1.4.18 live (image digest
sha256:c636fca7db66…,/api/version=1.4.18). Next strategic milestone: v1.4.20 = Insights redesign with AI Coach (handoff at~/Downloads/design_handoff_insights_redesign). v1.5 reserved for iOS app + Apple Health integration.
Phase 0 — Bootstrap
- STATE+ROADMAP rewritten for v1.4.19
- git status clean
- Result: ok / commit
<sha> - Detailed report:
.planning/phase-0-report.md
Wave A — Bug fixes + polish (parallel buckets)
A1 — BD-Zielbereich constant 50% (4th attempt) ✅
- Live-DB audit of Marc's BP measurements (apps-01,
db-pg8wggwogo8c4gc4ks0kk4ss-105148113251): 572 paired readings since 2022, last-30d = 50 %, last-7d = 50 %, all-time ≈ 10.8 %. Confirmed the headline 50 % cannot be the all-time value; it must be a copy of30T. - Root cause:
analytics/route.tssetbpInTargetPct = windows.last30Days?.pct— literal copy of the30Tsub-value.computeBpInTargetWindowsreturned only 7d+30d so the headline could never legitimately differ. - Fix: helper returns a third
allTimewindow; route fetches all paired BP rows and routes the headline throughallTime. - TDD: 3 failing unit cases + 1 integration case red→green.
pnpm test: 1640 / 1645 (5 pre-existing A3 failures unchanged).pnpm test:integration: 67 / 67.pnpm typecheck: clean.pnpm lint: 12 baseline 0 new.- Commit
a856272pushed to origin/main first attempt. - Detailed report:
.planning/phase-A1-report.md
A2 — Charts mobile audit (axis-label overflow + X-axis density consistency) ✅
- Playwright headless against live PROD at Pixel 5, iPhone 12,
iPhone SE, Galaxy Fold compact (280 px) — probe at
.planning/v1419-a2-prod-probe.mjs, screenshots + JSON in/tmp/v1419-a2-prod/. Findings doc:.planning/phase-A2-mobile-findings.md. - Pre-fix readings: Blood Pressure / Pulse / Mood / Medications cards all wrapped tabs to a 2nd row on iPhone 12 (header 92 → 188 px); fold-compact pushed Medications to 3 rows + horizontal overflow.
- Header layout fix — mobile-first stack (
flex-colbelow sm,flex-row≥ sm). Title + chips on row 1, range tabs + cog right-aligned on row 2 withflex-nowrap+px-2 sm:px-3so tabs always own a single row at 280 px. Bucket-aggregation chip and comparison captions hide on mobile (hidden sm:inline-flex). Applied to HealthChart, MoodChart, MedicationComplianceChart. - Universal x-axis tick-density helper at
src/lib/charts/x-axis-density.ts+ reactive viewport hook atsrc/hooks/use-viewport-width.ts. Caps visible ticks at 4 (Fold) / 6 (Pixel-5 / iPhone-12) / 8 (small tablet) / 10 (desktop). Wired into HealthChart, MoodChart, MedicationComplianceChart, ComplianceLineChart. Scatter correlation chart deliberately left alone (numeric x-axis with explicitticksarray). - e2e regression at
e2e/charts-mobile.spec.ts— runs only onchromium-mobile; asserts 1 row of tabs per card + ≤ 7 visible ticks per axis. Helper unit tests atsrc/lib/charts/__tests__/x-axis-density.test.ts(13 cases). pnpm test: 1637 / 1637 green.pnpm lint: 0 errors / 17 warnings (12 baseline + 5 from concurrent A3 work, none from A2).pnpm typecheck: A2 surface clean (one A3-owned error insrc/app/insights/page.tsxunrelated to A2).- Two commits on origin/main:
77a3ad3(fix),a739085(test). Note: parallel-agent race condition during the second commit caused a polluted intermediate commit0cf23f3to slip through with the wrong file content but the right message; the same content (mine) was re-committed cleanly asa739085immediately after.0cf23f3was already pushed by another agent before the cleanup rebase could land, so it remains in history with a stalephase-A5-report.mdpayload — non-destructive but ugly. No--no-verify/--no-gpg-signused. - Detailed report:
.planning/phase-A2-report.md
A3 — /insights polish + Comparison switch move ✅
- Remove Comparison-toggle from Dashboard (effectively landed via
A4's
b5e9a95sweep — concurrent edits raced the working tree; the dashboard import + JSX use are both gone inorigin/main). - Re-position Comparison-toggle on /insights — folded into the
hero meta band via new
metaSlotprop on<InsightsPageHero>. Commit60a91af. - Consolidate refresh-buttons —
onRegenerateno longer wired from page → advisor card. The hero owns the single page-level affordance; the per-recommendation Regenerate button (per v1.4.16 spec) stays. Commit98a3d10. - "Persönlicher AI Berater" placeholder subtitle removed —
aiOverviewTitleno longer passed to<InsightAdvisorCard>, title prop made optional. Same commit98a3d10. - Small BP/Weight tile strip removed (
-157lines onsrc/app/insights/page.tsxplus dead helpers). Commit335f288. - Raw "metric: blood_pressure_sweet" leak fixed —
STRIP_TOKEN_REGEXwidened to[A-Za-z0-9_]+;PARSE_TOKEN_REGEXstays uppercase (render allowlist unchanged). Commitfa91a73. - Tests: 9-case
src/app/__tests__/insights-polish.test.tspinning every guard. Commits5360d3c(msg) +f2b21a4(file). 1646 / 1646 green; lint + typecheck clean on touched files. - Detailed report:
.planning/phase-A3-report.md
A4 — AI prompt anpassen (no "Datengrundlage stark" as default first sentence)
- Edit
src/lib/ai/prompts/insight-generator.ts - Remove the auto-positive-first-sentence about data quality
- Only mention data quality when low (helpful: "based on limited data, treat with caution") not when fine
- Update tests
- Detailed report:
.planning/phase-A4-report.md
A5 — Settings/Integrations status-UI consolidation (Withings + Mood Log)
- Single tag top-right per integration: "verbunden · vor X min"
- Remove redundant container with "verbunden / letzte erfolgreiche / letzter Versuch" / bottom "letzter Sync" — pick ONE place
- Mood Log container missing visual divider → add (consistency with Withings)
- Mobile-safe: tag wraps gracefully on Pixel 5
- Detailed report:
.planning/phase-A5-report.md
A6 — Settings mobile audit + consistency
- Playwright headless audit
/settings/account,/settings/profile,/settings/integrations,/settings/notifications,/settings/ai,/settings/dashboard,/settings/export - Equalize input heights (Username/Email/Geburtsdatum)
- Sprache-Menü positioning consistent
- Right-side action buttons (Passwort Reset, Tool Neustarten) consistent vertical position
- Spacing between elements consistent
- Detailed report:
.planning/phase-A6-report.md
A7 — Admin polish (Feedback, api-tokens 4th attempt, Zielwerte, i18n)
- Admin Feedback "offen/bestätigt/erledigt/archiviert" tabs
mini-scrollbar removed (tabsListVariants now carries
overflow-y-hidden; commit088832a) /admin/api-tokensscrollbar 4th attempt: truncate-with- tooltip pattern on token-name, username, permission badge;table-fixed+ colgroup widths on desktop table; e2e regression walks every element inside the mobile card-list (commitdd8212e)/admin/api-tokens"Einklappen" button removed (commit7a70db6)- Admin Zielwerte page:
space-y-8→space-y-6on outer wrapper (commit6507646) - Translate Zielwerte status labels: 11
targets.label.<TYPE>entries + 41targets.status.<key>entries in EN + DE; page usesSTATUS_CATEGORY_KEYmap to normalise server strings (commit90a109d) - Result: ok / 5 commits on origin/main, 1658 tests green
- Detailed report:
.planning/phase-A7-report.md
Status block — A7 (v1.4.19)
- 2026-05-09T13:22+02:00 — A7 complete. Five atomic commits
(
088832afeedback tab strip,dd8212eapi-tokens 4th-attempt truncate+tooltip,7a70db6Einklappen removal,6507646Zielwerte whitespace,90a109dZielwerte i18n) on origin/main via worktree/Users/marc/Projects/HealthLog-a7. Rebased once ontoef67da5(A3 report) before push, no rebase conflicts. All pre-commit hooks green; pnpm test = 1658/1658, pnpm typecheck clean, pnpm lint baseline (0 errors / 12 pre-existing warnings). Touched only A7 surfaces:src/components/ui/tabs.tsx(shared primitive — feedback strip is one consumer), feedback section un-touched directly,src/components/admin/api-token-overview-section.tsx,src/app/targets/page.tsx, messages/{en,de}.json, i18n integrity test allowlist. Did NOT touchsrc/components/settings/*,src/lib/insights/*,src/lib/ai/*,src/components/charts/*,src/components/insights/*. No new dependencies.
A8 — Quality-of-life audit (write-only, fix-set deferred to inline B agent)
- Audit descriptions correctness across all pages
- Find redundancies + missing labels
- Find UI inconsistencies (text styling, spacing, button alignment)
- Output prioritized list for inline fixing
- Detailed report:
.planning/phase-A8-quality-findings.md
Wave B — Apply A8 findings ✅
- 6 / 6 CRITICAL fixed: F-01 (time-window locale), F-02 (login-overview filter), F-03 (insulting badges), F-04 (date-input lang), F-05 (sidebar copy), F-06 (legacy CTA verb)
- 21 / 25 HIGH fixed: F-07, F-08 (partial), F-09, F-10, F-11, F-13, F-15, F-16, F-17, F-18, F-19, F-20, F-21, F-22, F-24, F-25, F-27, F-28, F-29, F-30, F-31. F-12, F-14, F-23, F-26 deferred (3 not-an-issue / overlap with Wave A, 1 owned by v1.4.20 Insights redesign).
- 31 MED + 16 LOW deferred to
.planning/v1420-backlog.md pnpm typecheckclean,pnpm lint12 baseline warnings / 0 new,pnpm test --run1669/1669,pnpm test:integration67/67. Format-check shows pre-existing.planning/*+docs/audit/*warnings only.- 16 atomic commits on origin/main, no
--no-verify/ no--no-gpg-sign, pre-commit hooks green on every push. - Detailed report:
.planning/phase-B-quality-report.md
Wave D — Multi-agent QA + Product-Lead review
- code-reviewer (1 CRIT + 5 HIGH + 12 MED/LOW)
- security review (0 CRIT, 0 HIGH, 3 MED/LOW)
- design / UX review (0 CRIT, 2 HIGH, 8 MED/LOW)
- senior-dev review (0 CRIT, 3 HIGH, 13 MED/LOW)
- simplify (5 apply-yes, 2 apply-no)
- Product Lead — v1.4.20 redesign plan filed at
phase-D-v1419-product-lead-review.md - Reconcile applied CRITICAL + 7/10 HIGH + all 5 simplify-yes; 3
HIGH deferred to
.planning/v1420-backlog.mdunder "Phase D — v1.4.19 reconcile carry-over". Strategic items pulled into.planning/v15-backlog.md. 1672/1672 unit + 67/67 integration green; typecheck clean; lint baseline (0 errors / 12 pre-existing warnings). - Detailed report:
.planning/phase-D-reconcile-report.md
Status block — D (v1.4.19)
- 2026-05-09T14:30+02:00 — Phase D reconcile complete. Six atomic
commits on origin/main:
ef74241(CRITICAL C-01 mobile Sys/Dia badge enum mismatch + TDD guard),6b35cad(5 simplify-yes: useAuthActionLabels hook, IntegrationStatusPill chipClass dead branches, DateInput/DateTimeInput wrappers ×14 callsites, icon-wrapper cleanup ×3, narration-comment strip),1258b24(HIGH H-01 token-name UTC→Berlin),5a8ad3d(HIGH H-02 useViewportWidth setState removal),977f124(HIGH H-04 tabs ring clip),1f0d9ad(prettier on danger-zone-section). Simplify F3 + F4 also resolved senior-dev H-1 + code-review H-03 transitively. Three HIGH deferred to.planning/v1420-backlog.md: D-CR-H-05 (insightsdata?.narrowing — large refactor), D-DSGN-H-01 (api-tokens touch tooltip — needs Popover swap), D-DSGN-H-02 (insights hero density — folded into v1.4.20 redesign), D-SR-H-3 (Withings/ MoodLog card chrome dedup — v1.5 Apple Health prep). Strategic items from product-lead-review pulled into.planning/v15-backlog.md. No--no-verify/ no--no-gpg-sign. Final verification: pnpm typecheck clean, pnpm lint 0 errors / 12 baseline warnings (no new), pnpm test --run 1672/1672, pnpm test:integration 67/67.
Phase E — Release v1.4.19
- Pre-release verify
- Bump package.json + CHANGELOG
- Tag + push v1.4.19
- GHCR build green
- Coolify deploy
- /api/version=1.4.19 confirmed
- Production smoke
- GH release
- Docs site + landing site sync
docs/audit/v1419-summary.md(Marc-Brief)- Detailed report:
.planning/phase-E-report.md
Status block — Phase 0 (v1.4.19)
-
2026-05-10T12:48+02:00 — Phase 0 complete. STATE.md + ROADMAP.md scaffolded for v1.4.19 marathon (Wave A: A1 BD-Zielbereich constant 50% 4th attempt, A2 charts mobile audit + universal X-tick-density helper, A3
/insightspolish + Comparison-toggle relocation, A4 AI-prompt rework, A5 Settings/Integrations status-UI consolidation, A6 Settings mobile audit, A7 Admin polish, A8 quality-of-life write-only audit; Wave B applies A8 findings; Wave D multi-agent QA- Product-Lead briefed for v1.4.20 Insights redesign + AI Coach;
Phase E release). Previous v1.4.18 / v1.4.17 / v1.4.16 entries
archived above. Tracked tree clean on entry; four untracked stale
dotted-segment route directories
(
src/app/api/export/{full-backup.json,measurements.csv, medications.csv,mood.csv}/) left in place — same call as v1.4.16 / v1.4.18 Phase 0, they belong to previous milestones. Phase 0 commit contains only.planning/STATE.md,.planning/ROADMAP.md,.planning/phase-0-report.md. v1.4.20 reserved for Insights redesign with AI Coach (handoff at~/Downloads/design_handoff_insights_redesign); v1.5 reserved for iOS app + Apple Health.
- Product-Lead briefed for v1.4.20 Insights redesign + AI Coach;
Phase E release). Previous v1.4.18 / v1.4.17 / v1.4.16 entries
archived above. Tracked tree clean on entry; four untracked stale
dotted-segment route directories
(
-
2026-05-10T12:59+02:00 — Wave A / A4 complete. Removed the default-positivity opener about data quality from the AI insights system prompt. Added GROUND RULE 7 in both EN + DE locales of
src/lib/ai/prompts/insight-generator.tsforbidding "Your data foundation is strong" / "Datengrundlage ist sehr stark" style openers; data-quality caveats now allowed only 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. New test filesrc/lib/ai/__tests__/no-default-positivity-opener.test.ts(9 tests, all green) pins the rule + thresholds + banned phrases in both locales. Existing PROMPT_VERSION assertions inmedical-reference-prompt.test.tsrelaxed from/4\.16\.\d+/to/4\.\d+\.\d+/. Single commitb5e9a95onorigin/main. Smoke verification deferred to post-deploy (cached payloads carry the old PROMPT_VERSION; the row'spromptVersiondistinguishes pre/post 4.19.0). Detailed report:.planning/phase-A4-report.md. Cross-agent race: pre-commit hook bundled A3'ssrc/app/page.tsxedits into my commit — same shared-cwd race documented across earlier marathons; A3's edits are correct onorigin/main. -
2026-05-10T13:05+02:00 — Wave A / A5 complete. Settings → Integrations status UI consolidated. New
<IntegrationStatusPill>(src/components/settings/integration-status-pill.tsx) is the single canonical surface — Dracula-tokenized chip top-right of every integration card, "Connected · 12 min ago" pattern with locale-aware relative-time bucketing (just now/min/h/d), three states (connected/error/disconnected), mobile-safewhitespace-nowrap. Withings + Mood Log cards refactored: redundant v1.4.15 status banner ("connected / last successful / last attempt" trio) is gone, Mood Log's bottom-of- card "letzter Sync" line is gone, both cards now show a<hr>visual divider between header and body for consistency (Marc flagged the asymmetry). Actionable error text preserved as a compact inline alert above the action row when a sync attempt failed. New i18n keys undersettings.integrationPill.*(EN + DE). Three commits:ba0d6b8(pill component + i18n + 6 vitest tests),0dcc91a(refactor + 5 section vitest tests),47a8fc7(Pixel-5 e2e spec). Tests: 1646/1646 vitest pass; e2e spec added but not run in this session. Reusable for v1.4.20 Apple Health card on iOS. Detailed report:.planning/phase-A5-report.md. Cross-agent race: commitba0d6b8accidentally bundled A4's.planning/STATE.mdandphase-A4-report.mdedits — same shared- cwd race across earlier marathons, no information lost. -
2026-05-10T13:11+02:00 — Wave A / A6 complete. Settings mobile consistency audited at Pixel-5 (393×851) against production with Marc's session cookie; findings + raw geometry tables in
.planning/phase-A6-settings-audit.md. Five commits landed:957f8e9equalises every form input height to 36 px (AI active- provider selecth-10->h-9, AI add-provider selecth-8->h-9, Dashboard "Compare to" trigger dropsmin-h-11so defaulth-9applies);9fda634standardises action-button placement — Account → Password, Account → Restart onboarding tour, and Dashboard → Reset to defaults all stack the action below the title on<sm(full-width) and right-align on>=sm, fixing the Pixel-5 right-edge overflow Marc reported on the tour button (~48 px past the card border);1075784lifts the Sprache select out of the dob/language pair into its own row at the bottom of the Profile card, plus the duplicated native-select class string is pulled into a sharedNATIVE_SELECT_CLASSconstant;737b533uniformises card-internalspace-ytospace-y-4(Dashboard layoutspace-y-5->space-y-4, AI provider config formsspace-y-3->space-y-4);78f1f3faddse2e/settings-mobile-consistency.spec.ts— Pixel-5-only Playwright spec that locks in the five invariants (input heights, button-no- overflow, language-not-paired-with-dob, Compare-to-36 px, AI selects-36 px). All 1637 vitest tests + zero source typecheck errors + zero lint errors after the marathon. Cross-agent race: commit737b533bundled A5's.planning/STATE.mdupdate; STATE content correct, no semantic harm. Detailed report:.planning/phase-A6-report.md. Files touched (only mine):src/components/settings/{account,ai,dashboard-layout}-section.tsx,e2e/settings-mobile-consistency.spec.ts,.planning/phase-A6-{settings-audit,report}.md. -
2026-05-10T13:59+02:00 — Wave B / A8 application complete. Applied 6 / 6 CRITICAL findings (F-01 through F-06) and 21 / 25 HIGH findings (4 deferred: F-12 already a11y-clean, F-14 shipped via A5, F-23 already i18n'd in DE, F-26 owned by v1.4.20 Insights redesign). 31 MED + 16 LOW carried over to
.planning/v1420-backlog.mdfor the strategic v1.4.20 pick-list. Sixteen atomic commits on origin/main:180f46c(F-01 time-window locale),dc75fe8(F-02 login-overview auth filter),7a6bc81(F-03 insulting achievement titles),ff6e184(F-04 date-input lang attribute),4feacad(F-05 admin sidebar copy),d263125(F-06 legacy CTA verb),1ae9b9d(F-09 + F-10 raw enum badges),42b0f11(F-11 role-change button label + aria-label),1f4d6a2(F-07 threshold naming),3f6e670(F-15 + F-19 + F-20 + F-21 + F-22 + F-25 + F-27 + F-29 + F-30 i18n copy sweep),70ebe32(F-08 partial — danger-zone + feedback dedupe),98cd13c(F-24 + F-28 + F-52 achievements + admin/integrations toggles),876e074(F-13 mobile sys/dia + F-16 telegram badge collapse),bc81fd7(F-17 audit action labels + F-31 recent-activity row links),713b494(F-18 token name ISO-suffix renderer),ae2f671(prettier on touched files). Pre-commit hooks green on every push, no--no-verify/ no--no-gpg-sign. Final verification:pnpm typecheckclean,pnpm lint0 errors / 12 baseline warnings,pnpm test --run1669 / 1669 (up +11 from new TDD cases: time-window-format 6, achievements-no-insults 4, login-overview-auth-filter 1),pnpm test:integration67 / 67. Format-check shows 8 pre-existing.planning/*+docs/audit/*files dirty (baseline noise onorigin/main, untouched). Detailed report:.planning/phase-B-quality-report.md. Backlog:.planning/v1420-backlog.md. -
2026-05-10T14:34+02:00 — Phase E1 complete. Pre-release verify all green (
pnpm typecheckclean,pnpm lint0 errors / 12 baseline warnings,pnpm test1672/1672,pnpm test:integration67/67,pnpm format:checkonly pre-existing.planning/*+docs/audit/*baseline noise dirty). CHANGELOG## [1.4.19] — 2026-05-10added with Fixed (10 items incl. CRITICAL mobile Sys/Dia badge enum mismatch) / Changed (6 items: status-pill consolidation, Comparison overlay → /insights, single page refresh, BP/Weight tile strip removal, AI prompt no-default- positivity rule with PROMPT_VERSION 4.19.0, settings consistency, Zielwerte DE labels) / Deferred to v1.4.20 sections. Marc's voice, no AI / agent / marathon mention. package.json bumped 1.4.18 → 1.4.19. Single release commit89f00cf chore(release): v1.4.19on origin/main (Co-Author Claude Opus 4.7 trailer, no--no-verify, no--no-gpg-sign, hooks green). Annotated tag v1.4.19 pushed. GHCR tag run 25628853202 queued at 2026-05-10T12:34Z; main parallel runs (e2e 25628852739, Security & Quality 25628852734, Integration tests 25628852731, Build main 25628852729) also queued. Detailed report:.planning/phase-E1-report.md. Phase E2 (GHCR green wait, Coolify deploy, /api/version=1.4.19 confirm, prod smoke, GH release, docs+landing sync, Marc-Brief) follows.
Previous milestone — v1.4.18 (completed 2026-05-10T11:45+02:00)
LIVE at https://healthlog.bombeck.io · /api/version=1.4.18 · image
digest sha256:c636fca7db66… (was v1.4.17: sha256:936e9cf25b2d…).
Full Marc-Brief at docs/audit/v1418-summary.md. Backlog seeded to
.planning/v1419-backlog.md (1 HIGH i18n bundle leak + MED/LOW) and
.planning/v15-backlog.md / .planning/phase-D-v1418-product-lead-review.md
(strategic).
Phases run during v1.4.18 marathon:
- Phase 0 — Bootstrap (STATE+ROADMAP for v1.4.18)
- Wave A — A1 BD-Zielbereich tile sub-values, A2 admin-shell mobile strip scrollbar, A3 chart visual revert + per-chart overlay toggles
- Wave B — B1 achievements expansion (38 → 59, +6 hidden, discovery filter, opaque hidden cards)
- Wave D — Multi-agent QA + reconcile (1 CRITICAL cleared, 8 of 10 HIGH fixed inline, 1 HIGH deferred to v1.4.19)
- Phase E1-E3 — Release v1.4.18 (tag, GHCR both green, Coolify deploy via force-pull, GH release, docs+landing sync, Marc-Brief)
Previous milestone — v1.4.17 hotfix (live 2026-05-10T07:58+00:00)
/insights TypeError on legacy cached payload — isLegacyInsightPayload()
flag + advisor card short-circuit + defensive stripChartTokens /
parseChartTokens. Three commits: 79bfa27 (fix), adab80a
(release), da7070e (prettier). Detailed report:
.planning/phase-v1417-hotfix-report.md.
Previous milestone — v1.4.16 (completed 2026-05-10T04:05+02:00)
Full report: docs/audit/v1416-summary.md. v1.5 backlog seeded at
.planning/v15-backlog.md.
Phase E — Release v1.4.19 (deploy fallback 2026-05-10T12:39:59Z)
Tag-build pipeline succeeded but the main-branch deploy hung and was canceled, so v1.4.19 was promoted via the host-side retag-on-host fallback path.
- Digest before:
c636fca7db66479b3413a7df82117316c042641f9bc7c0fe7d6e2be6811dfcca(previous:latest). - Digest after:
b48f93874cdbcd6c2d729f1b8eeb63a6d1bbb90d56f629846ef6eab6cf272aa9(manifest digest ofghcr.io/mbombeck/healthlog:1.4.19, now also carrying the:latesttag on apps-01). Local image ID inside the running container:sha256:f24f94cefd6502509ec0ca1e498fdefd46e853dda0660c1e5c2fd7f3f2fc19b8. - Procedure:
docker pull ghcr.io/mbombeck/healthlog:1.4.19→docker tag … :latest→docker compose up -d --force-recreate appinside/data/coolify/applications/pg8wggwogo8c4gc4ks0kk4ss. - Version transition:
/api/versionreported1.4.19at 2026-05-10T12:39:59Z (first poll after recreate; well inside the 5 min cap). - Smoke (curl, session
cmox4d6fj000101p8w9ykhcnm):/200 ·/insights200 ·/admin/api-tokens200 ·/settings/integrations200 ·/achievements200 ·/dashboard404 (route does not exist in the source —src/app/dashboard/is absent; not a regression). Treated as PASS. - GH release: https://github.com/MBombeck/HealthLog/releases/tag/v1.4.19
(created with
--verify-tag, notes fromCHANGELOG.md). - No code changes. Source tree untouched per fallback contract.