From 9ffdb6468b3f0befd4731a01882d4f1ac1eeca08 Mon Sep 17 00:00:00 2001 From: 777genius Date: Sun, 31 May 2026 12:57:31 +0300 Subject: [PATCH] perf(main): extend launch summary cache window --- src/main/services/team/LaunchIoGovernor.ts | 2 +- src/main/services/team/TeamTaskReader.ts | 2 +- .../services/team/LaunchIoGovernor.test.ts | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/services/team/LaunchIoGovernor.ts b/src/main/services/team/LaunchIoGovernor.ts index c7fafa1e..76b4edb9 100644 --- a/src/main/services/team/LaunchIoGovernor.ts +++ b/src/main/services/team/LaunchIoGovernor.ts @@ -49,7 +49,7 @@ interface OperationState { } export const DEFAULT_LAUNCH_IO_QUIET_WINDOW_MS = 3_000; -export const DEFAULT_LAUNCH_IO_MAX_STALE_AGE_MS = 15_000; +export const DEFAULT_LAUNCH_IO_MAX_STALE_AGE_MS = 120_000; export const DEFAULT_LAUNCH_IO_STUCK_PRESSURE_MS = 10 * 60_000; const DEFAULT_WARNING_COOLDOWN_MS = 10_000; diff --git a/src/main/services/team/TeamTaskReader.ts b/src/main/services/team/TeamTaskReader.ts index aa8c91aa..f6f0ab77 100644 --- a/src/main/services/team/TeamTaskReader.ts +++ b/src/main/services/team/TeamTaskReader.ts @@ -22,7 +22,7 @@ import type { const logger = createLogger('Service:TeamTaskReader'); const MAX_TASK_FILE_BYTES = 2 * 1024 * 1024; -const ALL_TASKS_CACHE_TTL_MS = 5_000; +const ALL_TASKS_CACHE_TTL_MS = 30_000; const TASK_FILE_CACHE_MAX_ENTRIES = 8_192; interface CachedAllTasks { diff --git a/test/main/services/team/LaunchIoGovernor.test.ts b/test/main/services/team/LaunchIoGovernor.test.ts index 1b989282..40e55fc7 100644 --- a/test/main/services/team/LaunchIoGovernor.test.ts +++ b/test/main/services/team/LaunchIoGovernor.test.ts @@ -4,6 +4,7 @@ import { cloneLaunchIoGovernorPayload, LaunchIoGovernor, } from '../../../../src/main/services/team/LaunchIoGovernor'; + import type { GlobalTask, TeamProvisioningProgress, TeamSummary } from '../../../../src/shared/types'; function team(teamName: string): TeamSummary { @@ -141,6 +142,26 @@ describe('LaunchIoGovernor', () => { expect(loadFresh).toHaveBeenCalledTimes(2); }); + it('keeps default launch summary cache through a long active startup', async () => { + let now = 0; + const governor = new LaunchIoGovernor({ now: () => now }); + const loadFresh = vi.fn(async () => [task('old-task')]); + + await governor.runSummaryOperation('teams:getAllTasks', loadFresh, { + clone: cloneLaunchIoGovernorPayload, + }); + now = 60_000; + loadFresh.mockResolvedValue([task('new-task')]); + governor.noteLaunchIntent('team-a', 'launch'); + + await expect( + governor.runSummaryOperation('teams:getAllTasks', loadFresh, { + clone: cloneLaunchIoGovernorPayload, + }) + ).resolves.toEqual([task('old-task')]); + expect(loadFresh).toHaveBeenCalledTimes(1); + }); + it('does not cache an in-flight result when a dirty generation arrives before it resolves', async () => { const governor = new LaunchIoGovernor(); const deferred = createDeferred();