From 66a7f8b6fa8b16ac826700bb80aec81603a1160b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 22 May 2026 09:18:52 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.4.47=20=E2=80=94=20audit-b?= =?UTF-8?q?acklog=20closure=20+=20drag-to-reorder=20+=20Coach=20disable=20?= =?UTF-8?q?+=20OAuth=20nonce=20ledger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eight changes: W0 idempotency test pin, W1 legacy column drop, W2 Textarea primitive, W3 Coach disable toggle, W4 dnd-kit drag-to-reorder, W5 onboarding 24h gate, W6 Withings OAuth nonce ledger, W7+W8 legacy_form_total drop + Coach onLine pre-check. 6-axis QA reconciled. Migrations 0076/0077/0078 required pre-image. Tests 5093 → ~5170. --- ...hase-W2-TEXTAREA-PRIMITIVE-v1447-report.md | 76 ++++ CHANGELOG.md | 47 +++ messages/de.json | 16 +- messages/en.json | 16 +- messages/es.json | 16 +- messages/fr.json | 16 +- messages/it.json | 16 +- messages/pl.json | 16 +- package.json | 5 +- pnpm-lock.yaml | 56 +++ .../migration.sql | 59 +++ .../migration.sql | 49 +++ .../migration.sql | 29 ++ prisma/schema.prisma | 121 ++++-- .../api/admin/status/__tests__/route.test.ts | 15 - src/app/api/admin/status/route.ts | 7 - .../me/disable-coach/__tests__/route.test.ts | 260 +++++++++++++ src/app/api/auth/me/disable-coach/route.ts | 121 ++++++ src/app/api/auth/me/route.ts | 6 + .../dashboard/summary/__tests__/route.test.ts | 8 + src/app/api/integrations/status/route.ts | 3 +- .../intake/__tests__/route.test.ts | 7 + src/app/api/withings/callback/route.ts | 71 +++- src/app/api/withings/connect/route.ts | 32 +- .../withings/webhook/__tests__/route.test.ts | 28 +- src/app/api/withings/webhook/route.ts | 39 +- src/app/bugreport/page.tsx | 12 +- src/app/medications/page.tsx | 95 ++--- src/app/targets/page.tsx | 7 +- .../admin/feedback-inbox-section.tsx | 185 +++++---- .../insights/coach-launch-button.tsx | 11 +- .../insights/coach-panel/use-coach.ts | 14 + src/components/insights/hero-strip.tsx | 10 +- src/components/insights/layout-coach-fab.tsx | 8 + .../insights/layout-coach-mount.tsx | 7 + src/components/insights/suggested-prompts.tsx | 6 + .../medications/SideEffectsSection.tsx | 332 ++++++++-------- .../__tests__/tour-launcher-gate.test.ts | 198 ++++++++++ .../__tests__/tour-launcher-keys.test.ts | 39 +- src/components/onboarding/tour-launcher.tsx | 144 ++++++- .../settings/__tests__/ai-section.test.tsx | 24 ++ .../dashboard-layout-section.test.tsx | 119 +++++- .../__tests__/disable-coach-card.test.tsx | 160 ++++++++ .../__tests__/integrations-section.test.tsx | 12 - .../settings/__tests__/sections.test.tsx | 23 ++ src/components/settings/about-section.tsx | 120 ++++++ src/components/settings/account-section.tsx | 7 + src/components/settings/ai-section.tsx | 122 ++++++ .../settings/dashboard-layout-section.tsx | 368 ++++++++++++++---- .../settings/integrations-section.tsx | 1 - src/components/ui/__tests__/textarea.test.tsx | 93 +++++ src/components/ui/textarea.tsx | 76 ++++ src/hooks/use-auth.ts | 24 +- src/hooks/use-disable-coach.ts | 36 ++ .../__tests__/coach-cascade.test.tsx | 8 + .../__tests__/coach-user-disable.test.tsx | 239 ++++++++++++ .../__tests__/admin-alert.test.ts | 14 +- src/lib/integrations/__tests__/status.test.ts | 221 ++++++++--- src/lib/integrations/status.ts | 144 +++---- .../withings-oauth-state-cleanup.test.ts | 65 ++++ src/lib/jobs/reminder-worker.ts | 41 ++ src/lib/jobs/withings-oauth-state-cleanup.ts | 31 ++ .../withings/__tests__/oauth-state.test.ts | 39 ++ src/lib/withings/oauth-state.ts | 48 +++ tests/integration/integration-status.test.ts | 30 +- tests/integration/setup.ts | 1 + tests/integration/withings-oauth-flow.test.ts | 348 +++++++++++++++++ tests/integration/withings-oauth.test.ts | 57 ++- 68 files changed, 3959 insertions(+), 715 deletions(-) create mode 100644 .planning/phase-W2-TEXTAREA-PRIMITIVE-v1447-report.md create mode 100644 prisma/migrations/0076_v1447_withings_oauth_state/migration.sql create mode 100644 prisma/migrations/0077_v1447_drop_legacy_consecutive_failures/migration.sql create mode 100644 prisma/migrations/0078_v1447_user_disable_coach/migration.sql create mode 100644 src/app/api/auth/me/disable-coach/__tests__/route.test.ts create mode 100644 src/app/api/auth/me/disable-coach/route.ts create mode 100644 src/components/onboarding/__tests__/tour-launcher-gate.test.ts create mode 100644 src/components/settings/__tests__/disable-coach-card.test.tsx create mode 100644 src/components/ui/__tests__/textarea.test.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/hooks/use-disable-coach.ts create mode 100644 src/lib/feature-flags/__tests__/coach-user-disable.test.tsx create mode 100644 src/lib/jobs/__tests__/withings-oauth-state-cleanup.test.ts create mode 100644 src/lib/jobs/withings-oauth-state-cleanup.ts create mode 100644 src/lib/withings/__tests__/oauth-state.test.ts create mode 100644 src/lib/withings/oauth-state.ts create mode 100644 tests/integration/withings-oauth-flow.test.ts diff --git a/.planning/phase-W2-TEXTAREA-PRIMITIVE-v1447-report.md b/.planning/phase-W2-TEXTAREA-PRIMITIVE-v1447-report.md new file mode 100644 index 000000000..213ea1d01 --- /dev/null +++ b/.planning/phase-W2-TEXTAREA-PRIMITIVE-v1447-report.md @@ -0,0 +1,76 @@ +# Phase W2 — Textarea primitive extraction (v1.4.47) + +## Goal +Close the v1.4.43 mobile-UI audit L3 finding: six call-sites were each maintaining their own copy-pasted className with the `text-base sm:text-sm` iOS-zoom defence, drift risk on every edit. Extract a shadcn-style `