Skip to content

fix: two flaky required checks — the Visual Studio mask's rename and e2e 845's phase deadline #805

Closed

Description

@ZheFeng7110

What fails

Two required checks fail intermittently, on runs that touch nothing related to them. Both were red in run 38406939721 (PR #804, head 608d3072), where the other 60 checks passed.

windows / bare Windows: no Visual Studio (windows x64)

masking C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC
  rename failed: Access to the path '...\18\Enterprise\VC' is denied.
FAIL: VC tools still present after masking:
  C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Tools\MSVC

The "Mask Visual Studio" step relies on the runner holding the Visual Studio root open while VC one level down renames fine. That is host state, not image state: on windows-2025-vs2026 (image 20260925.250) the same rename succeeded at 09:57 UTC and at 14:32 UTC, and was denied at 13:59 UTC. The mask's own postcondition is what keeps an incomplete mask from reading as a green "bare Windows" row, so the refusal becomes a red check instead of a silent false pass. The same block is duplicated in ci-windows.yml, ci-fresh-install.yml and measure-windows-tool-crt.yml.

macos-e2e / e2e suite 2/2 — 845_play_game_restores_the_terminal.sh

E2E Summary: 144 passed, 1 failed, 170 skipped, from the script's own play.py:71:

AssertionError: G1: no status row carries the score
assert re.search(r"Building .* · snake \d+", plain), ...

play.py sends the arrows and the Ctrl-C at a fixed t0 + 1.5s, while the build reaches Phase::Building only after the Programs phase (build.mcpp compile + run, plus toolchain resolution) — 1.24s of that deadline in the failing run. The status rows do carry the score in the Programs frames; phase_status() prints Running for Phase::Programs and Building only for Phase::Building (src/build/progress.cppm:1074), so the only missing token is the phase word. Host jitter decides which side of the deadline the transition lands on:

  • the macos-15 twin of the job passed in the same run;
  • on main (run 38378041638) the macos-15 twin failed with the identical assertion while xcode-27 passed;
  • 2 of the last 11 ci runs failed e2e suite 2/2, the two hosts alternating.

What should be true

  • A refused rename is retried, and the mask falls back one level deeper (VC\Tools, where all three of msvc.cppm's discovery strategies end), with the postcondition kept: an incomplete mask must still fail the job.
  • The e2e waits for the status row its assertion names instead of for a wall-clock delay, so the arrows and the Ctrl-C land inside the frame the test is about, on a fast runner and a loaded one alike.

Activity

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