mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
docs(planning): bootstrap v1.4.20 STATE+ROADMAP, archive v1.4.19
- STATE.md replaced with v1.4.20 scaffold (F0/FX foundation, B1-B5 Insights redesign per phase-D-v1419-product-lead-review.md, Wave D QA, Phase E release) - ROADMAP.md: v1.4.20 milestone at top, v1.4.19 archived as previous milestone summary - phase-E1-report.md + phase-E3-report.md: dangling v1.4.19 release artefact updates committed Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
3fa07ad54b
commit
f80492a5a3
4 files changed
+249
-595
No files matched your search
+51
-28
@@ -1,41 +1,64 @@
|
||||
# HealthLog v1.4.19 — roadmap
|
||||
# HealthLog v1.4.20 — roadmap
|
||||
|
||||
Milestone: **v1.4.19** (kicked off 2026-05-10)
|
||||
Latest tag at start: v1.4.18 (live in prod, image digest
|
||||
`sha256:c636fca7db66…`)
|
||||
Milestone: **v1.4.20** (kicked off 2026-05-10)
|
||||
Latest tag at start: v1.4.19 (live in prod, image digest
|
||||
`sha256:b48f93874cdb…`)
|
||||
|
||||
| Phase | Goal | State |
|
||||
| ----- | -------------------------------------------------------------------------------------------------------------------------- | ------- |
|
||||
| 0 | Bootstrap — STATE+ROADMAP for v1.4.19, git sanity, single chore commit | done |
|
||||
| A1 | BD-Zielbereich constant 50% (4th attempt) — live-DB audit, root-cause calc bug, integration test | pending |
|
||||
| A2 | Charts mobile audit — axis-label overflow, X-axis density consistency across charts, universal tick helper | pending |
|
||||
| A3 | `/insights` polish — drop dashboard comparison toggle, reposition on insights, consolidate refresh, kill placeholder leaks | pending |
|
||||
| A4 | AI prompt — drop default "Datengrundlage stark" first sentence, only mention data quality when low | pending |
|
||||
| A5 | Settings/Integrations status-UI — single tag per integration, Mood Log divider, mobile-safe wrap | pending |
|
||||
| A6 | Settings mobile audit — equalize input heights, Sprache positioning, right-side button alignment, consistent spacing | pending |
|
||||
| A7 | Admin polish — Feedback tab scrollbar, api-tokens 4th attempt (ellipsis+tooltip), Zielwerte whitespace + DE labels | pending |
|
||||
| A8 | Quality-of-life audit — write-only findings list (descriptions, redundancies, missing labels, inconsistencies) | pending |
|
||||
| B | Apply A8 findings — fix CRITICAL/HIGH from quality-of-life audit | pending |
|
||||
| D | Multi-agent QA + Product-Lead — code-reviewer, security, design, senior, simplify, product-lead (v1.4.20 strategic) | pending |
|
||||
| E | Release v1.4.19 — bump, CHANGELOG, tag, GHCR, deploy, /api/version=1.4.19, smoke, docs+landing sync | pending |
|
||||
| Phase | Goal | State |
|
||||
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
||||
| F0 | Bootstrap — commit dangling v1.4.19 reports, scaffold STATE+ROADMAP for v1.4.20 | done |
|
||||
| FX | User-facing artifact cleanup — PII (no real names, no health figures), internal jargon, German leaks; CHANGELOG + docs/audit + GH releases + sites | pending |
|
||||
| F1 | Branch model — long-lived `develop` from `main` HEAD; GHCR builds on `main` + `v*` only; hotfixes from `main` merge back to both | pending |
|
||||
| F2 | Document branch + release model — extend CONTRIBUTING.md, mirror page on docs site | pending |
|
||||
| F5 | Best-practice GitHub repo audit — README, LICENSE, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, .github templates, badges; CRIT/HIGH inline | pending |
|
||||
| F6 | Multi-agent QA on new docs — verify they describe actual deployed state | pending |
|
||||
| B1 | Hero strip + Daily Briefing + Suggested-prompts — replace `<InsightsPageHero>`, 3 micro-stat tiles, AI Coach entry, Daily Briefing card | pending |
|
||||
| B2 | AI Coach drawer + streaming chat + persistence — SSE endpoint, CoachConversation+CoachMessage models, source-chip provenance, prompt-injection refusals | pending |
|
||||
| B3 | Correlation discovery + Trends row — 3 hypotheses (BP×compliance, mood×pulse, weight×weekday), AI annotations under trend mini-charts | pending |
|
||||
| B4 | Weekly Report + Storyboard + Mobile passes — `/insights/report/[week]`, 90-day BP storyboard, mobile equivalents of B1+B2 | pending |
|
||||
| B5 | Personal Health Score — composite 0-100 (BP-target / weight-trend / mood-stability / compliance), 3 bands, "Ask the Coach" CTA | pending |
|
||||
| D | Multi-agent QA + Product-Lead review — code-reviewer, security, design, senior, simplify, product-lead (v1.5 strategic) | pending |
|
||||
| E | Release v1.4.20 — develop → main release-merge, bump, CHANGELOG, tag, GHCR, deploy, /api/version=1.4.20, smoke, docs+landing sync | pending |
|
||||
|
||||
Stop conditions: production red, large un-spec'd issue, context cutoff,
|
||||
or budget short of polish — write status doc, do not auto-rollback.
|
||||
|
||||
Time-runs-short minimum to ship v1.4.19: Wave A (any subset) + Wave D
|
||||
Time-runs-short minimum to ship v1.4.20: F0–F2 + FX + B1 + Wave D + Phase E.
|
||||
B2 (the AI Coach drawer) is the biggest piece; if context tightens, ship
|
||||
B1+B3+B5 and defer B2+B4 to v1.4.21.
|
||||
|
||||
- Phase E. Wave B (A8-driven inline fixes) is deferrable to v1.4.20 if
|
||||
context budget tightens.
|
||||
|
||||
Phase 0 spec for this marathon: orchestrator user message in this
|
||||
session (not stored to disk).
|
||||
Phase F0 spec for this marathon: `/Users/marc/Projects/HealthLog/.planning/v1420-marathon-handoff.md`.
|
||||
|
||||
Reserved next strategic milestones:
|
||||
|
||||
- **v1.4.20** — Insights redesign with AI Coach (research-driven, after
|
||||
v1.4.19; design handoff at
|
||||
`~/Downloads/design_handoff_insights_redesign`).
|
||||
- **v1.5** — iOS app + Apple Health integration.
|
||||
- **v1.5** — iOS app + Apple Health integration (handoff at
|
||||
`~/Projects/healthlog-iOS`).
|
||||
- **v1.6+** — Auto-correlation discovery (FDR-controlled), Coach
|
||||
full-page route, conversation-driven goal setting.
|
||||
|
||||
---
|
||||
|
||||
## Previous milestone — v1.4.19 (completed 2026-05-10T12:39:59Z)
|
||||
|
||||
| Phase | Goal | State |
|
||||
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
|
||||
| 0 | Bootstrap — STATE+ROADMAP for v1.4.19 | done |
|
||||
| A1 | BD-Zielbereich constant 50% (4th attempt) — live-DB root-cause + integration test | done |
|
||||
| A2 | Charts mobile audit — universal X-tick density helper, mobile-first stacked headers across HealthChart / MoodChart / MedicationComplianceChart | done |
|
||||
| A3 | `/insights` polish — Comparison-toggle relocated, single page-level refresh, BP/Weight tile strip removed, raw-token leak guarded | done |
|
||||
| A4 | AI prompt — GROUND RULE 7 forbids default-positivity opener, PROMPT_VERSION 4.16.1 → 4.19.0 | done |
|
||||
| A5 | Settings/Integrations status-UI — `<IntegrationStatusPill>` consolidates Withings + Mood Log, divider parity, locale-aware relative-time | done |
|
||||
| A6 | Settings mobile audit — input heights equalised at 36 px, action buttons standardised, Sprache select hoisted to its own row | done |
|
||||
| A7 | Admin polish — feedback tab strip scrollbar, api-tokens 4th-attempt truncate+tooltip, Einklappen toggle removed, Zielwerte i18n | done |
|
||||
| A8 | Quality-of-life audit — 78 findings prioritised CRITICAL / HIGH / MED / LOW | done |
|
||||
| B | Apply A8 — 6/6 CRITICAL + 21/25 HIGH inline; 31 MED + 16 LOW carried to v1.4.20 backlog | done |
|
||||
| D | Multi-agent QA (5 reviewers) + Product-Lead → v1.5 redesign plan filed | done |
|
||||
| E1-E3 | Release v1.4.19 — tag, GHCR build green, host-side retag deploy via fallback (Coolify deploy hung, retried via SSH), GH release, docs+landing sync | done |
|
||||
|
||||
Milestone completed 2026-05-10T12:39:59Z — v1.4.19 LIVE in prod.
|
||||
Release brief: `docs/audit/v1419-summary.md`. Backlog seeded to
|
||||
`.planning/v1420-backlog.md` (carry-over) and v1.5 strategic items in
|
||||
`.planning/v15-backlog.md` + `.planning/phase-D-v1419-product-lead-review.md`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+123
-453
@@ -1,495 +1,165 @@
|
||||
# v1.4.19 marathon — state log
|
||||
# v1.4.20 marathon — state log
|
||||
|
||||
Status: finished
|
||||
Last update: 2026-05-10T14:45+02:00
|
||||
Status: in flight
|
||||
Last update: 2026-05-10T15:00+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
|
||||
> Previous milestone: v1.4.19 live (image digest
|
||||
> `sha256:b48f93874cdb…`, `/api/version=1.4.19`).
|
||||
> 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
|
||||
## Foundation — pre-flight before any feature work
|
||||
|
||||
- [x] STATE+ROADMAP rewritten for v1.4.19
|
||||
- [x] git status clean
|
||||
- Result: ok / commit `<sha>`
|
||||
- Detailed report: `.planning/phase-0-report.md`
|
||||
Per `.planning/v1420-marathon-handoff.md`, F1–F6 must complete before
|
||||
B1 dispatches.
|
||||
|
||||
## Wave A — Bug fixes + polish (parallel buckets)
|
||||
### F0 — Commit dangling v1.4.19 reports + bootstrap v1.4.20 scaffold
|
||||
|
||||
### A1 — BD-Zielbereich constant 50% (4th attempt) ✅
|
||||
- [x] Commit phase-E1-report.md + phase-E3-report.md v1.4.19 updates
|
||||
- [x] STATE.md replaced with v1.4.20 scaffold; v1.4.19 archived to ROADMAP.md
|
||||
- [x] ROADMAP.md updated with v1.4.20 milestone + previous-milestone archive
|
||||
|
||||
- [x] 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 of `30T`.
|
||||
- [x] Root cause: `analytics/route.ts` set
|
||||
`bpInTargetPct = windows.last30Days?.pct` — literal copy of the
|
||||
`30T` sub-value. `computeBpInTargetWindows` returned only 7d+30d
|
||||
so the headline could never legitimately differ.
|
||||
- [x] Fix: helper returns a third `allTime` window; route fetches all
|
||||
paired BP rows and routes the headline through `allTime`.
|
||||
- [x] TDD: 3 failing unit cases + 1 integration case red→green.
|
||||
- [x] `pnpm test`: 1640 / 1645 (5 pre-existing A3 failures unchanged).
|
||||
- [x] `pnpm test:integration`: 67 / 67.
|
||||
- [x] `pnpm typecheck`: clean. `pnpm lint`: 12 baseline 0 new.
|
||||
- [x] Commit `a856272` pushed to origin/main first attempt.
|
||||
- Detailed report: `.planning/phase-A1-report.md`
|
||||
### F1 — Branch model: long-lived `develop`
|
||||
|
||||
### A2 — Charts mobile audit (axis-label overflow + X-axis density consistency) ✅
|
||||
- [ ] Create `develop` from current `main` HEAD
|
||||
- [ ] Push `develop` to origin
|
||||
- [ ] Verify GHCR workflow only fires on `main` push + `v*` tag
|
||||
- [ ] Set `develop` as default work-target for all v1.4.20 commits
|
||||
- Detailed report: `.planning/phase-F1-report.md`
|
||||
|
||||
- [x] 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`.
|
||||
- [x] 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.
|
||||
- [x] Header layout fix — mobile-first stack (`flex-col` below sm,
|
||||
`flex-row` ≥ sm). Title + chips on row 1, range tabs + cog
|
||||
right-aligned on row 2 with `flex-nowrap` + `px-2 sm:px-3` so
|
||||
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.
|
||||
- [x] Universal x-axis tick-density helper at
|
||||
`src/lib/charts/x-axis-density.ts` + reactive viewport hook at
|
||||
`src/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
|
||||
explicit `ticks` array).
|
||||
- [x] e2e regression at `e2e/charts-mobile.spec.ts` — runs only on
|
||||
`chromium-mobile`; asserts 1 row of tabs per card + ≤ 7 visible
|
||||
ticks per axis. Helper unit tests at
|
||||
`src/lib/charts/__tests__/x-axis-density.test.ts` (13 cases).
|
||||
- [x] `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 in
|
||||
`src/app/insights/page.tsx` unrelated to A2).
|
||||
- [x] Two commits on origin/main: `77a3ad3` (fix), `a739085` (test).
|
||||
Note: parallel-agent race condition during the second commit
|
||||
caused a polluted intermediate commit `0cf23f3` to slip through
|
||||
with the wrong file content but the right message; the same
|
||||
content (mine) was re-committed cleanly as `a739085` immediately
|
||||
after. `0cf23f3` was already pushed by another agent before the
|
||||
cleanup rebase could land, so it remains in history with a
|
||||
stale `phase-A5-report.md` payload — non-destructive but ugly.
|
||||
No `--no-verify` / `--no-gpg-sign` used.
|
||||
- Detailed report: `.planning/phase-A2-report.md`
|
||||
### F2 — Document branch + release model
|
||||
|
||||
### A3 — /insights polish + Comparison switch move ✅
|
||||
- [ ] Extend `CONTRIBUTING.md` with branch flow + ASCII/Mermaid diagram
|
||||
- [ ] Mirror page on healthlog-docs (developer / contributor docs)
|
||||
- [ ] Make user-vs-contributor distinction explicit
|
||||
- Detailed report: `.planning/phase-F2-report.md`
|
||||
|
||||
- [x] Remove Comparison-toggle from Dashboard (effectively landed via
|
||||
A4's `b5e9a95` sweep — concurrent edits raced the working tree;
|
||||
the dashboard import + JSX use are both gone in `origin/main`).
|
||||
- [x] Re-position Comparison-toggle on /insights — folded into the
|
||||
hero meta band via new `metaSlot` prop on `<InsightsPageHero>`.
|
||||
Commit `60a91af`.
|
||||
- [x] Consolidate refresh-buttons — `onRegenerate` no 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. Commit `98a3d10`.
|
||||
- [x] "Persönlicher AI Berater" placeholder subtitle removed —
|
||||
`aiOverviewTitle` no longer passed to `<InsightAdvisorCard>`,
|
||||
title prop made optional. Same commit `98a3d10`.
|
||||
- [x] Small BP/Weight tile strip removed (`-157` lines on
|
||||
`src/app/insights/page.tsx` plus dead helpers). Commit
|
||||
`335f288`.
|
||||
- [x] Raw "metric: blood_pressure_sweet" leak fixed — `STRIP_TOKEN_REGEX`
|
||||
widened to `[A-Za-z0-9_]+`; `PARSE_TOKEN_REGEX` stays uppercase
|
||||
(render allowlist unchanged). Commit `fa91a73`.
|
||||
- [x] Tests: 9-case `src/app/__tests__/insights-polish.test.ts` pinning
|
||||
every guard. Commits `5360d3c` (msg) + `f2b21a4` (file). 1646 /
|
||||
1646 green; lint + typecheck clean on touched files.
|
||||
- Detailed report: `.planning/phase-A3-report.md`
|
||||
### F3 — Repo-cleanup audit (jargon sweep)
|
||||
|
||||
### A4 — AI prompt anpassen (no "Datengrundlage stark" as default first sentence)
|
||||
- [ ] Multi-agent sweep: `CHANGELOG.md`, `docs/audit/`, `docs/`,
|
||||
`README.md`, healthlog-docs, healthlog-landing
|
||||
- [ ] Replace internal jargon (Phase X / Wave Y / marathon /
|
||||
sub-agent / autonomous orchestrator / Claude name) with neutral
|
||||
language
|
||||
- [ ] Keep Co-Author trailer on commits (git-meta only)
|
||||
- [ ] No git history rewrite — only edit current file state
|
||||
- Detailed report: `.planning/phase-F3-report.md`
|
||||
|
||||
- [ ] 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`
|
||||
### F4 — Release-notes language audit (German leaks)
|
||||
|
||||
### A5 — Settings/Integrations status-UI consolidation (Withings + Mood Log)
|
||||
- [ ] Audit `CHANGELOG.md` v1.4.14–v1.4.19 + GitHub releases + future
|
||||
docs/audit/v*-summary.md
|
||||
- [ ] Translate German leaks to English
|
||||
- Detailed report: `.planning/phase-F4-report.md`
|
||||
|
||||
- [ ] 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`
|
||||
### F5 — Best-practice GitHub repo audit
|
||||
|
||||
### A6 — Settings mobile audit + consistency
|
||||
- [ ] 2 parallel agents survey repo structure
|
||||
- [ ] Compare to OSS best-practice (README, LICENSE, CONTRIBUTING,
|
||||
CODE_OF_CONDUCT, SECURITY, .github/ISSUE_TEMPLATE,
|
||||
PULL_REQUEST_TEMPLATE, badges)
|
||||
- [ ] Output prioritized list; apply CRITICAL + HIGH inline; defer
|
||||
rest to v1.4.21
|
||||
- Detailed report: `.planning/phase-F5-report.md`
|
||||
|
||||
- [ ] 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`
|
||||
### F6 — Multi-agent QA on new docs
|
||||
|
||||
### A7 — Admin polish (Feedback, api-tokens 4th attempt, Zielwerte, i18n)
|
||||
- [ ] After F2 lands: separate agents read dev-vs-prod docs
|
||||
- [ ] Verify they describe actual deployed state — no incorrect claims
|
||||
- [ ] Flag and fix anything inaccurate before tag
|
||||
- Detailed report: `.planning/phase-F6-report.md`
|
||||
|
||||
- [x] Admin Feedback "offen/bestätigt/erledigt/archiviert" tabs
|
||||
mini-scrollbar removed (tabsListVariants now carries
|
||||
`overflow-y-hidden`; commit `088832a`)
|
||||
- [x] `/admin/api-tokens` scrollbar 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
|
||||
(commit `dd8212e`)
|
||||
- [x] `/admin/api-tokens` "Einklappen" button removed (commit
|
||||
`7a70db6`)
|
||||
- [x] Admin Zielwerte page: `space-y-8` → `space-y-6` on outer
|
||||
wrapper (commit `6507646`)
|
||||
- [x] Translate Zielwerte status labels: 11 `targets.label.<TYPE>`
|
||||
entries + 41 `targets.status.<key>` entries in EN + DE; page
|
||||
uses `STATUS_CATEGORY_KEY` map to normalise server strings
|
||||
(commit `90a109d`)
|
||||
- Result: ok / 5 commits on origin/main, 1658 tests green
|
||||
- Detailed report: `.planning/phase-A7-report.md`
|
||||
## Wave B — Insights redesign with AI Coach (sequential)
|
||||
|
||||
### Status block — A7 (v1.4.19)
|
||||
Per `.planning/phase-D-v1419-product-lead-review.md`. Each phase
|
||||
ships behind a feature flag and unlocks independently.
|
||||
|
||||
- 2026-05-09T13:22+02:00 — A7 complete. Five atomic commits
|
||||
(`088832a` feedback tab strip, `dd8212e` api-tokens 4th-attempt
|
||||
truncate+tooltip, `7a70db6` Einklappen removal, `6507646`
|
||||
Zielwerte whitespace, `90a109d` Zielwerte i18n) on origin/main
|
||||
via worktree `/Users/marc/Projects/HealthLog-a7`. Rebased once
|
||||
onto `ef67da5` (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 touch `src/components/settings/*`,
|
||||
`src/lib/insights/*`, `src/lib/ai/*`, `src/components/charts/*`,
|
||||
`src/components/insights/*`. No new dependencies.
|
||||
### B1 — Hero strip + Daily Briefing + Suggested-prompts (~3-5 days)
|
||||
|
||||
### A8 — Quality-of-life audit (write-only, fix-set deferred to inline B agent)
|
||||
- [ ] Replace `<InsightsPageHero>` with new hero strip (greeting,
|
||||
3 micro-stat tiles, AI Coach entry block, Daily Briefing card)
|
||||
- [ ] New `src/components/insights/{hero-strip,daily-briefing,
|
||||
suggested-prompts}.tsx`
|
||||
- [ ] Extend `aiInsightResponseSchema` with `dailyBriefing`
|
||||
(`paragraph`, `keyFindings[]`)
|
||||
- [ ] PROMPT_VERSION bump 4.19.0 → 4.20.0
|
||||
- [ ] Apple Health gated tiles render "Connect Apple Health (iOS app)"
|
||||
placeholder until v1.5 ships
|
||||
- Detailed report: `.planning/phase-B1-report.md`
|
||||
|
||||
- [ ] 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`
|
||||
### B2 — AI Coach panel + streaming chat + persistence (~5-7 days)
|
||||
|
||||
## Wave B — Apply A8 findings ✅
|
||||
- [ ] Drawer overlay over `/insights`; full-page route deferred to v1.5
|
||||
- [ ] New `POST /api/insights/chat` SSE-streaming endpoint
|
||||
- [ ] New `src/components/insights/coach-panel/*`
|
||||
- [ ] New Prisma `CoachConversation` + `CoachMessage` (encrypted
|
||||
content, GDPR cascade)
|
||||
- [ ] Source-chip rows on every assistant message (provenance)
|
||||
- [ ] Token-budget cap + 20-turn conversation cap
|
||||
- [ ] Prompt-injection refusal pattern (extend v1.4.15 C1)
|
||||
- Detailed report: `.planning/phase-B2-report.md`
|
||||
|
||||
- [x] 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)
|
||||
- [x] 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).
|
||||
- [x] 31 MED + 16 LOW deferred to `.planning/v1420-backlog.md`
|
||||
- [x] `pnpm typecheck` clean, `pnpm lint` 12 baseline warnings
|
||||
/ 0 new, `pnpm test --run` 1669/1669, `pnpm test:integration`
|
||||
67/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`
|
||||
### B3 — Correlation discovery + Trends row with AI annotations (~3-5 days)
|
||||
|
||||
- [ ] 3 pre-defined hypotheses: BP×compliance, mood×pulse,
|
||||
weight×weekday
|
||||
- [ ] New `src/lib/insights/correlations.ts`
|
||||
- [ ] New `src/components/insights/{correlation-card,trends-row,
|
||||
trend-annotation}.tsx`
|
||||
- [ ] Confidence ≥ 0.95, n ≥ 14, conservative phrasing
|
||||
- Detailed report: `.planning/phase-B3-report.md`
|
||||
|
||||
### B4 — Weekly Report + Storyboard + Mobile passes (~3-4 days)
|
||||
|
||||
- [ ] New `/insights/report/[week]` route + `window.print()` export
|
||||
- [ ] Storyboard 90-day BP timeline with annotations[]
|
||||
- [ ] Mobile passes: B1 + B2 mobile equivalents (drawer →
|
||||
full-screen sheet)
|
||||
- Detailed report: `.planning/phase-B4-report.md`
|
||||
|
||||
### B5 — Personal AI Coach Health Score (~2-3 days)
|
||||
|
||||
- [ ] Composite Health Score (0-100): 30% BP-target + 20%
|
||||
weight-trend + 20% mood-stability + 30% compliance
|
||||
- [ ] Three bands (≥75 green, 50–74 yellow, <50 red)
|
||||
- [ ] "Ask the Coach" CTA opens B2 drawer with prefilled prompt
|
||||
- Detailed report: `.planning/phase-B5-report.md`
|
||||
|
||||
## Wave D — Multi-agent QA + Product-Lead review
|
||||
|
||||
- [x] code-reviewer (1 CRIT + 5 HIGH + 12 MED/LOW)
|
||||
- [x] security review (0 CRIT, 0 HIGH, 3 MED/LOW)
|
||||
- [x] design / UX review (0 CRIT, 2 HIGH, 8 MED/LOW)
|
||||
- [x] senior-dev review (0 CRIT, 3 HIGH, 13 MED/LOW)
|
||||
- [x] simplify (5 apply-yes, 2 apply-no)
|
||||
- [x] Product Lead — v1.4.20 redesign plan filed at
|
||||
`phase-D-v1419-product-lead-review.md`
|
||||
- [x] Reconcile applied CRITICAL + 7/10 HIGH + all 5 simplify-yes; 3
|
||||
HIGH deferred to `.planning/v1420-backlog.md` under "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`
|
||||
- [ ] code-reviewer
|
||||
- [ ] security review
|
||||
- [ ] design / UX review
|
||||
- [ ] senior-dev review
|
||||
- [ ] simplify
|
||||
- [ ] Product Lead — v1.5 redesign plan
|
||||
- [ ] Reconcile applied CRITICAL + HIGH; defer MED/LOW to v1.4.21
|
||||
- Detailed report: `.planning/phase-D-v1420-reconcile-report.md`
|
||||
|
||||
### Status block — D (v1.4.19)
|
||||
## Phase E — Release v1.4.20
|
||||
|
||||
- 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 (insights `data?.`
|
||||
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
|
||||
- [ ] Pre-release verify (typecheck, lint, test, integration,
|
||||
format, build)
|
||||
- [ ] Bump package.json + CHANGELOG
|
||||
- [ ] Tag + push v1.4.19
|
||||
- [ ] Merge develop → main (release-merge only)
|
||||
- [ ] Tag + push v1.4.20
|
||||
- [ ] GHCR build green
|
||||
- [ ] Coolify deploy
|
||||
- [ ] /api/version=1.4.19 confirmed
|
||||
- [ ] /api/version=1.4.20 confirmed
|
||||
- [ ] Production smoke
|
||||
- [ ] GH release
|
||||
- [ ] Docs site + landing site sync
|
||||
- [ ] `docs/audit/v1419-summary.md` (Marc-Brief)
|
||||
- Detailed report: `.planning/phase-E-report.md`
|
||||
- [ ] `docs/audit/v1420-summary.md` (release brief)
|
||||
- [ ] Update v1.5 plan based on what v1.4.20 learned
|
||||
|
||||
---
|
||||
|
||||
## Status block — Phase 0 (v1.4.19)
|
||||
## Status block — F0 (v1.4.20)
|
||||
|
||||
- 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 `/insights` polish + 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.
|
||||
|
||||
- 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.ts` forbidding "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 file
|
||||
`src/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 in
|
||||
`medical-reference-prompt.test.ts` relaxed from `/4\.16\.\d+/` to
|
||||
`/4\.\d+\.\d+/`. Single commit `b5e9a95` on `origin/main`. Smoke
|
||||
verification deferred to post-deploy (cached payloads carry the
|
||||
old PROMPT_VERSION; the row's `promptVersion` distinguishes
|
||||
pre/post 4.19.0). Detailed report:
|
||||
`.planning/phase-A4-report.md`. Cross-agent race: pre-commit hook
|
||||
bundled A3's `src/app/page.tsx` edits into my commit — same
|
||||
shared-cwd race documented across earlier marathons; A3's edits
|
||||
are correct on `origin/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-safe `whitespace-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 under `settings.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: commit `ba0d6b8` accidentally bundled A4's
|
||||
`.planning/STATE.md` and `phase-A4-report.md` edits — 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:
|
||||
`957f8e9` equalises every form input height to 36 px (AI active-
|
||||
provider select `h-10` -> `h-9`, AI add-provider select `h-8` ->
|
||||
`h-9`, Dashboard "Compare to" trigger drops `min-h-11` so default
|
||||
`h-9` applies); `9fda634` standardises 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); `1075784` lifts 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 shared `NATIVE_SELECT_CLASS` constant; `737b533`
|
||||
uniformises card-internal `space-y` to `space-y-4` (Dashboard
|
||||
layout `space-y-5` -> `space-y-4`, AI provider config forms
|
||||
`space-y-3` -> `space-y-4`); `78f1f3f` adds
|
||||
`e2e/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:
|
||||
commit `737b533` bundled A5's `.planning/STATE.md` update; 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.md` for 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 typecheck` clean, `pnpm lint` 0 errors / 12 baseline
|
||||
warnings, `pnpm test --run` 1669 / 1669 (up +11 from new
|
||||
TDD cases: time-window-format 6, achievements-no-insults
|
||||
4, login-overview-auth-filter 1), `pnpm test:integration`
|
||||
67 / 67. Format-check shows 8 pre-existing
|
||||
`.planning/*` + `docs/audit/*` files dirty (baseline noise
|
||||
on `origin/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 typecheck` clean, `pnpm lint` 0
|
||||
errors / 12 baseline warnings, `pnpm test` 1672/1672,
|
||||
`pnpm test:integration` 67/67, `pnpm format:check` only
|
||||
pre-existing `.planning/*` + `docs/audit/*` baseline noise
|
||||
dirty). CHANGELOG `## [1.4.19] — 2026-05-10` added 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
|
||||
commit `89f00cf chore(release): v1.4.19` on 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 of `ghcr.io/mbombeck/healthlog:1.4.19`, now also
|
||||
carrying the `:latest` tag 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 app`
|
||||
inside `/data/coolify/applications/pg8wggwogo8c4gc4ks0kk4ss`.
|
||||
- **Version transition:** `/api/version` reported `1.4.19` at
|
||||
**2026-05-10T12:39:59Z** (first poll after recreate; well inside the
|
||||
5 min cap).
|
||||
- **Smoke (curl, session `cmox4d6fj000101p8w9ykhcnm`):**
|
||||
`/` 200 · `/insights` 200 · `/admin/api-tokens` 200 ·
|
||||
`/settings/integrations` 200 · `/achievements` 200 ·
|
||||
`/dashboard` **404** (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 from `CHANGELOG.md`).
|
||||
- **No code changes.** Source tree untouched per fallback contract.
|
||||
- 2026-05-10T15:00+02:00 — F0 complete. Dangling v1.4.19 release
|
||||
reports (`phase-E1-report.md` + `phase-E3-report.md`) committed,
|
||||
STATE.md replaced with v1.4.20 scaffold (F1–F6 foundation +
|
||||
B1–B5 Insights redesign + Wave D + Phase E), ROADMAP.md updated
|
||||
to track v1.4.20 with v1.4.19 archived. Branch model unchanged
|
||||
for this commit (still `main`); F1 will introduce `develop`.
|
||||
@@ -1,51 +1,63 @@
|
||||
# Phase E1 — v1.4.18 verify + tag
|
||||
# Phase E1 — v1.4.19 verify + tag
|
||||
|
||||
Timestamp: 2026-05-10T11:14+02:00 (push)
|
||||
Timestamp: 2026-05-10T14:34+02:00 (push)
|
||||
|
||||
## Verification
|
||||
|
||||
| Step | Result | Notes |
|
||||
| ----------------------- | ------ | -------------------------------------------------------------------- |
|
||||
| `pnpm typecheck` | PASS | 0 errors |
|
||||
| `pnpm lint` | PASS | 0 errors / 12 pre-existing warnings (unchanged baseline) |
|
||||
| `pnpm format:check` | PASS | clean across the tree (the v1.4.18 reconcile sweep `3048dd6` cleared |
|
||||
| | | all drift) |
|
||||
| `pnpm test` | PASS | 1605 / 1605 unit tests, 197 files, 4.19s |
|
||||
| `pnpm test:integration` | PASS | 66 / 66 integration tests, 18 files, 8.23s |
|
||||
| Step | Result | Notes |
|
||||
| ----------------------- | ------ | ---------------------------------------------------------------- |
|
||||
| `pnpm typecheck` | PASS | 0 errors |
|
||||
| `pnpm lint` | PASS | 0 errors / 12 pre-existing baseline warnings (no new) |
|
||||
| `pnpm format:check` | PASS\* | only `.planning/*` + `docs/audit/*` baseline noise dirty (same |
|
||||
| | | call as v1.4.18 / v1.4.16; no source-tree drift) |
|
||||
| `pnpm test` | PASS | 1672 / 1672 unit tests, 210 files, 4.59s |
|
||||
| `pnpm test:integration` | PASS | 67 / 67 integration tests, 18 files, 8.96s |
|
||||
|
||||
`pnpm build` and `pnpm e2e` deferred to CI Docker (Node 22) per
|
||||
CLAUDE.md.
|
||||
|
||||
## Release artefacts
|
||||
|
||||
- **Bumped** `package.json` version `1.4.17` → `1.4.18`.
|
||||
- **CHANGELOG entry** added for `## [1.4.18] — 2026-05-10` (English,
|
||||
Marc's voice; sections: Added / Changed / Fixed / Deferred to
|
||||
v1.4.19 / v1.5).
|
||||
- **Release commit**: `0243e20 chore(release): v1.4.18` —
|
||||
package.json + CHANGELOG.md only (4 untracked stale dotted-segment
|
||||
export route directories left in place per v1.4.16 / v1.4.17
|
||||
precedent; not part of this release).
|
||||
- **Tag**: `v1.4.18` (annotated, message `HealthLog v1.4.18`).
|
||||
- **Push**: `c072ad8..0243e20 main -> main` and `[new tag] v1.4.18`
|
||||
- **Bumped** `package.json` version `1.4.18` → `1.4.19`.
|
||||
- **CHANGELOG entry** added for `## [1.4.19] — 2026-05-10` (English,
|
||||
Marc's voice, no AI / agent / marathon mention; sections: Fixed /
|
||||
Changed / Deferred to v1.4.20). 10 Fixed items (including the
|
||||
CRITICAL mobile Sys/Dia badge enum mismatch), 6 Changed items
|
||||
(integrations status-pill consolidation, Comparison overlay
|
||||
relocation to `/insights`, single page-level refresh, BP/Weight
|
||||
tile strip removal, AI prompt no-default-positivity ground rule with
|
||||
`PROMPT_VERSION 4.19.0`, settings consistency sweep, Zielwerte DE
|
||||
labels), 3 deferral buckets (3 HIGH carry-over + 31 MED + 16 LOW +
|
||||
`/insights` redesign roadmap).
|
||||
- **Release commit**: `89f00cf chore(release): v1.4.19` —
|
||||
package.json + CHANGELOG.md only. Co-Author Claude Opus 4.7 (1M
|
||||
context) trailer; no `--no-verify`, no `--no-gpg-sign`, all
|
||||
pre-commit hooks green.
|
||||
- **Tag**: `v1.4.19` (annotated, message `HealthLog v1.4.19`).
|
||||
- **Push**: `1f5ad68..89f00cf main -> main` and `[new tag] v1.4.19`
|
||||
to `git@github.com:MBombeck/HealthLog.git`.
|
||||
|
||||
## CI state at push +3 s
|
||||
|
||||
`gh run list --limit 3` returned three in-progress runs at
|
||||
`2026-05-10T09:14:38Z–09:14:39Z`:
|
||||
`gh run list --limit 5` returned five in-progress runs at
|
||||
`2026-05-10T12:34:06Z–12:34:07Z`:
|
||||
|
||||
- **GHCR (tag)**: run id **25624945158** — Build & Publish Docker
|
||||
Image on `v1.4.18`.
|
||||
- Security & Quality (main): run id `25624944860`.
|
||||
- Integration tests (main): run id `25624944855`.
|
||||
- **GHCR (tag)**: run id **25628853202** — Build & Publish Docker
|
||||
Image on `v1.4.19`.
|
||||
- e2e (main): run id `25628852739`.
|
||||
- Security & Quality (main): run id `25628852734`.
|
||||
- Integration tests (main): run id `25628852731`.
|
||||
- Build & Publish Docker Image (main): run id `25628852729`.
|
||||
|
||||
Phase E2 picks up from here (GHCR completion, Coolify deploy,
|
||||
`/api/version=1.4.18`, prod smoke, GH release, docs+landing sync).
|
||||
`/api/version=1.4.19`, prod smoke, GH release, docs+landing sync,
|
||||
Marc-Brief at `docs/audit/v1419-summary.md`).
|
||||
|
||||
## Notes
|
||||
|
||||
Only one CRITICAL / HIGH carried into v1.4.19: security HIGH-2
|
||||
i18n bundle leak (hidden achievement strings shipped in the static
|
||||
client bundle even after the API redaction). Tracked in
|
||||
`.planning/v1419-backlog.md`. ZERO unresolved CRITICAL.
|
||||
ZERO unresolved CRITICAL. Three HIGH carried into the v1.4.20 backlog
|
||||
(D-CR-H-05 insights `data?.` 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). One additional HIGH
|
||||
(D-SR-H-3 Withings/MoodLog card-chrome dedup) pulled into the v1.5
|
||||
backlog as Apple-Health-card-prep work.
|
||||
@@ -1,92 +1,41 @@
|
||||
# Phase E3 — Docs + Landing sync (v1.4.18)
|
||||
# Phase E3 — docs + landing sync (v1.4.19)
|
||||
|
||||
Status: complete · 2 commits on healthlog-docs, 1 commit on
|
||||
healthlog-landing, both pushed to origin/main.
|
||||
Status: ok / 2026-05-09. One commit per repo on origin/main.
|
||||
|
||||
## healthlog-docs
|
||||
## healthlog-docs (commit `6e8840e`)
|
||||
|
||||
Two commits on `origin/main`:
|
||||
Single commit `chore(release): document v1.4.19 highlights`. Six
|
||||
files touched, all pre-existing pages — no new pages in v1.4.19:
|
||||
|
||||
- `6688c81 chore(release): document v1.4.18 highlights` — six
|
||||
existing pages refreshed.
|
||||
- `e5a58bc feat(achievements): hidden achievements page` — new
|
||||
long-form page plus its sidebar entry in `astro.config.mjs`.
|
||||
- `self-hosting/updates.mdx` + `self-hosting/scaling.mdx` — three
|
||||
docker image tags bumped 1.4.18 -> 1.4.19 (single-container,
|
||||
app-web, app-worker).
|
||||
- `configuration/admin-settings.mdx` — api-tokens row in the admin
|
||||
console table notes the v1.4.19 desktop-table no-scrollbar fix
|
||||
(truncate-with-tooltip + `table-fixed` colgroup widths).
|
||||
- `features/integrations.mdx` — "Connection Status" retitled
|
||||
"v1.4.15+, consolidated in v1.4.19", explains the new single
|
||||
status pill + Withings / Mood Log divider parity; redundant
|
||||
banner trio + bottom-of-card "letzter Sync" line gone.
|
||||
- `features/dashboard-customization.mdx` — BD-Zielbereich tile gets
|
||||
a sentence on the v1.4.19 fix (`allTime` window via
|
||||
`computeBpInTargetWindows()`); new "Mobile chart layout (refined
|
||||
in v1.4.19)" subsection covers the mobile-first header stack +
|
||||
`useViewportWidth` hook + tick-density helper (4/6/8/10 caps).
|
||||
- `features/ai-insights.mdx` — new "Prompt Tone (v1.4.19)" section
|
||||
on GROUND RULE 7 + PROMPT_VERSION 4.19.0.
|
||||
|
||||
Pages touched in commit `6688c81`:
|
||||
No standalone "current version" surface or roadmap section in the
|
||||
docs site, so no v1.4.20 teaser added.
|
||||
|
||||
1. `features/dashboard-customization.mdx` — rewrote the
|
||||
"Apple-Health-style chart polish" block. Gradient fills are gone,
|
||||
the mood chart shows plain dots instead of emoji glyphs (the emoji
|
||||
still appears in the tooltip), and a new "Per-chart overlay toggles
|
||||
(v1.4.18+)" subsection documents the cog menu with the three
|
||||
switches (trend / trend arrow / target range), defaults-off
|
||||
behaviour, and per-chart-per-user persistence on
|
||||
`User.dashboardWidgetsJson.chartOverlayPrefs`.
|
||||
2. `features/gamification.mdx` — bumped roster from 38 → 59,
|
||||
re-cut the category list (medication / vitals / mood / engagement
|
||||
/ security / bug / hidden), called out the v1.4.18 discovery filter
|
||||
that hides locked badges for metrics with no data, and pointed at
|
||||
the new hidden-achievements page.
|
||||
3. `dashboard/comparison.mdx` — dropped the "gradient fill" phrasing
|
||||
from the prior-period-line description so the page is consistent
|
||||
with the new clean-line aesthetic.
|
||||
4. `configuration/admin-settings.mdx` — annotated the API tokens
|
||||
section row with "(mobile layout fixed in v1.4.18)".
|
||||
5. `self-hosting/scaling.mdx` — bumped the
|
||||
`ghcr.io/mbombeck/healthlog:` example tags from `1.4.16` to
|
||||
`1.4.18`.
|
||||
6. `self-hosting/updates.mdx` — same image tag bump for the pinning
|
||||
example, and the rollback example refreshed `1.4.15` → `1.4.17`
|
||||
so it points at the immediately-previous release.
|
||||
## healthlog-landing (commit `dd5892f`)
|
||||
|
||||
New page in commit `e5a58bc`:
|
||||
Single one-line commit bumping `softwareVersion` in JSON-LD from
|
||||
`1.4.18` to `1.4.19`. Feature copy untouched per brief — v1.4.20
|
||||
will overhaul the page itself.
|
||||
|
||||
- `features/achievements-hidden.mdx` — acknowledges the hidden
|
||||
Easter-egg achievements without spoiling the triggers, lists the
|
||||
six categories the Achievements page groups by (streaks /
|
||||
milestones / consistency / improvement / discovery / hidden),
|
||||
explains the DOM-level redaction model (the page never reads the
|
||||
real strings for `hiddenLocked: true`), and notes the v1.4.19
|
||||
follow-up for the `messages/{en,de}.json` bundle leak. Wired into
|
||||
the Features section of the sidebar via `astro.config.mjs`.
|
||||
## Constraints honoured
|
||||
|
||||
The v1.4.16 "AI Insights — How It Works" page (`insights/how-it-works.mdx`)
|
||||
was reviewed for chart-gradient or smiley-glyph mentions; it has none,
|
||||
so no edit was needed there.
|
||||
|
||||
Verification: `npm run build` — 45 pages built, 0 warnings, the new
|
||||
`/features/achievements-hidden/index.html` renders, pagefind search
|
||||
index covers it.
|
||||
|
||||
## healthlog-landing
|
||||
|
||||
One commit `ed638db chore(release): v1.4.18 version label + cleaner
|
||||
chart phrasing` on `origin/main`.
|
||||
|
||||
- `softwareVersion` in the JSON-LD `SoftwareApplication` block
|
||||
(`src/app/layout.tsx`) bumped from `1.4.16` to `1.4.18`.
|
||||
- The featureList line "Apple-Health-quality charts with gradient
|
||||
fills, smooth animation, personal 90-day baseline, rich tooltips,
|
||||
and explicit empty states" rewritten to reflect the v1.4.18
|
||||
aesthetic — "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".
|
||||
- Two capability badges in `src/app/page.tsx` updated:
|
||||
"Apple-Health-quality charts" → "Clean-line charts with per-chart
|
||||
overlays"; "30+ Achievements" →
|
||||
"59 Achievements (plus a few hidden ones)".
|
||||
|
||||
Verification: `pnpm build` — Next.js static export green, single
|
||||
`/` page prerendered as expected.
|
||||
|
||||
## Push status
|
||||
|
||||
- `healthlog-docs`: `2a5802b..e5a58bc main -> main`
|
||||
- `healthlog-landing`: `3d17207..ed638db main -> main`
|
||||
|
||||
No `--no-verify` / `--no-gpg-sign` flags used; neither repo has
|
||||
pre-commit hooks configured today, so nothing was bypassed.
|
||||
Co-Author trailer (`Claude Opus 4.7 (1M context)`) present on all
|
||||
three commits. The HealthLog main repo, the iOS app, and the
|
||||
`-audit-fixes` worktrees were not touched, per the brief's
|
||||
constraints.
|
||||
English, Marc's voice, no AI / agent / marathon / phase mention. No
|
||||
`--no-verify`, no `--no-gpg-sign`. Co-Author trailer present on
|
||||
both commits. Main HealthLog repo untouched.
|
||||
Reference in new issue
Block a user