From e57b16a96008ea72485ecdb8a2645a4a3a838e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 15 May 2026 21:20:27 +0200 Subject: [PATCH] =?UTF-8?q?docs(planning):=20RC3=20reconcile=20report=20?= =?UTF-8?q?=E2=80=94=20workouts,=20SSR,=20polish,=20dead-code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rc3-workouts-ssr-polish-deadcode-report.md | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 .planning/round-4-reconcile-rc3-workouts-ssr-polish-deadcode-report.md diff --git a/.planning/round-4-reconcile-rc3-workouts-ssr-polish-deadcode-report.md b/.planning/round-4-reconcile-rc3-workouts-ssr-polish-deadcode-report.md new file mode 100644 index 000000000..943981ff8 --- /dev/null +++ b/.planning/round-4-reconcile-rc3-workouts-ssr-polish-deadcode-report.md @@ -0,0 +1,68 @@ +# RC3 — Workouts pagination, SSR safety, polish, dead-code sweep + +Bucket: RC3 of the v1.4.27 R4 reconcile pass. +Branch: `develop`. +Base: `7b342030`. + +## Scope vs delivery + +Every must-fix item from the brief landed. Commits below ordered chronologically. + +| # | Finding | Source | Commit | +|---|---|---|---| +| 1 | H1 workouts pagination broken under canonical dedup | code-review | `7dc51a21` | +| 2 | H3 useIsMobile SSR / first-paint flash | code-review | `21a297ad` | +| 3 | Sheet close-X tap target lift (Blocker 1 / P0) | design + ui-conformity | `7f035958` | +| 4 | /about + /privacy `scroll-mt-20` under safe-area header (Blocker 4) | design | `25e63fcf` | +| 5 | /about TOC decision — deliberate no-TOC | design (Blocker 3) | `374b410f` | +| 6 | MED-1 ai-section.tsx raw `` blocks but actually five exist (lines 370, 823, 1008, 1166, 1510). Migrated all five plus refreshed the JSDoc on the active-provider pulldown to point at the shared primitive rather than the legacy rationale. +- **`MedicationComplianceChart.compareBaseline` prop.** The dead-code reviewer flagged it as "intent-documented; defer-friendly; nothing breaks if left as-is." Rather than drop the prop (which would force a change to 24 call sites that pass it uniformly) or wire the missing caption (deferred since v1.4.16), I destructured it with an explicit `void compareBaseline;` so the prop is now intentionally consumed. Type contract preserved, dead-prop signal cleared. + +## Deviations from the brief + +- The brief listed three raw selects in `ai-section.tsx` but there were five. Migrated all five; the additional two are the same drift class so the brief's intent stands. +- The brief said "Replace with ``" — done for every site. The `AddProviderControl` block lost its `w-auto` because `NativeSelect` defaults to `w-full`; I added `className="w-auto"` so the visual layout stays put on `sm+`. +- Commit `bfb13351` (the small UI-conformity wins) ended up bundling in RC2's parallel work on `feedback-inbox-section.tsx`, `phase-config-dialog.tsx`, `target-edit-sheet.tsx`, `ResearchModeAcknowledgmentDialog.tsx`, and its test file. RC2 was modifying these files in parallel and they appeared in the working tree between `git add` and `git commit`. The commit message only describes my three single-class swaps; the RC2 content rode along because the working tree had no clean isolation. Gates passed at the commit boundary (typecheck + lint + tests green) so the commit is technically sound, but the commit message and content are mismatched. Flag for RC2 / coordinator to decide whether to amend or backfill a note. + +## Gate evidence + +Per-commit boundary: `pnpm typecheck` (clean) + `pnpm lint` (clean) + relevant `pnpm vitest` (passing). At the end of the bucket: + +- Full `pnpm typecheck` → clean. +- Full `pnpm lint` → clean. +- Full `pnpm vitest run` → 4002 passed / 2 failed / 1 skipped. The two failures are in `src/components/i18n/__tests__/maintainership-banner.test.tsx` and assert that the FR/ES/IT/PL banner notices match regex literals like `/rédigée par IA/`. RC1's parallel commit `7850976b chore(i18n): replace remaining assistant-product references with neutral terms across six locales` updated the translations to drop the word "IA", so the test's expected patterns no longer match. Both failures pre-date all RC3 commits and are entirely in RC1's territory (`messages/*.json` was on the do-not-touch list). RC1 should update the test patterns when they revisit the i18n bucket — flagged here for the coordinator. + +## Coordination notes + +- Did not touch `.github/workflows/*.yml` (RC1). +- Did not touch `messages/*.json` (RC1). +- Did not modify the `` primitive (RC2). +- Did not re-touch `` (RC1's rename territory). +- Did not modify the `` primitive — only consumed it via `ai-section.tsx`. + +## Files modified + +Atomic per-commit. See `git log 7b342030..HEAD --author='Marc-André Bombeck'` filtered to RC3 commits. Key paths: + +- `src/app/api/workouts/route.ts` + `src/app/api/workouts/__tests__/canonical-dedup.test.ts` +- `src/hooks/use-is-mobile.ts` +- `src/components/ui/sheet.tsx` +- `src/app/about/page.tsx`, `src/app/privacy/page.tsx` +- `src/components/settings/ai-section.tsx` +- `src/app/insights/{blutdruck,gewicht,puls,stimmung,medikamente,bmi,schlaf}/page.tsx` +- Ten lib files under `src/lib/**` for the dead-code sweep, plus three test/comment tidies +- `src/components/charts/{trend-card,mood-chart}.tsx`, `src/components/settings/account-section.tsx` + +End of report.