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),