From 76f330492cdbaeeeb9c0675cbd953ac46b6d0f04 Mon Sep 17 00:00:00 2001 From: Nero Yang <281244945@qq.com> Date: Mon, 7 Sep 2026 10:17:21 +0800 Subject: [PATCH] fix(daemon): wait for async knowledge extraction before TempDir cleanup TestProcessMergeTaskReusesExistingPR flakes with 'directory not empty' because completeMerge launches extractProjectKnowledge in a goroutine that writes under the fixture vault after the test returns. Register a TempDir cleanup that waits for runner.activeTasks to drain before cleanup runs, matching the existing manual_merge/audit test pattern. --- internal/daemon/merge_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/daemon/merge_test.go b/internal/daemon/merge_test.go index 00bd2ec..89fa7db 100644 --- a/internal/daemon/merge_test.go +++ b/internal/daemon/merge_test.go @@ -297,6 +297,11 @@ target_branch: %s runner := newTestRunner(dir, filepath.Join(dir, "omp"), filepath.Join(dir, "logs"), 1) runner.cfg.ObsidianVault = vault + // Merge completion can launch an async knowledge-extraction goroutine + // that writes under the fixture vault. Wait for it before TempDir + // cleanup, otherwise the cleanup races the write and flakes with + // "directory not empty" (Go 1.26 TempDir numbered subdirectories). + t.Cleanup(func() { waitForTasksIdle(t, runner) }) return &mergeFixture{ repo: repo, worktree: worktree,