From 29a26351644415b86e4094cfb9d5528bd3b1ba0a Mon Sep 17 00:00:00 2001 From: neo773 <62795688+neo773@users.noreply.github.com> Date: Tue, 3 Feb 2026 22:54:00 +0530 Subject: [PATCH] Fix message/calendar channels stuck with null syncStageStartedAt (#17684) PR #17492 fixed `markAsMessagesListFetchOngoing` to set `syncStageStartedAt`, but also changed `isSyncStale` to return `false` for null values. This prevented the stale recovery job from recovering channels that were already stuck before the fix was deployed. Changing `isSyncStale` to return `true` for null/undefined allows the stale job to properly reset stuck channels back to PENDING state. --- .../utils/is-sync-stale.util.ts | 2 +- .../utils/__tests__/is-sync-stale.util.spec.ts | 8 ++++---- .../message-import-manager/utils/is-sync-stale.util.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/utils/is-sync-stale.util.ts b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/utils/is-sync-stale.util.ts index 9f5cff6823..35c857cc9d 100644 --- a/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/utils/is-sync-stale.util.ts +++ b/packages/twenty-server/src/modules/calendar/calendar-event-import-manager/utils/is-sync-stale.util.ts @@ -4,7 +4,7 @@ import { CALENDAR_IMPORT_ONGOING_SYNC_TIMEOUT } from 'src/modules/calendar/calen export const isSyncStale = (syncStageStartedAt?: string | null): boolean => { if (!isDefined(syncStageStartedAt)) { - return false; + return true; } const syncStageStartedTime = new Date(syncStageStartedAt).getTime(); diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/utils/__tests__/is-sync-stale.util.spec.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/utils/__tests__/is-sync-stale.util.spec.ts index 0770473919..20e6e2ad6f 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/utils/__tests__/is-sync-stale.util.spec.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/utils/__tests__/is-sync-stale.util.spec.ts @@ -24,16 +24,16 @@ describe('isSyncStale', () => { expect(result).toBe(false); }); - it('should return false if syncStageStartedAt is undefined', () => { + it('should return true if syncStageStartedAt is undefined', () => { const result = isSyncStale(undefined); - expect(result).toBe(false); + expect(result).toBe(true); }); - it('should return false if syncStageStartedAt is null', () => { + it('should return true if syncStageStartedAt is null', () => { const result = isSyncStale(null); - expect(result).toBe(false); + expect(result).toBe(true); }); it('should throw an error if syncStageStartedAt is invalid', () => { diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/utils/is-sync-stale.util.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/utils/is-sync-stale.util.ts index 45661f5dd6..964c95f75d 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/utils/is-sync-stale.util.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/utils/is-sync-stale.util.ts @@ -4,7 +4,7 @@ import { MESSAGING_IMPORT_ONGOING_SYNC_TIMEOUT } from 'src/modules/messaging/mes export const isSyncStale = (syncStageStartedAt?: string | null): boolean => { if (!isDefined(syncStageStartedAt)) { - return false; + return true; } const syncStageStartedTime = new Date(syncStageStartedAt).getTime();