diff --git a/src/app/features/archive/task-archive.service.spec.ts b/src/app/features/archive/task-archive.service.spec.ts index 3b1b3ada3d..1c7f8bb68b 100644 --- a/src/app/features/archive/task-archive.service.spec.ts +++ b/src/app/features/archive/task-archive.service.spec.ts @@ -449,6 +449,19 @@ describe('TaskArchiveService', () => { ); }); + it('should NOT dispatch when updates array is empty (issue #7268)', async () => { + archiveDbAdapterMock.loadArchiveYoung.and.returnValue( + Promise.resolve(createMockArchiveModel([])), + ); + archiveDbAdapterMock.loadArchiveOld.and.returnValue( + Promise.resolve(createMockArchiveModel([])), + ); + + await service.updateTasks([]); + + expect(storeMock.dispatch).not.toHaveBeenCalled(); + }); + it('should NOT dispatch actions when isSkipDispatch is true', async () => { const task1 = createMockTask('task1', { title: 'Task 1' }); const youngArchive = createMockArchiveModel([task1]); diff --git a/src/app/features/archive/task-archive.service.ts b/src/app/features/archive/task-archive.service.ts index bb9ca7d858..4eb53b4451 100644 --- a/src/app/features/archive/task-archive.service.ts +++ b/src/app/features/archive/task-archive.service.ts @@ -356,7 +356,9 @@ export class TaskArchiveService { // Using updateTasks (batch) instead of individual updateTask to create // a single operation instead of N operations. This is critical for // repeating task config updates that affect many archived instances. - if (!options?.isSkipDispatch) { + // Skip dispatch for empty updates to avoid an invalid operation-log entry + // with entityIds: [] (see operation-log.effects.ts validator). + if (!options?.isSkipDispatch && updates.length > 0) { this.store.dispatch(TaskSharedActions.updateTasks({ tasks: updates })); } }