diff --git a/internal/runmgr/recovery_hold_test.go b/internal/runmgr/recovery_hold_test.go index ed3e3c6..20e1c1b 100644 --- a/internal/runmgr/recovery_hold_test.go +++ b/internal/runmgr/recovery_hold_test.go @@ -80,6 +80,13 @@ func TestRecoveryHoldBlocksResumeUntilReleased(t *testing.T) { if held, herr := st.HasOpenRecoveryHold(child.ID, string(child.ConversationID)); held || herr != nil { t.Fatalf("解除后不应再有 hold:held=%v err=%v", held, herr) } + // ResumeInterruptedChildren 启动后台续跑。等它完成后再让测试关闭数据库 + // 和删除临时工作区,避免续跑与 t.Cleanup 并发写同一现场。 + waitUntil(t, func() bool { + c.mgr.noticeMu.Lock() + defer c.mgr.noticeMu.Unlock() + return c.mgr.bgInFlight[c.run.ConversationID] == 0 + }) } // 会话级 hold:同会话的其他中断子 run 一并跳过(副作用疑点未核对前,