fix(tasks): sync markdown loops when listing tasks

This commit is contained in:
Bohdan Triapitsyn
2026-08-09 20:32:30 +03:00
parent a7f1d7d89e
commit ce6912fe40
4 changed files with 34 additions and 3 deletions
@@ -34,6 +34,36 @@ const loopTask = {
execution: { prompt: 'digest', providerID: 'openai', modelID: 'gpt-4.1' },
};
describe('scheduled-task service list', () => {
it('reconciles loop files before returning tasks', async () => {
const syncedTasks = [loopTask];
const { service, projectConfigRuntime, scheduledTasksRuntime } = createService({
scheduledTasksRuntime: {
syncProject: vi.fn(async () => syncedTasks),
},
});
await expect(service.list('project-test')).resolves.toBe(syncedTasks);
expect(scheduledTasksRuntime.syncProject).toHaveBeenCalledOnce();
expect(scheduledTasksRuntime.syncProject).toHaveBeenCalledWith('project-test');
expect(projectConfigRuntime.listScheduledTasks).not.toHaveBeenCalled();
});
it('surfaces reconciliation failure instead of returning a stale list', async () => {
const syncError = new Error('loop reconciliation failed');
const { service, projectConfigRuntime } = createService({
scheduledTasksRuntime: {
syncProject: vi.fn(async () => {
throw syncError;
}),
},
});
await expect(service.list('project-test')).rejects.toBe(syncError);
expect(projectConfigRuntime.listScheduledTasks).not.toHaveBeenCalled();
});
});
describe('scheduled-task service remove', () => {
it('rejects deleting a loop-sourced task while its loop file still exists', async () => {
const tempRoot = await mkdtemp(path.join(os.tmpdir(), 'oc-loop-delete-'));