From 4724d1d9b7f4931c060851920fc8a0f9f82dd0f2 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Mon, 24 Aug 2026 14:27:22 +0200 Subject: [PATCH] fix(settings): preserve valid legacy font fallback --- .../app/src/hooks/use-settings/storage.test.ts | 14 ++++++++++++++ packages/app/src/hooks/use-settings/storage.ts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/app/src/hooks/use-settings/storage.test.ts b/packages/app/src/hooks/use-settings/storage.test.ts index fb7e423120..62903c7433 100644 --- a/packages/app/src/hooks/use-settings/storage.test.ts +++ b/packages/app/src/hooks/use-settings/storage.test.ts @@ -705,6 +705,20 @@ describe("appearance settings", () => { expect((await loadAppSettingsFromStorage(deps)).uiBaseFontSize).toBe(16); }); + it("falls back to a valid legacy interface scale when the explicit base size is invalid", async () => { + const deps = makeDeps({ + storage: createInMemoryKeyValueStorage({ + [APP_SETTINGS_KEY]: JSON.stringify({ uiBaseFontSize: "abc", uiFontSize: 17 }), + }), + }); + + const result = await loadAppSettingsFromStorage(deps); + const persisted = JSON.parse(deps.storage.entries.get(APP_SETTINGS_KEY) ?? "null"); + + expect(result.uiBaseFontSize).toBe(15); + expect(persisted).toMatchObject({ uiBaseFontSize: 15, uiFontSize: 17 }); + }); + it("clamps the UI base font size into range and rejects non-numeric values", async () => { const deps = makeDeps({ storage: createInMemoryKeyValueStorage({ diff --git a/packages/app/src/hooks/use-settings/storage.ts b/packages/app/src/hooks/use-settings/storage.ts index db7d015482..d4efe753ac 100644 --- a/packages/app/src/hooks/use-settings/storage.ts +++ b/packages/app/src/hooks/use-settings/storage.ts @@ -182,7 +182,7 @@ const StoredAppSettingsSchema = z monoFontFamily: sanitizedFontFamily().catch(""), uiBaseFontSize: clampedNumber(MIN_UI_BASE_FONT_SIZE, MAX_UI_BASE_FONT_SIZE) .optional() - .catch(DEFAULT_UI_BASE_FONT_SIZE), + .catch(undefined), contentFontSize: clampedNumber(MIN_CONTENT_FONT_SIZE, MAX_CONTENT_FONT_SIZE) .optional() .catch(DEFAULT_CONTENT_FONT_SIZE),