From cc10684c196dbabb43148f83ccf33795fc004380 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Mon, 2 Feb 2026 19:54:50 -0800 Subject: [PATCH] feat: enable linear mode toggle for nightly builds (#8569) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enables the linear mode toggle for all nightly build users by short-circuiting the `linearToggleEnabled` feature flag. ## Changes - Adds `isNightly` check in `linearToggleEnabled` getter - Returns `true` for nightly builds, bypassing remote config/server feature checks - Adds unit tests for the new behavior ## Reviewers - @AustinMroz (linear mode maintainer) - @christian-byrne (isNightly author) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8569-feat-enable-linear-mode-toggle-for-nightly-builds-2fc6d73d3650819681f8dcdc23b6eefe) by [Unito](https://www.unito.io) ## Summary by CodeRabbit * **New Features** * Enabled linear toggle feature for nightly distribution builds. * Feature flag system now respects nightly vs. standard build configurations. * **Tests** * Added test coverage for nightly build feature flag behavior and remote configuration handling. --- src/composables/useFeatureFlags.test.ts | 44 +++++++++++++++++++++++++ src/composables/useFeatureFlags.ts | 4 ++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/composables/useFeatureFlags.test.ts b/src/composables/useFeatureFlags.test.ts index c2b3634f7..c1caea6cf 100644 --- a/src/composables/useFeatureFlags.test.ts +++ b/src/composables/useFeatureFlags.test.ts @@ -5,6 +5,7 @@ import { ServerFeatureFlag, useFeatureFlags } from '@/composables/useFeatureFlags' +import * as distributionTypes from '@/platform/distribution/types' import { api } from '@/scripts/api' // Mock the API module @@ -14,6 +15,12 @@ vi.mock('@/scripts/api', () => ({ } })) +// Mock the distribution types module +vi.mock('@/platform/distribution/types', () => ({ + isCloud: false, + isNightly: false +})) + describe('useFeatureFlags', () => { beforeEach(() => { vi.clearAllMocks() @@ -131,4 +138,41 @@ describe('useFeatureFlags', () => { expect(maxUploadSize.value).toBe(104857600) }) }) + + describe('linearToggleEnabled', () => { + it('should return true when isNightly is true', () => { + vi.mocked(distributionTypes).isNightly = true + + const { flags } = useFeatureFlags() + expect(flags.linearToggleEnabled).toBe(true) + expect(api.getServerFeature).not.toHaveBeenCalled() + }) + + it('should check remote config and server feature when isNightly is false', () => { + vi.mocked(distributionTypes).isNightly = false + vi.mocked(api.getServerFeature).mockImplementation( + (path, defaultValue) => { + if (path === ServerFeatureFlag.LINEAR_TOGGLE_ENABLED) return true + return defaultValue + } + ) + + const { flags } = useFeatureFlags() + expect(flags.linearToggleEnabled).toBe(true) + expect(api.getServerFeature).toHaveBeenCalledWith( + ServerFeatureFlag.LINEAR_TOGGLE_ENABLED, + false + ) + }) + + it('should return false when isNightly is false and flag is disabled', () => { + vi.mocked(distributionTypes).isNightly = false + vi.mocked(api.getServerFeature).mockImplementation( + (_path, defaultValue) => defaultValue + ) + + const { flags } = useFeatureFlags() + expect(flags.linearToggleEnabled).toBe(false) + }) + }) }) diff --git a/src/composables/useFeatureFlags.ts b/src/composables/useFeatureFlags.ts index ab38451ab..e3ad35db0 100644 --- a/src/composables/useFeatureFlags.ts +++ b/src/composables/useFeatureFlags.ts @@ -1,6 +1,6 @@ import { computed, reactive, readonly } from 'vue' -import { isCloud } from '@/platform/distribution/types' +import { isCloud, isNightly } from '@/platform/distribution/types' import { isAuthenticatedConfigLoaded, remoteConfig @@ -65,6 +65,8 @@ export function useFeatureFlags() { ) }, get linearToggleEnabled() { + if (isNightly) return true + return ( remoteConfig.value.linear_toggle_enabled ?? api.getServerFeature(ServerFeatureFlag.LINEAR_TOGGLE_ENABLED, false)