Commit Graph
240 Commits
Author SHA1 Message Date
Marc-André Bombeck 6e6bc61800 feat(api): lock the daily-stats externalId shape for cumulative HealthKit types
R-A Option A handoff prep. Adds dailyStatsExternalId() helper alongside
the v1.4.29 CUMULATIVE_HK_TYPES set; the helper mints
"stats:<HKQuantityTypeIdentifier>:<YYYY-MM-DD>" so iOS can UPSERT one
row per day per cumulative type via the existing batch endpoint, the
unique index collapses re-syncs idempotently, and a future PATCH-on-
divergence call updates a late-watch-sync revision without inserting a
second row. Handoff docs (06 + 08) lock the shape for the iOS client.

Cumulative-type set unchanged from v1.4.29; spot metrics keep the
per-sample uuid externalId. Server tolerates both shapes during the
cutover window — the drain script (next commit) collapses pre-existing
per-sample rows post-cutover.

Tests cover the helper round-trip, the cumulative-type identifier wall,
and the iOS-trusted date-string passthrough.
2026-05-16 11:51:25 +02:00
Marc-André Bombeck 1a2447295d docs(planning): iOS contributor brief — current state + full v1.4.x → v1.5.0 forward roadmap
Single onboarding doc the iOS contributor (or their automation) reads
once and then references continuously. Covers: the release model
(v1.5.0 is version-bump-only marker), every convention every commit
must honour, what's live in production today (v1.4.29.1), what
incoming patches deliver through to web freeze, and the locked
forward state at v1.5.0 — every endpoint + DTO + Prisma column + new
MeasurementType the iOS app can rely on consuming by ship date.
2026-05-16 11:48:08 +02:00
Marc-André Bombeck 185afb9b8c docs(planning): move R-A daily-stats into v1.4.30 + reshuffle the patch run
Maintainer directive 2026-05-16: the iOS TestFlight build is already
posting per-sample cumulative rows; the daily-stats cutover cannot
wait for a v1.5 sprint. v1.4.30 now ships the R-A server-side helper
plus a one-shot drain script so the iOS TestFlight build can adopt
`HKStatisticsCollectionQuery` immediately. The remaining web patches
slide one slot — v1.4.31 picks up the assistant toggles + insights
blocking + Coolify auto-deploy fix, v1.4.32 + v1.4.33 carry the
HealthKit Tier 1 surfaces.
2026-05-16 11:42:34 +02:00
Marc-André Bombeck e76716935f docs(planning): v1.4.29.1 hotfix closure
Daily-step aggregation hotfix shipped same day as v1.4.29; closure
stanza records PR #173, squash SHA 945b5566, tag, and the SSH
host-side fallback that finished apps01 rollout after Coolify
auto-deploy stalled for the third release in a row.
2026-05-16 11:39:46 +02:00
Marc-André Bombeck 6835ea6f10 docs(planning): v1.4.29 closure and v1.4.30 seed research
v1.4.29 ships dashboard performance + chart polish on both hosts.
Two new findings surfaced during the window: an /insights tab-strip
blocking root cause and an assistant-optional operator toggle plan.
Both land as v1.4.30 scope add-ons alongside the iOS server-prep menu.
2026-05-16 11:11:22 +02:00
Marc-André Bombeck 8a3bea3415 docs(planning): reframe v1.5 plan around incremental v1.4.x patches
v1.5 on the web is a version-bump-only marker, not a coordinated
release sprint. Every functional change the iOS client depends on
lands in v1.4.29 -> v1.4.30 -> v1.4.31 -> v1.4.32 ahead of the iOS
app shipping. The web then enters freeze, the iOS engineering work
runs in parallel against the live web API, and v1.5.0 ships the day
after Apple review clears.

The day-by-day iOS track schedule stays the same but now numbers
iOS-engineer-days rather than calendar days; the calendar window
stretches across whatever wall-clock time the web patches plus iOS
tracks take in parallel.
2026-05-16 10:26:21 +02:00
Marc-André Bombeck 6efe90394d docs(planning): v1.5 strategic plan with six research backups
Six parallel research outputs feeding one synthesized plan:
step aggregation shape, dashboard performance audit, mobile tile
symmetry, settings drag-list compactness, iOS planning state, and
HealthKit integration depth. The plan closes the v1.4 web line in
one patch and frames the 10-working-day iOS sprint that ships v1.5.
2026-05-16 10:13:11 +02:00
Marc-André Bombeck 7be20281d2 docs(planning): v1.4.28.1 hotfix closure 2026-05-16 09:40:12 +02:00
Marc-André Bombeck 897672b2dd docs(planning): v1.4.28.1 hotfix blocker — MaxMind 429 on tag build 2026-05-16 09:16:32 +02:00
Marc-André Bombeck b84b8070bf docs(planning): GeoLite2 build-key CI fix report
Document the root cause of the v1.4.28 `offlineGeoEnabled: false`
shape (two layered silent-fallback bugs in the fetch script and
workflow), the script + workflow changes that close the gap, the
local smoke-test results, and the operator action needed for the
v1.4.28.1 hotfix build.
2026-05-16 09:03:22 +02:00
Marc-André Bombeck bf4887bf5e docs(planning): v1.4.28 release closure + v1.4.29 backlog seed 2026-05-16 03:25:02 +02:00
Marc-André Bombeck 948fcd9318 docs(planning): v1.4.28 autonomous-round kickoff prompt
Single self-contained prompt for a fresh session to pick up v1.4.28.
Covers every maintainer feedback item + the R4 backlog deferrals +
the iOS-contract safety-net + the five-round structure (research,
fix-plan, fix-pass, reviewer pass with new iOS-contract reviewer,
release pipeline).

Paste the body of this file into a fresh session to kick off the
next release pass autonomously.
2026-05-15 23:36:27 +02:00
Marc-André Bombeck 743a2e4642 docs(planning): v1.4.28 maintainer feedback intake from the post-v1.4.27 walk-through
26 items grouped into 14 themes covering critical bugs (BD tile
renders 1.1. instead of numbers, pulse chart hangs, workout save
errors, scroll-stuck on insights), scope reductions (retire the GLP-1
dashboard tile, the DrugLevelChart dashboard mount, the dose-history
and inventory sub-surfaces, the bottom advisor card on /insights),
and consistency directives (one medication-list row shape, one
section-header chrome on the medications detail page, one trend-tile
height contract, HealthScore card grows to match the action+prompts
column, targets-page Coach launch collapses to an icon).

Pairs with .planning/v1428-backlog.md for the R4 reviewer deferrals.
Both inputs feed the v1.4.28 kickoff.
2026-05-15 23:34:03 +02:00
Marc-André Bombeck 86a2082798 docs(planning): v1.4.27 release closure report 2026-05-15 23:10:47 +02:00
Marc-André Bombeck 1fe424da0b test(e2e): cover the insights metric availability gating with the empty-state CTA path
Mock /api/analytics with zero counts so each gated sub-page short-
circuits to its EmptyState. Pin the BP + Weight pages on
`/measurements?add=<TYPE>` href; pin Sleep on the data-sources fallback
(iOS-only ingest). Assert a Coach launch affordance is attached on
every empty-state branch.

Add the round-5 gap-fill report under .planning/.
2026-05-15 22:13:26 +02:00
Marc-André Bombeck 635c376d3a docs(planning): v1.4.27 release blocker — MAXMIND_LICENSE_KEY missing from repo secrets 2026-05-15 21:45:58 +02:00
Marc-André Bombeck a71115dfb4 fix(tests): flip the maintainership-banner assertions to the neutralised copy
RC1 rewrote the FR/ES/IT/PL banner notice from the previous
"AI-drafted" disclosure to "machine-translated" wording as part of
the convention-compliance pass. The locale pattern tests still
checked the retired vocabulary and failed. Re-pinned to the new
shape so a future regression cannot quietly soften the disclosure
or re-introduce the retired wording.

Plus the orphan RC1 reconcile report at
.planning/round-4-reconcile-rc1-ci-i18n-convention-report.md.
2026-05-15 21:22:34 +02:00
Marc-André Bombeck e57b16a960 docs(planning): RC3 reconcile report — workouts, SSR, polish, dead-code 2026-05-15 21:20:27 +02:00
Marc-André Bombeck fb5d74a8e4 docs(planning): round-4 reconcile RC2 ResponsiveSheet report
Records the two-phase RC2 work for the v1.4.27 R4 reconcile pass:
- Phase 1 wired the footer slot across every page-level <ResponsiveSheet>
  consumer (7 files, 9 mount points) so the Sheet branch sticky-pins
  Save / Cancel above the soft keyboard.
- Phase 2 migrated six raw <Dialog> mounts (two row-edit dialogs, the
  Zielwerte per-card edit, the GLP-1 phase-window editor, the MDR opt-in
  gate, and the feedback-inbox detail viewer) to ResponsiveSheet so the
  bottom-sheet branch fires on phones.

Reports the patterns used (portal + HTML form attribute for submit-bound
forms, inline footer prop for handler-bound dialogs) and flags the
accidental commit-message attribution mismatch in bfb13351 for the
release-notes drafter.
2026-05-15 21:20:26 +02:00
Marc-André Bombeck 67fddb98e2 docs(planning): append v1.4.28 backlog with R4 reviewer deferrals
Append every deferred item from the nine R4 reviewer reports to
`.planning/v1428-backlog.md` so the v1.4.28 handoff lands on a single
canonical surface. Each entry carries the source reviewer + finding
ID, severity, summary, recommended fix, effort estimate, and the
why-deferred rationale from the source report.

Sections added:

- 14 mobile-fix-plan deferrals (CF-77 through CF-90) from the R3c →
  R3d consolidation. CF-77 (six admin tables card-list parity) flagged
  as the largest dedicated bucket.
- 9 simplifier follow-ups (F-H1 + F-M1 through F-M7 + F-L1 through
  F-L9 grouped) for the v1.4.28 simplification micro-bucket.
- 8 senior-dev follow-ups (HIGH-1 footer slot wiring + HIGH-2
  viewport rotation + MED-1..4 + Dialog drift cleanup + RHF deps).
- 12 design-tier polish items (M1 through M12) — GLP-1 padding, tab
  strip contrast, viewport coverage, SubPageShell description prop
  sweep, settings sidebar height, `<Button asChild>` adoption.
- 6 UI-conformity sweeps — 11 admin section heading divergence, 21
  SectionCard primitive candidates, 18 spinner palette variations,
  two tab-strip implementations, Sleep InsightStatusCard miss, admin
  feedback-inbox card list parity.
- Vendor-label exemption pointer to `docs/audit/v1427-summary.md`.
- Wider 1,664-row partial-translation residue with the namespace
  prioritisation, plus three drift-guard tightening proposals.
- 14 orphan exports + stale Vitest mock + 2 cosmetic comments from
  the dead-code scan.
2026-05-15 21:09:09 +02:00
Marc-André Bombeck 7b342030b7 docs(planning): R4 dead-code scan report for v1.4.27 2026-05-15 20:47:00 +02:00
Marc-André Bombeck 5256ecdbac docs(planning): R4 UI-conformity sweep report for v1.4.27 2026-05-15 20:46:53 +02:00
Marc-André Bombeck f96c998062 docs(planning): R4 design review report for v1.4.27 2026-05-15 20:46:22 +02:00
Marc-André Bombeck 3deb76cf71 docs(planning): R4 product-lead review report for v1.4.27 2026-05-15 20:44:10 +02:00
Marc-André Bombeck 9fce43837f docs(planning): R4 senior-dev review report for v1.4.27 2026-05-15 20:43:49 +02:00
Marc-André Bombeck dc23d40446 docs(planning): R4 simplifier review report for v1.4.27 2026-05-15 20:42:46 +02:00
Marc-André Bombeck b0b1e65b61 docs(planning): R4 security review report for v1.4.27 2026-05-15 20:42:15 +02:00
Marc-André Bombeck 018a97c9a9 docs(planning): R4 code review report for v1.4.27 2026-05-15 20:41:53 +02:00
Marc-André Bombeck 4f60428ce6 docs(planning): R4 i18n runtime probe report for v1.4.27 2026-05-15 20:40:37 +02:00
Marc-André Bombeck 4d35f6c46c docs(planning): R3d MB5 tables-cardlist bucket report 2026-05-15 19:26:20 +02:00
Marc-André Bombeck 5848533500 docs(planning): R3d MB7 surface-specific polish residue bucket report
11 commits across ~25 files; every Critical / High CF in MB7 plus
every Medium ≤ M plus every same-file Low landed. Report enumerates
each CF-ID's commit, the file-touch list, and the docs collision
matrix follow-through.
2026-05-15 19:25:07 +02:00
Marc-André Bombeck f8b407da56 docs(planning): R3d MB6 regression and auth bucket report 2026-05-15 19:10:54 +02:00
Marc-André Bombeck 7ad894b535 docs(planning): R3d MB4 coach reachability bucket report 2026-05-15 19:08:48 +02:00
Marc-André Bombeck 79c84097ad docs(planning): R3d MB2 tap-target bucket report 2026-05-15 18:51:12 +02:00
Marc-André Bombeck e9b159755f docs(planning): R3d MB3 input-attributes bucket report 2026-05-15 18:46:02 +02:00
Marc-André Bombeck 7398761412 docs(planning): R3d MB1 ResponsiveSheet bucket report
Records the five MB1 commits, the `<ResponsiveSheet>` API, every
migrated form mount, two race-conditioned commit-message
mis-attributions (`bd7cb938`, `44554729`), and the optional
sticky-CTA pattern deferral.
2026-05-15 18:37:13 +02:00
Marc-André Bombeck 6e01f0e717 docs(planning): consolidated mobile fix-plan for v1.4.27 R3d 2026-05-15 18:15:22 +02:00
Marc-André Bombeck 39d779c7d9 docs(planning): mobile audit report for settings and admin 2026-05-15 18:05:03 +02:00
Marc-André Bombeck 24b67f85a0 docs(planning): mobile audit report for auth and public surfaces 2026-05-15 18:04:02 +02:00
Marc-André Bombeck e5ff434395 docs(planning): mobile audit report for measurements and workouts 2026-05-15 18:03:57 +02:00
Marc-André Bombeck 6a8e5c3482 docs(planning): mobile audit report for the insights surface 2026-05-15 18:03:40 +02:00
Marc-André Bombeck 1b8f03af86 docs(planning): mobile audit report for the coach surface 2026-05-15 18:02:15 +02:00
Marc-André Bombeck d5792a1486 docs(planning): mobile audit report for the medications surface 2026-05-15 18:02:03 +02:00
Marc-André Bombeck bbbb513bfe docs(planning): mobile audit report for the dashboard surface 2026-05-15 18:01:40 +02:00
Marc-André Bombeck 302ebed66b docs(planning): bucket B7 implementation report for v1.4.27
Per-commit subjects, deliverable-vs-actual verification matrix for
every fix-plan item, the orphan-endpoint grep table that grounds the
five-endpoint v1.4.28 defer, and the seven recorded deviations from
the original fix-plan scope.
2026-05-15 17:55:01 +02:00
Marc-André Bombeck 3a7599c846 chore(api): delete the orphan /api/audit-log surface and seed the five README-tied admin orphans into v1.4.28
The /api/audit-log GET handler has zero runtime callers in src/, tests/,
scripts/, or docs/ — verified via grep against the route path plus the
auditLog model name. The admin counterpart at /api/admin/audit-log is
the surface every consumer reads from. Drops the orphan route file
outright per the v1.4.27 fix-plan Section 4 Decision A.

The five admin / monitoring endpoints flagged for the scope-
maximization sweep all carry a README + CHANGELOG documentation
reference, which the fix-plan classes as a consumer for the
defer-on-tie rule:

  /api/admin/ai-settings           — README L362–363, CHANGELOG L752
  /api/admin/backup/test           — README L368,    CHANGELOG L752
  /api/admin/status-overview       — README L367,    CHANGELOG L753
  /api/monitoring/glitchtip/test   — README L381
  /api/monitoring/umami/test       — README L382

All five defer to v1.4.28 for a maintainer call — either wire each to
a real consumer or drop the route + README mention together. Seeds
the v1.4.28 backlog entry with the per-endpoint grep findings so the
decision is one read away.

Also seeds the v1.4.28 backlog with the missing `insights.coach.window.lastYear`
i18n key across the six locale bundles — owned by the i18n bucket.
2026-05-15 17:37:22 +02:00
Marc-André Bombeck 3d3402e3af docs(planning): bucket B6 implementation report for v1.4.27
Captures the i18n cleanup pass: 154 dead-key paths retired across
six locales (~924 strings), 38 new keys added for B1/B3/B4/B5
component-side inserts, locale-native date format ordering for
FR/ES/IT/PL, drift-guard test pinning the GLP-1 / carrier / empty-
state / notification / personal-record key sets, mood-label
shared module landing BL-P6-11.

Also lands the four probe scripts (.planning/v1427-b6-*.mjs) used
to enumerate dead keys and build the new key inserts, sibling to
the existing .planning/v1422-w1a-*.mjs audit artifacts.
2026-05-15 17:24:52 +02:00
Marc-André Bombeck cef9bc14fe docs(planning): R3a contributor reports and v1.4.27 mobile plan
- Three R3a contributor reports (B3 GeoIP+ASN, B4 Coach+Insights,
  B5 Notifications) — B1 and B2 already committed theirs.
- v1.4.27 mobile-capability audit and fix plan inserted between
  R3b and R4: seven parallel auditors per surface area, a single
  consolidator, then a parallel fix-pass against the consolidated
  bucket list.
2026-05-15 17:00:28 +02:00
Marc-André Bombeck 5364e347f5 docs(planning): bucket B1 implementation report for v1.4.27 2026-05-15 16:49:03 +02:00
Marc-André Bombeck ef50b83746 docs(planning): seed v1.4.28 backlog with F7 deferral note 2026-05-15 16:38:22 +02:00