Skip to content

CI: windows-latest test job cancelled at the 12-minute ceiling, reported as a failing check #717

Description

@lidge-jun

Area

GitHub Actions CI (.github/workflows/ci.yml).

Summary

The test job's timeout-minutes: 12 is no longer enough headroom for windows-latest, so PR and dev runs are being cancelled mid-Test and surfaced to authors as a failing check. This is a CI budget problem, not a defect in the PRs that trip it.

Evidence from live runs:

Run Branch windows-latest Wall time
30459554635 dev success 11 min
30493348190 dev cancelled
30497549930 dev cancelled
30498312557 dev cancelled
30498333662 dev cancelled
30498427875 dev cancelled

The last green Windows run took 11 minutes against a 12-minute ceiling — roughly one minute of margin. Every dev run after it was cancelled.

Job-level confirmation on PR #653 (879efb243, job 90733427766):

conclusion: cancelled
started 2026-07-29T23:11:50Z  completed 2026-07-29T23:23:55Z   (12m05s)
Test: cancelled
GUI tests / Privacy scan / GUI lint / GUI build / CLI help smoke: skipped

The job dies at 12m05s with Test cancelled and every later step skipped, which is the signature of the job timeout rather than a test assertion failure.

Why this is costing review time

gh pr checks renders a cancelled job as fail, so a PR whose code is fine looks broken. Two examples from today:

Reviewers currently have to open gh api .../check-runs and read conclusion on every red Windows job to tell a real failure from a timeout. That is easy to skip, and skipping it either blocks a good PR or hides a real one.

Suggested direction

The immediate unblock is more headroom — the existing code comment already records that 8 minutes was raised to 12 for the same reason, so the ceiling has been chasing suite growth rather than leading it. Worth pairing that with something that stops the ratchet:

  • Raise timeout-minutes for the test job with real margin over the current 11-minute Windows baseline.
  • Look at why Windows is roughly 2.5x slower than Linux (4 min) on the same suite. If a small number of tests dominate, sharding or test.serial on the resource-heavy ones may be cheaper than repeatedly raising the ceiling.
  • Related but separate: the earlier fix(catalog): stop respawning the codex --version probe on every catalog read #610 investigation captured error: EEXIST: file already exists, epoll_ctl plus Cannot call afterEach() after the test run has completed from the Bun runner on Linux CI. I could not find a matching upstream Bun issue, so I am not claiming a known regression — noting it because a runner that crashes or hangs would also present as a timeout.

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, and personal data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions