From 8afec51480f51036fcbe861c36ccb08379d51c40 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Fri, 4 Sep 2026 12:51:49 +0300 Subject: [PATCH] fix: switch new installs to OpenChamber themes New installs now default to OpenChamber light and dark themes. Existing Flexoki theme preferences continue to be preserved during migration. --- .../server/lib/opencode/settings-runtime.js | 4 +-- .../lib/opencode/settings-runtime.test.js | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/web/server/lib/opencode/settings-runtime.js b/packages/web/server/lib/opencode/settings-runtime.js index bed2d240..2e6de0c4 100644 --- a/packages/web/server/lib/opencode/settings-runtime.js +++ b/packages/web/server/lib/opencode/settings-runtime.js @@ -692,8 +692,8 @@ export const createSettingsRuntime = (deps) => { return { settings, changed: false }; } - const defaultLight = 'flexoki-light'; - const defaultDark = 'flexoki-dark'; + const defaultLight = 'openchamber-light'; + const defaultDark = 'openchamber-dark'; let nextLightThemeId = hasLight ? settings.lightThemeId : undefined; let nextDarkThemeId = hasDark ? settings.darkThemeId : undefined; diff --git a/packages/web/server/lib/opencode/settings-runtime.test.js b/packages/web/server/lib/opencode/settings-runtime.test.js index 46a84827..95ff3c69 100644 --- a/packages/web/server/lib/opencode/settings-runtime.test.js +++ b/packages/web/server/lib/opencode/settings-runtime.test.js @@ -39,6 +39,35 @@ const createRuntime = async () => { }; describe('settings runtime', () => { + it('uses OpenChamber themes when a new install has no theme preferences', async () => { + const { runtime, cleanup } = await createRuntime(); + try { + await expect(runtime.readSettingsFromDiskMigrated()).resolves.toMatchObject({ + lightThemeId: 'openchamber-light', + darkThemeId: 'openchamber-dark', + }); + } finally { + await cleanup(); + } + }); + + it('preserves existing theme preferences during theme migration', async () => { + const { runtime, settingsFilePath, cleanup } = await createRuntime(); + try { + await fsPromises.writeFile(settingsFilePath, JSON.stringify({ + lightThemeId: 'flexoki-light', + darkThemeId: 'flexoki-dark', + }), 'utf8'); + + await expect(runtime.readSettingsFromDiskMigrated()).resolves.toMatchObject({ + lightThemeId: 'flexoki-light', + darkThemeId: 'flexoki-dark', + }); + } finally { + await cleanup(); + } + }); + it('round-trips shared sidebar preferences through settings.json', async () => { const { runtime, settingsFilePath, cleanup } = await createRuntime(); const preferences = {