fix(engine): add cross-process merge guard to prevent concurrent merges
Multiple engine processes (dashboard + serve) share the same SQLite database but each has its own in-memory merge queue. Without a cross-process check, two processes can start merging different tasks simultaneously. Added store.getActiveMergingTask() as a DB-level check before any merge starts. The drainMergeQueue defers with pollIntervalMs delay, and both aiMergeTask and processPullRequestMergeTask have safety-net checks. Also moved stale merge status cleanup to run regardless of autoMerge setting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -145,6 +145,7 @@ function createMockStore(overrides: Record<string, any> = {}) {
|
||||
return makeTask("FN-NEW", "triage");
|
||||
}),
|
||||
deleteTask: vi.fn().mockResolvedValue(undefined),
|
||||
getActiveMergingTask: vi.fn().mockReturnValue(undefined),
|
||||
_trigger(event: string, ...args: any[]) {
|
||||
for (const fn of listeners.get(event) || []) fn(...args);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user