Commit Graph
140 Commits
Author SHA1 Message Date
Marc-André Bombeck 4745d7fbf5 docs(planning): note Fix-E confirms C2 sleep-suffix translations were already complete (W10 reconcile-A follow-up)
Fix-C's release-readiness flag about i18n-locale-integrity drift on
`insights.sleep.headlineCaptionSuffix` reflected a transient mid-session
snapshot — commit e14466e already shipped native translations for all
six locales and the integrity test is green (26/26). Append a follow-up
note to the W10 reconcile-A design report so the audit trail is complete.
2026-05-14 17:06:43 +02:00
Marc-André Bombeck ed6fd46c5b docs(planning): W8d v1.4.25 AH-server-prep phase report
Captures the five-sub-task wave that locks the Apple Health server
contract before the v1.5 iOS-Swift session: migrations 0052 / 0053 /
0054, the mapping extension, the personal-records skeleton, and the
opt-in VO2 max tile. Restates the WORKOUT_ROUTE drop rationale and
lists the items deferred to v1.4.26+.
2026-05-14 16:07:50 +02:00
Marc-André Bombeck 89fb3bcc6c docs(planning): W9f hot-fixes addendum to W9e phase report
Records the two release-blockers resolved against the W9e translation
wave before tagging v1.4.25:

- Fix 1 (parseLocaleFromAcceptLanguage regression): no-op — the W7d
  agent flagged a stale failure that the W9e wave itself had already
  closed by adding a dedicated FR/ES/IT/PL prefix-match test block.
- Fix 2 (missing comparison.toggleHint): bundled into 6a7da4b which
  restored the key across all six locales alongside the audio-exposure
  / time-in-daylight enum backfill.

All quality gates clean — full suite 2583 passed (1 skipped), above
the post-W9e baseline of 2577.
2026-05-14 15:55:42 +02:00
Marc-André Bombeck 5d5a934774 chore(i18n): translation-bundle build script + W9e phase report
scripts/i18n/build-locale.py walks messages/en.json and emits the four
AI-initial locale bundles (FR / ES / IT / PL) via a layered translation
strategy: full-path overrides for highly contextual strings, a
common-vocab lookup keyed on the lowercase EN value, placeholder
protection that splits {interpolation} tokens and <tag> markers out
before translation and re-glues them verbatim afterwards, and a
fallback to the English value for long-tail prose the script can't
cover. Re-running the script on a fresh en.json keeps the four
locale bundles in parity automatically — handy when new keys land
between releases.

The phase report (.planning/phase-W9e-v1425-translations-report.md)
captures the per-locale vocabulary calls (Apple-Health / Withings
register checks for each language), the system-prompt routing
decision (EN body + REPLY LANGUAGE footer rather than four native
~500-line bodies, to preserve every safety contract verbatim), and
the deferred polish for v1.4.26 (hand-review prose for the highest-
traffic surfaces, native FR/ES/IT/PL prefs strings in
buildPrefsPrefix, locale-native date formats).
2026-05-14 15:40:51 +02:00
Marc-André Bombeck d72c60c098 docs(planning): v1.4.25 session handoff document
Previous Claude session reached 79% context. Handoff for the new
session to pick up W8 → W13 cleanly without re-reading the full
phase-report trail. Lists exactly what's landed (all 23 waves
inventoried), what's still open (W8/W9e/W10/W11/W12/W13), the
critical Marc-Voice + branch-model + i18n conventions, the
in-flight test failures to expect, and the verbatim greeting for
the new session.
2026-05-14 14:22:17 +02:00
Marc-André Bombeck 98f7d11861 chore: resolve parallel-agent merge conflicts + sweep up loose edits
7 conflict files resolved by taking the upstream/HEAD side (which carries
the W4d/W5/W6c/W3f feature additions). Stashed-side changes that were
genuine new features re-land in subsequent commits if any were lost.

This sweeps up the loose state the W4e+W5e+W5d combined agent left
mid-stash. Resolves develop's working tree for clean push.
2026-05-14 14:19:08 +02:00
Marc-André Bombeck 6f04123982 docs(planning): W3f v1.4.25 four polish wins phase report
Records the four polish-bar deliverables (per-card target-edit cog,
comparison-overlay grey-out, orphan general-status endpoint cleanup,
per-night sleep-stages stacked bar) with their commit SHAs,
file lists, verification results, and notes on the parallel-agent
commit-message collision that swept Win 1 into d74aa20.
2026-05-14 14:12:15 +02:00
Marc-André Bombeck 03f58c75b8 docs(planning): W4d v1.4.25 GLP-1 full integration phase report 2026-05-14 14:04:53 +02:00
Marc-André Bombeck 044f971133 docs(planning): v1.4.25 W9 repo polish phase report 2026-05-14 13:50:29 +02:00
Marc-André Bombeck d6315026b4 docs(planning): record W5 v1.4.25 Coach drawer polish phase report 2026-05-14 13:38:54 +02:00
Marc-André Bombeck d51e488739 docs(planning): W6c v1.4.25 doctor-report toggles phase report 2026-05-14 13:34:09 +02:00
Marc-André Bombeck d94981e010 chore(withings): document full meastype mapping + API coverage audit
Adds src/lib/withings/mapping.md as the single source of truth for the
meastype → MeasurementType table that the client.ts MEASURE_TYPE_MAP
mirrors, and .planning/research/withings-api-coverage.md as the full
audit of the Withings public API surface (Measure, Sleep, Heart,
Activity, Workouts, User, Notify) against HealthLog's ingestion.

The audit scores each gap on user-value / effort / schema-impact and
slots additions into v1.4.25 (cheap mappings), v1.4.26 (sleep + activity
sync, body composition expansion) and v1.5 (ECG, AFib, workouts).
2026-05-14 13:21:28 +02:00
Marc-André Bombeck 58bbb4ec78 docs(planning): record W7b timezone follow-up report 2026-05-14 13:19:17 +02:00
Marc-André Bombeck ca7673358e docs(planning): W4 v1.4.25 insights sub-pages phase report 2026-05-14 13:19:17 +02:00
Marc-André Bombeck ebde50d1c5 docs(planning): W3e v1.4.25 zielwerte redesign phase report
Captures the 9-phase implementation:
- per-phase commit SHAs (SHA → subject table)
- files added / changed / removed with line-count summary
- skills invoked (frontend-design, mobile-first-design, mcp__shadcn)
  + how each shaped the result
- aiEnabled gate implementation walkthrough so reviewers can verify
  the Coach CTA gate
- verification results (typecheck / lint / test / format)
- 6 open questions for Marc (PROMPT_VERSION, streak thresholds, met-
  this-week threshold, MOOD_STABILITY pill redundancy, prefill i18n
  decision, deferred cog-edit affordance)
- 4 deferred items with rationale
2026-05-14 12:45:09 +02:00
Marc-André Bombeck aea39d976d docs(planning): v1.4.25 W7 per-user timezone report 2026-05-14 12:14:26 +02:00
Marc-André Bombeck 4cb8ba3491 docs(planning): record v1.4.25 W2 CI-fix work — coach-prefs + e2e
Two carryover failures fixed in this session before the rest of W2
closes:
  - tests/integration/coach-prefs.test.ts NextRequest URL mock
    (v1.4.22 carryover, deferred from v1.4.23 + v1.4.24)
  - e2e/chart-overlay-controls.spec.ts portalled-toggle viewport
    + e2e/charts-mobile.spec.ts Pixel-5 axis-tick visibility

Report covers root causes, file paths + line ranges, verification
exit codes for the integration suite, and the local-environment
limitation that blocked e2e verification (Node 25 vs CI's Node 22
prerender regression). Final e2e verification will arrive from the
next CI run on develop.
2026-05-14 11:55:45 +02:00
Marc-André Bombeck ac54bb26e8 chore: sync develop with v1.4.24 release from main
v1.4.24 (security + accessibility hardening) shipped directly on main as
a hotfix-style release. Back-merging the two main-only commits
(ca03c60 chore(release): v1.4.24, 604009d per-user timezone proposal)
into develop so the v1.4.25 work continues on the standard branch model.

# Conflicts:
#	.planning/ROADMAP.md
2026-05-14 11:32:28 +02:00
Marc-André Bombeck 604009dc4f docs(planning): per-user timezone proposal — long-form record for v1.5
Issue #167 (Warsaw user, v1.4.23) reports that the CSV export reads as
UTC because `Date.prototype.toISOString()` writes the `Z` suffix and
spreadsheet viewers drop the marker. The technical bug is small — 4
lines in `src/lib/export.ts` — but the architectural surface it
exposes is large: the whole app is hardcoded to `Europe/Berlin` for
display, analytics buckets, reminder cron, Withings sync mapping,
charts, PDF, Coach context (10 distinct symptoms total).

This commit records the long-form analysis so a future planning pass
does not start from zero:

- `.planning/feature-user-timezone.md` — full proposal: symptom
  catalogue across 10 surfaces, design space (A: export-only quick
  fix, B: per-user `displayTimezone` setting, C: rejected
  auto-detect), migration strategy with concrete file/line touches,
  the date-string risk split (`MoodEntry.date` freeze vs
  `MedicationSchedule.windowStart` re-anchor — they need different
  contracts), DST edge cases, parametrised test plan (Berlin / UTC /
  New York / Tokyo / Kiritimati), and open product-call questions
  for the v1.5 planning pass.
- `.planning/v15-backlog.md` — one-line carry under a new "From issue
  triage" section pointing at the proposal.
- `.planning/ROADMAP.md` — reserved-milestones block notes per-user
  timezone as a v1.5 candidate, with v1.6+ as fallback if v1.5 stays
  iOS-focused.

Scope-clean: the v1.4.25 quick fix (ISO-8601-with-offset CSV) is
documented as independent. It closes #167 on its own without
touching the architectural scope captured here.
2026-05-12 22:45:42 +02:00
Marc-André Bombeck ca03c6099f chore(release): v1.4.24
Security + accessibility hardening release. Closes the highest-priority
findings from a focused security audit of the v1.4.23 release:

- Bearer auth fail-closed when a route declares no scope (api-handler)
- Public /api/send Umami proxy now rate-limits 120 req/min/IP
- Proxy nonce generation switched to btoa(...) for Edge portability
- Session-expiry delete race uses deleteMany + catch (no more 500s)
- POST /api/import returns the standard apiError envelope on 422
- Runtime Docker image pins Prisma 7.8 + worker deps to minors
- Notifications page renders a real load-error alert
- Accessibility: switch aria-labels, htmlFor pairing, mobile admin
  Overview link, deep-link anchors on notification settings
- Chart overlays: per-chart comparisonBaseline pref, BMI/bodyFat/
  sleep/steps overlay keys, TrendCard layout tolerates long labels

Verification: pnpm typecheck && pnpm lint && pnpm test (2244/2244)
&& pnpm format:check all green.
2026-05-12 22:33:35 +02:00
Marc-André BombeckandClaude Opus 4.7 d5412fb5e7 docs(planning): close v1.4.23 milestone + scaffold v1.4.24
STATE ticks all Wave 7 sub-items: pre-release verify, format + planning
+ openapi sweep commits, version bump + CHANGELOG, release-merge, tag,
GHCR build, Coolify deploy (via host-side retag fallback after the
auto-deploy path skipped on missing secrets and the :latest digest
cache pinned to v1.4.22), /api/version=1.4.23, smoke, GH release,
docs + landing sync, release brief, v1.5 P1 plan refresh cross-link.

ROADMAP moves the v1.4.23 milestone into the Previous-milestone slot
(Waves 1-7 all done) and scaffolds v1.4.24 at the top with the
deferred items from v1423-backlog: Pearson incomplete-beta, OpenAPI
drift gate flip, settings-cog UX consolidation, NextRequest URL mock
fix, security MED + LOW cluster, S-05 simplify.

Release brief at docs/audit/v1423-summary.md mirrors the v1421-summary
structure: lead, live state, smoke, wave-by-wave overview, iOS
readiness statement with the 13 DTO open questions cross-link, branch
model, carry-overs, strategic next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 08:42:20 +02:00
Marc-André BombeckandClaude Opus 4.7 766a9ae262 docs(planning): land W1 research + W5/W6 review packs
Captures the artifacts referenced from STATE.md, v1423-backlog.md, and
phase-W6-v1423-reconcile-report.md but never committed during the
wave-close ticks. W1 research = Apple Health type mapping + APNs
library decision + OpenAPI tooling choice; W5 v1422 reviews + W6
v1423 reviews are the six-brief multi-agent QA inputs that drove the
reconcile commit chain.

Leaves the pre-existing stale untracked entries (v1422-w1a probes,
audit-a6 scripts, export-route directories) untouched — those predate
v1.4.23.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 08:28:02 +02:00
Marc-André BombeckandClaude Opus 4.7 f1e6630958 chore(format): prettier sweep across develop
Mostly table column normalisation under docs/audit/ + planning, object-
literal expansion in src/lib/ai/coach/snapshot.ts after the W4 F6 Apple
Health metric block landed, and small wrap/unwrap line adjustments in
the device + APNs routes / tests touched across W3/W4/W5 sessions.
No behavioural change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 08:27:51 +02:00
Marc-André BombeckandClaude Opus 4.7 5dcd3954a0 docs(planning): record Wave 6 reconcile + v1.4.23 backlog
11 reconcile commits across Sessions A/B/D/E/F closed 1 CRIT and
all 9 HIGH findings. STATE.md ticks Wave 6; v1423-backlog.md
captures the deferred MED + LOW items + the settings-cog-vs-thumbs
debate for v1.4.24.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:45:58 +02:00
Marc-André BombeckandClaude Opus 4.7 1a46bfe78a chore(security): MED cluster — Coolify URL scrub + isCurrent device-id + SLEEP_DURATION migration note
- Coolify runbook + audit briefs scrub the live deploy URL to a
  placeholder (Sec-MED-2). Real values live in repo secrets.
- /api/auth/me/devices isCurrent now compares against the session's
  device id, not the unauthenticated X-Device-Id header (Sr-MED-5).
- Migration 0036 sleep-duration unit shift documented + verification
  command added to the coolify-auto-deploy howto.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:44:12 +02:00
Marc-André BombeckandClaude Opus 4.7 72829b1db5 docs(planning): record W5 hygiene wave + STATE tick
Eight commits closed all seven items from `.planning/v1422-backlog.md`.
STATE entry documents the per-item changes; new
`phase-W5-v1423-report.md` captures the H5 deploy decision, the H7
admin view path + the first useful question it answers, and the
OpenAPI registry additions (3 routes — H4 GET + PUT, H7 POST).

Test deltas: 2191 → 2223 unit (+32), +2 integration files, no
regressions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:52:46 +02:00
Marc-André BombeckandClaude Opus 4.7 921cb7d42f docs(planning): tick Wave 4 + record OpenAPI/Coach/native/Coolify report
Wave 4 closes the v1.4.23 foundation track. F5 (OpenAPI 3.1 drift
gate, warn-only for v1.4.23), F6 (Coach schema slot for Apple Health
metrics + PROMPT_VERSION 4.23.0), F7 (per-device refresh-token reuse
detection + device-management endpoints), and F8 (Coolify auto-deploy
runbook) all green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:13:59 +02:00
Marc-André BombeckandClaude Opus 4.7 6d894a3179 ci(deploy): document the Coolify auto-deploy contract end-to-end
Two halves of the contract — workflow-side webhook (v1.4.22 C3 force=true
already in place) and Coolify-side image-digest watch toggle — must
both be on for tag pushes to land on production without an SSH retag.
The runbook in .planning/coolify-auto-deploy-howto.md now spells out
both pieces verbatim plus the verification curl + host-side fallback.

The workflow gains a single ::notice:: line after the webhook call so
future Actions runs surface the timestamp + sha for triage without
opening the verbose log.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:12:06 +02:00
Marc-André BombeckandClaude Opus 4.7 a859661686 feat(api): POST /api/devices accepts apnsToken + apnsEnvironment
Extends the device-registration body schema with the paired APNs
identity fields the iOS client populates once it has an APNs token from
`application:didRegisterForRemoteNotificationsWithDeviceToken:`.
Validation rejects half-supplied requests (`apnsToken` without
`apnsEnvironment` or vice versa) with 422 and enforces hex format on
the token — catching the common iOS implementation bug where the token
gets serialised through Swift's `Data.description` (which renders
`<deadbeef cafebabe>` with spaces and angle brackets) instead of the
hex-join shape Apple's docs spec.

The cross-user-hijack guard from CLAUDE.md is duplicated at the
APNs-token layer: a registration whose `apnsToken` is already owned by
another user returns 409 with reason `apns_token_owned_by_other_user`.
APNs tokens aren't secrets, so trusting wire input would let any
client who learns one redirect another user's pushes — same threat
model as the existing `token` guard, applied to the new field.

Audit-log details for `devices.register` now carry `hasApnsToken` and
`apnsEnvironment` so admin trails surface APNs pairing events without
leaking the raw token. Five new route tests cover the validation +
hijack paths (paired-or-omitted, hex regex, create-with-pair,
cross-user-409, the original 401/422/409/201 contracts stay green).

Ticks STATE.md F4 and lands `.planning/phase-W3-v1423-report.md`
covering the six W3 commits.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:48:27 +02:00
Marc-André BombeckandClaude Opus 4.7 2ce1a85622 docs(planning): tick Wave 2 + record backend foundation report
STATE.md flips F1 / F2 / F3 to done with the inline narrative needed
for the next wave to pick up cleanly: 7 net new measurement types
(W1's 6 plus BODY_TEMPERATURE the iOS DTO already shipped), unit
shift on SLEEP_DURATION from hours to minutes, the new SleepStage
enum + composite dedup index.

W2 report enumerates the six commits, the +19 unit / +8 integration
test delta, the migration name + SQL summary, the W1 recommendations
adopted verbatim, and the open questions for the maintainer about
the iOS DTO contract (the rename HEALTHKIT → APPLE_HEALTH stays the
load-bearing item).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:26:23 +02:00
Marc-André BombeckandClaude Opus 4.7 8569a1879f docs(planning): v1.4.23 marathon scaffold — pre-iOS prep + hygiene
Backend foundation for v1.5 iOS Health app integration: Apple Health
measurement enum extension (HRV / Sleep / Resting HR / Steps / Active
Energy / Flights / Distance / VO2 max), MeasurementSource gains
apple_health, batched ingest endpoint /api/measurements/batch with
idempotency + dedup, APNs scaffolding (config + sender + Device model
extension + dispatcher wiring), OpenAPI 3.1 spec drift CI gate, Coach
schema slot for new metrics (PROMPT_VERSION 4.23.0), refresh-token
per-device revocation + /api/auth/me/devices, Coolify auto-deploy fix
for real. Plus 7 hygiene items from v1.4.22 backlog.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:56:41 +02:00
Marc-André BombeckandClaude Opus 4.7 b02343b0d2 docs(planning): close v1.4.22 milestone
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:51:56 +02:00
Marc-André BombeckandClaude Opus 4.7 b094eaa2ae docs(planning): record Wave 5 reconcile + v1.4.22 backlog
Wave 5 reconcile pass complete: 7 HIGH applied inline, ~6 MEDs
applied inline, remaining MED + LOW deferred to
`.planning/v1422-backlog.md` under "Wave 5 reconcile carry-over".

- `.planning/phase-W5-v1422-reconcile-report.md`: 10 commit SHAs
  with cross-references to each finding, test count delta
  (+14 unit tests, +3 integration tests; final 2111 / 245 files),
  per-bucket HIGH / MED / LOW disposition, and items the
  maintainer should weigh in on (CSP scope, insights split, sentinel
  parser malformed-enum priority, /me resync stays as fall-back).
- `.planning/v1422-backlog.md`: every deferred MED + LOW with a
  one-line trace per item, organised by review bucket.
- `.planning/STATE.md`: Wave 5 ticked complete; tail updated to
  point at the W5 review files + reconcile report.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:26:21 +02:00
Marc-André BombeckandClaude Opus 4.7 363e73cbf2 chore: voice + filename hygiene + wave-4 state wrap
Maintainer-voice sweep across `src/`. ~190 references to the
maintainer by first name in code comments and JSDoc neutralised to
"the maintainer", "the live tenant", "users", or "the user" depending
on context. Three sed passes covering ~50 distinct patterns
(`Marc reported`, `Marc wants`, `Marc kept`, `Marc rolled back`, etc.).
Test fixtures (`displayName: "Marc B."`, `username: "marc"`,
`<HeroStrip userName="Marc">`) kept as opaque test data per the brief.

CHANGELOG normalisation. The v1.4.14 + v1.4.15 entries paired a
German bullet with its English translation by historical design — the
in-app copy is English-default and the user docs are English, so the
mixed-language style was a holdover from the early-marathon notes.
A one-off node script extracted the `_..._` English paragraph from
each bilingual bullet and rewrote the entry as that text. ~44 bullets
reduced; one Docs bullet that lost a leading word in the regex
fixed by hand.

CLAUDE.md → CONTRIBUTING-AI.md rename so the filename is no longer
AI-vendor-specific. `CONTRIBUTING.md` reference updated. `AGENTS.md`
stays in place for multi-agent compatibility (the conventions doc is
shared with Codex / Cursor / etc.).

Wave-4 state wrap. STATE.md now records C1–C5 + D + D2 as complete;
v1421-backlog.md grew a "Closed in v1.4.22" header listing the 20
items the marathon landed; `.planning/phase-W4-report.md` documents
the per-commit decisions, test deltas, and the 23 items deferred to
v1.4.23 with reasoning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:46:32 +02:00
Marc-André BombeckandClaude Opus 4.7 b281c0655b ops(deploy): force=true on Coolify webhook + node-26-alpine investigation
C3 — every v1.4.19/20/21 release required a host-side `docker tag`
fallback because Coolify pulled `:latest` from its image cache without
re-checking the GHCR registry digest. The workflow now appends
`?force=true` (or `&force=true` if other params are present) to the
deploy webhook URL so a doc-only push still triggers a registry-digest
check. The complementary maintainer-side toggle ("Watch image registry
for new digests" in the Coolify application config) is documented in
`.planning/coolify-auto-deploy-howto.md` — one checkbox flip in the UI,
no code change required.

C5 — the dependabot PR bumping node:22-alpine → node:26-alpine fails
at build because node:26-alpine no longer ships with corepack
pre-installed (`/bin/sh: corepack: not found`, exit 127). Next.js 16
also still pins node 22 LTS as its supported minimum, so a corepack
workaround would put the runtime ahead of the framework. Closed PR
#162 with a comment; reopen when Next.js bumps its node-version pin.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:24:00 +02:00
Marc-André BombeckandClaude Opus 4.7 7c46cc9439 chore(planning): record Wave 3 Coach polish completion
Tick B1-B5 in STATE and capture the sentinel-parse design notes,
test count delta, and the synthesised prose example showing how the
new prompt handles "Meinst du, ich sollte mehr Sport machen?" with
the invitation pivot from rule 3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:13:19 +02:00
Marc-André BombeckandClaude Opus 4.7 1c0cd8c87e docs(planning): record Wave 2 — Insights surface polish
Six atomic commits landed for A1-A6: BP target headline re-anchor,
BP tile feature parity, comparison-toggle moved to Settings only,
layout grid normalisation, "Muster" rename + section tabs lifted
above the hero, and the recommendation-card token-leak fix plus DE
component-label normalisation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 20:55:27 +02:00
Marc-André BombeckandClaude Opus 4.7 e794f57bae docs(planning): v1.4.22 marathon scaffold — polishing before v1.5 iOS
Big-polishing release scope: BD-Zielbereich 5th attempt, BD-Kachel
parity, comparison-toggle global via Settings, Insights grid
normalisation, "Muster" rename + tabs above hero, raw Metrik token
leak, Coach prompt rewrite (research-driven), collapsible provenance,
Gravatar parity, disclaimer move, settings cog wire-or-remove,
Zielwerte upgrade, api-tokens 5th attempt, Coolify auto-deploy fix,
AuthShell flicker, node-26-alpine investigation, full v1421-backlog
cleanup. Marathon plan: research/probe → polish waves → QA → release.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 20:20:01 +02:00
Marc-André BombeckandClaude Opus 4.7 2dd4a3fe64 docs(audit): v1.4.21 release summary
Captures the same-day patch on top of v1.4.20: Daily Briefing
regenerate fix, Coach day-level snapshot, duplicate streaming bubble,
drawer header, scope picker UI. STATE + ROADMAP rolled forward; v1.4.22
slot scaffolded for the e2e fix wave already in flight on develop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 19:51:52 +02:00
Marc-André BombeckandClaude Opus 4.7 52dd9ff9c3 docs(planning): record v1.4.20.1 hotfix wave
New `.planning/phase-v1421-hotfix-report.md` summarises the six
fixes (Daily Briefing regenerate · Coach day-level snapshot · Coach
prompt update · streaming-bubble dedup · drawer header · sources rail
scope picker), the test-count delta (2026 → 2036 unit), the
token-budget impact of the day-level snapshot (~190 → ~3000 tokens
per full-scope turn), and a recommendation to ship as a v1.4.20.1
hotfix.

STATE.md grows a Phase F section + status block tracking the six
commits on develop. Includes prettier polish across the touched
coach surfaces (sources-rail, drawer, message-thread, snapshot,
chat route).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 19:31:20 +02:00
Marc-André BombeckandClaude Opus 4.7 ddd0b27eaa docs(planning): close v1.4.20 milestone
Phase E ticked complete in STATE.md; v1.4.20 archived to ROADMAP
"Previous milestone" with completion timestamp. Top of ROADMAP
scaffolds v1.4.21 with carry-over candidates from
.planning/v1421-backlog.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 18:57:40 +02:00
Marc-André BombeckandClaude Opus 4.7 21d064cfc6 docs(planning): record Wave D reconcile + carry-over backlog
11 commits landed on develop covering every Wave-D HIGH (13/13), the
design pushback on the disabled weekly-report button, 6 MED items,
and every simplify-apply-yes item. 22 MED + 16 LOW + 4 simplify-
apply-maybe deferred to v1421-backlog under a new "Phase D — v1.4.20
reconcile carry-over" section. Tests unchanged at 2026 unit + 81
integration; typecheck + lint clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 18:17:55 +02:00
Marc-André BombeckandClaude Opus 4.7 ded0b38dde docs(planning): mark Wave-B B5 complete + report
B5 ticked complete in STATE.md; added Wave-B summary table covering
B1–B5 commits (29 total) and cumulative test deltas (+354 unit,
+14 integration). Status block records the canonical sample score
(95, green) and the integration test count.

phase-B5-report.md replaces the v1.4.15 onboarding-tour stub with
a fresh write-up of the Health Score formula, its sub-component
helpers, the route wiring, the panel slots, and the 4 flagged-
uncertain items for maintainer review.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:45:41 +02:00
Marc-André BombeckandClaude Opus 4.7 54d3e92acc docs(planning): mark Wave-B B4 complete + report
Five-commit Phase B4 lands the printable weekly report route, the
hero banner card surfacing fresh weekly reports, additive storyboard
annotations on the 90-day BP chart, and mobile rail trays for the AI
Coach drawer. PROMPT_VERSION 4.20.1 -> 4.20.2 with new GROUND RULES
10/11 covering both new schema blocks.

Tests 1902 -> 1975 (+73). Typecheck + lint clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 17:24:59 +02:00
Marc-André BombeckandClaude Opus 4.7 bbd00ca848 docs(planning): mark Wave-B B3 complete + report
Tick B3 in `.planning/STATE.md` against the six commit drops on
`develop` (correlation maths, schema + prompt rule,
TrendAnnotation + TrendsRow, CorrelationCard + CorrelationRow,
analytics route + page wiring, this report). Replace the stale
v1.4.16 host-load report with the v1.4.20 narrative — what
shipped, synthetic-data spot checks for each hypothesis, and
flagged-uncertain items for maintainer review (confidence-band
thresholds, eta-squared mapping, interpretation localisation
strategy).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:54:53 +02:00
Marc-André BombeckandClaude Opus 4.7 90d3a80267 docs(planning): tick B2b complete, record phase B2b report
B2b drawer UI shipped in four atomic commits on develop:
- TanStack Query hooks + SSE streaming client
- Drawer shell + message thread + source chips
- Composer + history rail + sources rail
- /insights wires the drawer via the hero strip's "Ask the coach"
  button + suggested-prompt chips

Tests: 1781 → 1833 unit (+52). Integration unchanged at 78.
Six new test files cover the streaming parser, every drawer column,
the thread state machine, locale-aware labels, and the page wiring.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:34:10 +02:00
Marc-André BombeckandClaude Opus 4.7 e7287d34e7 docs(planning): tick B2a complete, record phase B2a report
The Coach backend half of v1.4.20 wave B is complete; STATE.md
splits B2 into B2a (backend, done) + B2b (drawer UI, deferred to a
later dispatch) and records the test-count delta plus the migration
file in the status block. phase-B2a-report.md captures the five-
commit timeline, schema, helpers, route surface, token-budget
rationale, provenance JSON shape, and flagged-uncertain items.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:13:09 +02:00
Marc-André BombeckandClaude Opus 4.7 3bdb4380ad docs(planning): tick B1 complete, record v1.4.20 phase B1 report
STATE.md: Wave B1 ticked (hero strip / daily briefing / suggested
prompts / schema / prompt bump). The Apple-Health vitals tile row
is annotated as descoped + deferred to B3 — the per-section status
cards already render the same numbers, so a tile row above them
would duplicate the surface.

New `phase-B1-v1420-report.md` captures the 5 SHAs (9873363 →
7d29596), the test-count delta (1672 → 1753, +81 tests), the
deferral list (Coach wiring → B2, weekly-report → B4, Health Score
→ B5, Briefing variants → backlog, source-chips → B3), and 5
prompt-copy decisions flagged for maintainer review.

The older `.planning/phase-B1-report.md` (v1.4.18 achievements
marathon) is left untouched; v1.4.20's report uses the v1420
suffix to avoid the collision.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 15:47:56 +02:00
Marc-André BombeckandClaude Opus 4.7 81a40f7955 docs(planning): F6 docs accuracy audit recorded
- STATE.md: F6 ticked complete with the two healthlog-docs commits
  (19eb8de S3 + arm64 + 3d3ea21 production-state alignment)
- phase-F6-report.md: 38 pages checked, 2 CRIT + 10 HIGH inline,
  9 MED + 5 LOW deferred, 2 flagged-but-uncertain items captured
- v1421-backlog.md: F6 audit findings appended (co-edited with F5)

Foundation phases F0/F1/F2/F5/F6/FX complete; develop ready for B1
dispatch (Insights redesign hero + Daily Briefing).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 15:28:36 +02:00
Marc-André BombeckandClaude Opus 4.7 a2d959c7c1 docs(planning): F5 best-practice audit recorded, v1.4.21 backlog seeded
- STATE.md: F5 ticked complete with the four atomic commits referenced
- phase-F5-report.md: scope + per-commit justification + deferral list
- v1421-backlog.md: new backlog file for F5 LOW carry-over plus the
  FX cleanup carry-over (source-comment sweep, bilingual CHANGELOG,
  CLAUDE.md/AGENTS.md filenames)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 15:24:19 +02:00