From 6e01f0e71732755120ee02059a25835fce527226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 15 May 2026 18:15:22 +0200 Subject: [PATCH] docs(planning): consolidated mobile fix-plan for v1.4.27 R3d --- .planning/v1427-mobile-fix-plan.md | 682 +++++++++++++++++++++++++++++ 1 file changed, 682 insertions(+) create mode 100644 .planning/v1427-mobile-fix-plan.md diff --git a/.planning/v1427-mobile-fix-plan.md b/.planning/v1427-mobile-fix-plan.md new file mode 100644 index 000000000..4981cc0fa --- /dev/null +++ b/.planning/v1427-mobile-fix-plan.md @@ -0,0 +1,682 @@ +--- +file: .planning/v1427-mobile-fix-plan.md +purpose: v1.4.27 R3c consolidator output — consolidated mobile find-list, fix-surface buckets, file-touch collision matrix, dispatch sequence for R3d +created: 2026-05-15 +predecessor: .planning/v1427-mobile-plan.md + 7 R3c mobile audit reports (MA1 dashboard, MA2 insights, MA3 coach, MA4 measurements-workouts, MA5 medications, MA6 settings-admin, MA7 auth-public) +target_tag: v1.4.27 +sequenced_after: R3b (B6 + B7) +sequenced_before: R4 (QA pass) +mode: read-only (planning artifact) +--- + +# v1.4.27 R3c — Mobile Fix Plan + +## Headline + +Seven mobile audits surfaced **120 raw findings** (8 Critical, 38 High, 50 Medium, 24 Low). De-duplication folds them into **74 consolidated findings**. They group cleanly into **7 touch-disjoint fix-surface buckets** (MB1–MB7) with **zero same-line collisions** and **6 documented sequenced edits** where two buckets share a file but not the same lines. Dispatch lands as **2 sequenced primitive buckets (MB1 + MB2 + MB3)** that must close before **4 parallel surface buckets (MB4 / MB5 / MB6 / MB7)** can build on the new primitive contracts. Severity policy: Critical + High applied unconditionally, Medium applied if effort ≤ M, Low applied only when the file is already being touched. + +## Convention + +Marc-Voice English. Forbidden vocabulary: AI, Claude, agent, marathon, wave, phase, session, subagent, Anthropic. Use round, pass, contributor, slot, automation, release work. No personal data. No co-authored-by trailers. Single commit on `develop` at the end of this plan. + +--- + +## Section 1 — Consolidated find-list (de-duplicated) + +Sorted by severity tier (max of contributor tiers). Cross-audit overlap explicitly noted in the **Source** column. + +### Tier — Critical + +| CF | Title | Severity | Source | Root cause | Recommended fix | Effort | +|---|---|---|---|---|---|---| +| CF-1 | Forms render in centred `` on mobile with no max-height, no internal scroll, no bottom-sheet branch | Critical | MA1-F1 + MA4-F4 + MA5-F13 | Shared `DialogContent` primitive has no height cap; every form-on-mobile flow inherits the desktop centred-card shape | Land a `` primitive (Sheet bottom on `` does not derive defaults from `type`; ~40 call sites diverge | Add `inputMode` / `enterKeyHint` to every numeric, email, URL, text input across forms; lift sensible defaults into the shared `` primitive (numeric `type` → `inputMode="decimal"`); wire `aria-invalid` + `aria-describedby` on validation failure | M | +| CF-3 | Coach drawer not reachable from any insight sub-page | Critical | MA3-F1 | Drawer mount lives on `/insights/page.tsx` and `/targets/page.tsx` only; the seven sub-pages have no Coach entry point | Move drawer mount to `src/app/insights/layout.tsx` with a `CoachLaunchProvider` context exposing `askCoach(prefill, scope)`; sub-pages render a `` (sticky FAB on `` | S | + +### Tier — High + +| CF | Title | Severity | Source | Root cause | Recommended fix | Effort | +|---|---|---|---|---|---|---| +| CF-7 | Sub-44 pt tap targets — primitive-level lift across `` close-X, ``, ``, ``, `