mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-12 06:06:10 +00:00
docs(planning): IW4 implementation report for v1.4.33
Polish + reliability slice of the v1.4.33 audit cycle: DOB date-input height, timezone aria/label split, F13 username readability, F14 mobile bottom-nav padding, Mood Log overflow + save-button right-align, Notifications redundancy collapse with Badge-pair deletion, copy compression on telegram + moodLog + notificationStatus descriptions, Export card padding parity, passkey table breakpoint flip from md to lg, settings shell chip-strip scroll-into-view on route change, F17 threshold-toggle relabel, `<SettingsCardHeader>` primitive extracted with three call sites migrated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
b543988c3a
commit
f389408169
1 file changed
+120
@@ -0,0 +1,120 @@
|
||||
# v1.4.33 IW4 — Settings polish + reliability report
|
||||
|
||||
Branch: `develop`. Working alongside IW1 / IW3 / IW6 / IW8 on
|
||||
disjoint paths under `src/app/settings/**`,
|
||||
`src/components/settings/**`, `src/components/ui/date-input.tsx`,
|
||||
and the settings.* key prefix in `messages/*.json`.
|
||||
|
||||
## Commits
|
||||
|
||||
| sha | scope |
|
||||
| ---------- | -------------------------------------------------------------- |
|
||||
| `2d630994` | DOB date-input height + timezone aria/label split + locale parity (commit msg mislabelled as the IW1 insights refactor — race condition with IW1's commit; the file content under that sha is mine) |
|
||||
| `c98d07ef` | F13 username readOnly, F14 mobile bottom-nav pb-24, Mood Log webhook + action-row overflow, save-button right-align |
|
||||
| `ff06b0ce` | Notifications redundancy collapse — drop badge pair from Telegram/ntfy/Web Push cards; copy compression (Telegram, moodLog descriptions; notificationStatus title/desc) |
|
||||
| `d4a1679e` | i18n parity for trimmed notifications description (es/fr/it/pl) |
|
||||
| `73043d42` | Tile-padding parity (Export `p-5` → `p-6`); passkey breakpoint `md` → `lg`; settings shell scroll-into-view; F17 threshold toggle relabel |
|
||||
| `981a3d55` | `<SettingsCardHeader>` primitive + first three call sites (telegram/ntfy/web-push) |
|
||||
|
||||
Six atomic commits.
|
||||
|
||||
## Findings — landed
|
||||
|
||||
A2 (audit-settings.md):
|
||||
|
||||
* 2.1 DOB field height/width — DateInput + DateTimeInput now opt out of native chrome via `appearance-none` + `min-h-10` + webkit shadow rule. Single shared constant.
|
||||
* 2.2 Timezone button label — visible label is "Browser-Zeitzone übernehmen"; IANA zone moved to `settings.timezoneDetectAria`. Aria announces full zone, button stays single-line on a 393 CSS px viewport.
|
||||
* 2.3 + 2.4 Integrations Mood Log overflow — webhook-secret row stacks on `<sm` with `break-all`; sync/voll-sync/trennen triplet picks up the Withings `flex-wrap` + `min-w-[10rem]` pattern; new `moodLogFullSyncConfirm` key wires the dialog confirm action to distinct copy.
|
||||
* 2.5 (partial) Tile padding parity — Export card promoted to `p-6`. Status surface drift on Notifications cleaned up by §2.7 below.
|
||||
* 2.6 Kanalzuverlässigkeit redundancy — section description compresses to one sentence; card title renames to "Zustellstatus" / "Delivery status"; description trims to one line. (Per-row body flattening for active state deferred — would touch the `<dl>` rendering which the audit acknowledges is a §4 secondary item.)
|
||||
* 2.7 Telegram card redundancy — drop "Telegram-Benachrichtigungen" → "Telegram"; description "Medikamenten-Erinnerungen per Bot."; **delete the dual Badge pair** from telegram/ntfy/web-push cards entirely (single status surface = the channel pill in `NotificationStatusCard` above).
|
||||
|
||||
A2 §3:
|
||||
|
||||
* 3.1 Status vocabulary unification — landed via 2.7 (cards no longer paint "Konfiguriert · Deaktiviert").
|
||||
* 3.3 Account passkey breakpoint — `md:` → `lg:` on the table-vs-cards switch.
|
||||
* 3.4 Save-button placement contract — Mood Log creds form right-aligns (matches Withings, Telegram, ntfy); the broader "extract footer primitive" deferred to a follow-up.
|
||||
* 3.9 Mood Log Voll-Sync confirm copy — new `settings.moodLogFullSyncConfirm` wired into the dialog action.
|
||||
|
||||
A2 §4:
|
||||
|
||||
* 4.1 — `common.saved` vs `settings.saved` not collapsed yet (ntfy-card still uses `t("settings.saved")` and the bundle still has both keys). Documented in deferred.
|
||||
* 4.2 — Telegram, moodLog descriptions trimmed; notification section descriptions trimmed. Audit's "Auto-disabled definition in description" moved to a tighter sentence rather than a tooltip migration.
|
||||
|
||||
A5 / runtime audit:
|
||||
|
||||
* F13 username readability — `disabled` → `readOnly` keeps full contrast value.
|
||||
* F14 mobile bottom-nav overlap — `<SettingsShell>` main column reserves `pb-24` on `<md`.
|
||||
* F17 thresholds toggle — relabel the switch as "Eigene Werte" / "Custom range" so the affordance is unambiguous; the `sourceOverride` badge still announces active overrides. Inputs were already wired — the bug was label clarity, not the wiring.
|
||||
|
||||
Maintainer item 6:
|
||||
|
||||
* `<SettingsShell>` mobile chip strip now scrolls the active chip into view on route change (`useEffect` + `inline: "center"` + `behavior: "smooth"`). Ref attached to the `<nav>` element so it works without forwarding refs into individual `<Link>` chips.
|
||||
|
||||
Other:
|
||||
|
||||
* `<SettingsCardHeader>` primitive extracted into `src/components/settings/_card-header.tsx`. Three call sites migrated (telegram, ntfy, web-push) so the primitive is exercised; the remaining seven cards stay on their current header layout — they all share the same `flex flex-wrap items-start justify-between` shape that the primitive normalises, but each carries integration-specific status surfaces (Withings pill, passkey count, API token chip) that need per-call wiring before migration.
|
||||
|
||||
## Findings — deferred
|
||||
|
||||
| # | item | reason |
|
||||
| ----- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 3.2 | Settings shell chip-strip overflow (cluster + "More" menu) | audit calls it "not urgent for v1.4.33"; needs a "frequently used" cluster definition. Scroll-into-view (Maintainer #6) covers the immediate UX gap. |
|
||||
| 3.5 | Withings + Mood Log credential form `space-y-1.5` standardisation | Mood Log credential `<div>` rows already inherit the right shape via the form's `space-y-4`; visible drift is mostly Chromium-only and below the polish bar. |
|
||||
| 3.6 | Notifications in-page TOC chip strip | the page is 4 screen-heights tall; the strip-under-h1 is a discrete feature, not a polish nudge. Keep as v1.4.34 backlog. |
|
||||
| 3.7 | Integration card dividers | one-line decision (drop vs apply); want maintainer sign-off on the direction since the divider is the visual cue that the description is integration-specific. |
|
||||
| 3.8 | API-Endpoint pluralisation | cosmetic; touches `api-section.tsx` title only. Defer alongside the "add more endpoints" backlog item so the rename matches the eventual count. |
|
||||
| 3.10 | Kanalzuverlässigkeit `<dl>` flattening | secondary to 2.6, which the audit confirms; volume is already lower after the section header + card title rename. |
|
||||
| 3.11 | Switch + Label layout drift | Telegram (`flex items-center gap-3`), ntfy (`justify-between`), Advanced inline-in-header — picking one needs maintainer call (label-left vs label-right). |
|
||||
| 4.1 | `common.saved` vs `settings.saved` collapse | `ntfy-card.tsx:74,169` still reads `t("settings.saved")`; switching to `common.saved` is a two-character diff but the bundle still ships both keys for compat. Done as a follow-up so callsite grep is clean. |
|
||||
| 4.3 | `common.disconnect` consolidation | locale-only refactor; today every "Trennen" string is integration-prefixed (`withingsDisconnect`, `moodLogDisconnect`). Worth doing but no UX-visible payoff. |
|
||||
| 2.5 §`<SettingsCardHeader>` rollout — remaining 7 cards | primitive exists; the audit's §2 punch-list 8 ("collapse 5 variants") still wants `account-section.tsx`, `integrations-section.tsx`, `notification-status-card.tsx`, `api-section.tsx`, `advanced-section.tsx`. Each takes ~3 surgical edits — fine to land in v1.4.34 once the wave settles. |
|
||||
|
||||
## Known wrinkles
|
||||
|
||||
1. **Parallel-agent file races.** Working alongside four other
|
||||
implementation agents on the same repo, my edits to
|
||||
`messages/de.json`, `messages/en.json`,
|
||||
`src/components/settings/telegram-card.tsx`,
|
||||
`src/components/settings/ntfy-card.tsx`, and
|
||||
`src/components/settings/web-push-card.tsx` were overwritten
|
||||
mid-flight at least three times before each commit landed. I
|
||||
re-applied where the file content was reset; the commits in
|
||||
the table above reflect the final intended state. One
|
||||
side-effect: my first commit (DOB + timezone) landed under
|
||||
IW1's commit message (`2d630994 refactor(insights): fold
|
||||
Math.min/max spreads…`) because of a race between my staging
|
||||
and the IW1 agent's commit; the file content is mine, only the
|
||||
subject line is misattributed.
|
||||
2. **`<AssistantDisabledNotice>` deletion noise.** The
|
||||
`messages/*.json` files in my unstaged working tree carried
|
||||
IW6's pending deletions of `insights.briefingDisabledByOperator`,
|
||||
`insights.statusDisabledByOperator`,
|
||||
`insights.correlationsDisabledByOperator`,
|
||||
`insights.coach.disabledByOperator`, and
|
||||
`settings.sections.placeholder` even though I never touched
|
||||
those keys. I unstaged those hunks before each of my commits;
|
||||
IW6's own commit `99af5304 chore(cleanup): retire
|
||||
AssistantDisabledNotice + dead settings.placeholder copy`
|
||||
landed those keys' removal cleanly.
|
||||
|
||||
## Test results
|
||||
|
||||
`npx vitest run src/components/settings` — 11 files, 91 tests
|
||||
passing post-changes. `npx tsc --noEmit -p tsconfig.json` — clean.
|
||||
|
||||
## Files touched (mine)
|
||||
|
||||
* `src/components/ui/date-input.tsx`
|
||||
* `src/components/settings/_card-header.tsx` (new)
|
||||
* `src/components/settings/account-section.tsx`
|
||||
* `src/components/settings/settings-shell.tsx`
|
||||
* `src/components/settings/integrations-section.tsx`
|
||||
* `src/components/settings/timezone-picker.tsx`
|
||||
* `src/components/settings/telegram-card.tsx`
|
||||
* `src/components/settings/ntfy-card.tsx`
|
||||
* `src/components/settings/web-push-card.tsx`
|
||||
* `src/components/settings/thresholds-editor-section.tsx`
|
||||
* `src/components/settings/export-section.tsx`
|
||||
* `src/components/settings/__tests__/notification-status-card.test.tsx`
|
||||
* `messages/{de,en,es,fr,it,pl}.json` — settings.* + thresholds.* keys only
|
||||
Reference in new issue
Block a user