You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
预期结果与完成条件:整文件执行 pnpm --filter desktop exec vitest run src/main/agent-island/__tests__/service.test.ts 以及 Windows CI 单元测试 4/4 分片均在预期正常耗时内全部通过,不再出现 Test timed out in 60000ms。
Activity
dash-s-cindy commentedon Nov 1, 2026
判断与行动
灵动岛在 Windows CI 上的三个用例超时属于测试套件内部的虚拟定时器与实例生命周期泄漏问题,业务功能与状态机实现本身无异常,应在测试层面补齐隔离清理以消除 CI 误报。
首要行动:
apps/desktop/src/main/agent-island/__tests__/service.test.ts中,为三个超时用例(7109、7142、7183 行)的finally块显式补齐service.resetRuntimeState(),清理publishTimer等未决调度;pnpm --filter desktop exec vitest run src/main/agent-island/__tests__/service.test.ts以及 Windows CI 单元测试 4/4 分片均在预期正常耗时内全部通过,不再出现Test timed out in 60000ms。resetRuntimeState()后整文件仍超时,再排查advanceTimersByTimeAsync(AGENT_ISLAND_UNREAD_TRANSIENT_TTL_MS + 50)跨越 4 小时区间时是否存在前序未清理 mock 引起的递归重调度。技术依据与分析
service.test.ts:7109、7142、7183)均启用了vi.useFakeTimers(),并使用await vi.advanceTimersByTimeAsync(AGENT_ISLAND_UNREAD_TRANSIENT_TTL_MS + 50)快进 4 小时(14,400,050ms)以验证 TTL prune 行为;AgentIslandService实例,但在finally块中仅调用了vi.useRealTimers(),未调用service.resetRuntimeState();AgentIslandService在状态流转时会自动安排publishTimer。若前序实例未在测试收尾时清理,遗留的延迟定时器在大跨度快进时会被密集唤醒,导致 Vitest 在 Windows CI runner 上阻塞事件循环直至 60s 硬超时。相关记录
resetRuntimeState()逐项清理真实实例以保障测试隔离。