perf(team): avoid redundant task cache clone

This commit is contained in:
777genius 2026-05-30 18:48:05 +03:00
parent 7be9158eb3
commit 304d0a5ef1
2 changed files with 19 additions and 1 deletions

View file

@ -600,7 +600,7 @@ export class TeamTaskReader {
const tasks = await request;
if (TeamTaskReader.allTasksGeneration === generationAtStart) {
TeamTaskReader.allTasksCache = {
value: cloneTasks(tasks),
value: tasks,
expiresAt: Date.now() + ALL_TASKS_CACHE_TTL_MS,
};
}

View file

@ -92,6 +92,24 @@ describe('TeamTaskReader', () => {
expect(readAllTasksUncached).toHaveBeenCalledTimes(2);
});
it('keeps cached getAllTasks data isolated from caller mutations', async () => {
const readAllTasksUncached = vi
.spyOn(
TeamTaskReader.prototype as unknown as {
readAllTasksUncached: () => Promise<(TeamTask & { teamName: string })[]>;
},
'readAllTasksUncached'
)
.mockResolvedValueOnce([makeTask('cached-task')]);
const reader = new TeamTaskReader();
const firstRead = await reader.getAllTasks();
firstRead[0]!.subject = 'mutated caller copy';
await expect(reader.getAllTasks()).resolves.toEqual([makeTask('cached-task')]);
expect(readAllTasksUncached).toHaveBeenCalledTimes(1);
});
it('reuses parsed task files until their file signature changes', async () => {
await setupTasksRoot();
await writeTaskFile('atlas-hq', {