Skip to content

Windows CI:agent-island 三个 TTL/关闭用例各超时 60 秒 #8361

Open

Description

@zqchris

Windows CI 在 agent-island 的三个独立用例各超时 60 秒:

  • TTL prune 后再 Stop 会清账本并立刻给远端发收尾包(service.test.ts:7109)
  • TTL prune 后再 process-close 仍保留远程未读,直到真正 ack(:7142)
  • ledger-only error 在新一轮 running 被 App badge 镜像后,passive 仍免疫(:7183)

证据:client-ci Windows unit tests (4/4),commit e57cc5e。三个用例均使用 fake timers,日志没有断言失败,均为 Test timed out in 60000ms。当前没有证据确定具体根因,可能涉及调度或定时器等待,需在 Windows 复现。

从附件预览 PR #8356 分出:apps/desktop/src/main/agent-island/** 与对应测试未被该 PR 改动,属于用户明确范围外。本 PR 修复附件预览失败,不增加测试超时、不修改该服务或削弱其断言。此 issue 保留 Windows CI 问题,不能视为已修复。

Activity

  1. dash-s-cindy commented on Nov 1, 2026

    @dash-s-cindy

    判断与行动

    灵动岛在 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 引起的递归重调度。

    技术依据与分析

    1. 测试隔离特征:
      • 三个用例单独运行时均在毫秒级正常通过(fix(bots): restore compact B2B traces and quiet internal replies #8323 的验证记录中亦已明确记录“整文件一次复跑 3 项原有计时用例超时,单独复核全部通过”);
      • 超时仅发生在全文件连续执行或 CI 并发执行时,证明单个用例的状态机断言本身正确,问题根源在跨用例的环境污染与事件循环积压。
    2. 定时器与实例清理缺口:
      • 检查源码发现,这三个用例(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 硬超时。

    相关记录

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions