Skip to content

test(ci): skip tests that pass locally but fail on the macOS and Windows runners - #1067

Merged
srperens merged 8 commits into
mainfrom
test/skip-known-ci-failures
Oct 12, 2026
Merged

srperens merged 8 commits into
mainfrom
test/skip-known-ci-failures

Conversation

@srperens

@srperens srperens commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Refs #1069

Problem

Main has been red since 2026-10-08. The failures are the same tests every time, and they pass on a developer machine and on Linux CI:

  • macOS runner, all 15 failed runs: the stinger suite (stinger_test, stinger_api_test, stinger_prores_test, stinger_software_decode_test), plus idle_fx_slots_pass_buffers_through_and_effects_still_apply once.
  • Windows runner: the two rewritten-on-disk tests in every run, other stinger tests now and then, and muxed_hls_plays_audio_and_video_in_passthrough once.

Change

  • A new helper, common::skip_known_ci_failure(platforms, reason), returns true when STROM_SKIP_KNOWN_CI_FAILURES is set and the test runs on one of platforms ("macos", "windows"). It prints SKIP: known CI runner failure: <reason>.
  • The macOS and Windows Run tests steps set STROM_SKIP_KNOWN_CI_FAILURES=1. check-linux does not, so Linux CI still runs every test.
  • Each failing test calls the helper first, listing only the runners it has failed on. macOS skips 15 tests, Windows 9. A Windows-only failure still runs on macOS, and the other way round.
  • wait_until_parked() now says why a stinger never parked. Before, the message was only stinger never ready: None. Now it lists each condition ready is made of: parked, paused, the cued index, the loaded clip and its stamp against the file on disk, and the software-decode verdict.

I rejected #[ignore]: it would turn the tests off locally too, and the point is to keep them running on developer machines.

Evidence

The new failure message, run on the Windows runner (a temporary DIAG step that this PR has since removed), found two causes:

  • Rewritten on disk (Windows): reload_picks_up_a_clip_rewritten_on_disk and a_cue_loads_a_parked_clip_rewritten_on_disk fail with Access is denied (os error 5) when they overwrite a clip the player holds open. Windows refuses that, for an operator too. These two can never pass on Windows, and their skip reason says so.
  • Stinger never parks (Windows): paused true, parked false. The stamp and software verdict match, so the stale-file check is ruled out. The cue at flow start times out after 5 s with clip 0 decoded no frame within 5s, and nothing tries again. Root cause still open: Stinger clip source sometimes never parks its first clip on Windows #1069.

The skip switch itself:

  • Skips when the variable is set: STROM_SKIP_KNOWN_CI_FAILURES=1 cargo test --features efp --test stinger_prores_test -- --nocapture gave 4 SKIP lines and finished in 0.00s.
  • Runs when it is not set: cargo test --features efp --test stinger_prores_test gave 4 passed in 20.97s.
  • Skips only on the listed platform: with the variable set on macOS, stinger_api_test skipped the 2 macOS tests and ran the 3 Windows-only ones: 9 passed.

Tests

Ran (macOS, local): the three commands above, cargo fmt --all -- --check, and clippy through the pre-commit hook.
Ran (CI on an earlier commit of this PR, af59f246): every job green, including the macOS and Windows test steps with the skip list.
Not run locally: the Windows paths, which only CI covers.

For the reviewer

These tests no longer guard anything on the runner they skip on. Removing a platform from a helper call turns the test back on there. #1069 lists the Windows ones to turn back on when it is fixed.

check-linux still fails now and then on frame-count asserts in the ProRes and GPU input-format tests (software GL, late frames). This PR leaves that alone. Those tests still run there.

Out of scope

🤖 Generated with Claude Code

…ows runners

Main has been red for days on the same tests: the stinger suite on the
macOS runner (every run), the stinger API reload tests on the Windows
runner, plus single failures in the muxed HLS and idle FX slot tests.
They pass on a developer machine and on Linux CI.

The macOS and Windows test steps now set STROM_SKIP_KNOWN_CI_FAILURES=1,
and those tests return early through common::skip_known_ci_failure()
when it is set. Local runs and Linux CI leave it unset and run them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@srperens srperens added ci:macos Run Build (macOS) on this pull request ci:windows Run Build (Windows) on this pull request labels Oct 12, 2026
A test that fails only on Windows still runs on macOS, and the other way
round. skip_known_ci_failure() now takes the platforms it fails on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@srperens srperens left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: Request changes. This PR's own Windows run is still red. A stinger test the list skips only on macOS failed there, so the skip list does not get main green.

Posted as a comment because GitHub refuses Request changes from the account that opened the PR. The verdict above stands.

Requested changes

  1. Cover the Windows stinger never ready failure as one failure mode, not test by test. Build (Windows) at 2bbe6c4: a_take_plays_with_no_park_probe_on_its_path ... FAILED, stinger never ready: None at backend/tests/common/stinger.rs:497. The list skips that test only on macOS (backend/tests/stinger_test.rs:324 — if common::skip_known_ci_failure(&["macos"], "fails on this CI runner, passes locally") {). On #1055 the same panic hit a_playlist_put_over_the_parked_index_recues_it, which this PR does not list. The failure moves between tests that share wait_until_parked, so a list of names collected from past runs will keep missing the next one. Either skip the whole stinger suite on Windows, or give the never ready mode its own issue.
  2. Give the two Windows rewrite tests their real reason. backend/tests/stinger_api_test.rs:462 — if common::skip_known_ci_failure(&["windows"], "fails on this CI runner, passes locally") {. Neither part of that reason is right. #1055 found that Windows refuses to rename a file over one that another handle holds open (Access is denied), so the tests fail on any Windows machine, not only the runner. The body says only macOS was run locally. #1055 already ignores these two tests with the correct reason, so drop them from this PR or reuse that text.
  3. Make the skips visible in CI. The helper writes SKIP: with eprintln!, and cargo test captures stderr for tests that pass. .github/workflows/ci.yml:732 — cargo test --no-fail-fast --package strom --features efp runs without --nocapture, and the Windows log at this head has no SKIP: known line. The 21 skipped tests appear as ok. CLAUDE.md: "Tests that skip on a missing element pass green and guard nothing". The rule's examples are about missing elements, but the concern is the same here. Passing -- --skip <name> from the workflow would show them as filtered out and keep the list in one file.

Claims

Claim Verdict Evidence
macOS and Windows go green with these skips CONTRADICTED Build (Windows) fail, 12 passed 1 failed in stinger_test. Build (macOS) pass
Linux still runs every skipped test CONFIRMED STROM_SKIP_KNOWN_CI_FAILURES is set only at .github/workflows/ci.yml:645 and :743 (Windows, macOS). Check (Linux) passes
The Windows rewrite tests pass locally UNVERIFIED Only macOS was run. #1055 says Windows refuses the rename

Diagnosis. This quarantines failures. It does not fix anything, and the body says so. Coverage is BOUNDED to the names collected so far, and the Windows run shows that bound is already too small. On macOS almost the whole stinger suite becomes Linux-only. Reasonable for a three-core virtual runner, but it needs an issue tracking the undo, or nothing brings these tests back.

Overlaps. #1055 changes the same two Windows tests in backend/tests/stinger_api_test.rs. Its preroll half is contradicted (my review there), but its Windows ignore was confirmed. Merging both would skip those tests twice under different reasons. Land one mechanism: either #1055's Windows half on its own, then this PR rebased without those two tests, or close #1055 in favour of this PR with item 2 applied.

Radius. LOCAL: test code and two CI env lines.

Tests & CI. At 2bbe6c4: Check (Linux), both Linux builds, WASM, API Contract, Static JS and Build (macOS) pass. Build (Windows) fails as above.

Confidence: HIGH

srperens and others added 5 commits October 12, 2026 16:10
…dows runner too

It failed there with "stinger never ready" on 2026-10-08 and again in
this PR's run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both have failed there before with "stinger never ready", and
a_clip_with_early_audio_lands_its_first_video_frame_on_the_take failed
again in this PR's run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
wait_until_parked() failed with only "stinger never ready: None". It now
lists each condition ready is made of: parked, paused, the cued index,
the loaded clip and its stamp against the file on disk now, and the
software-decode verdict.

DIAG: the Windows job runs the stinger tests three more times without
the skip list. Remove that step before merge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rewritten-on-disk tests cannot run on Windows at all: it refuses to
overwrite a file the player holds open. Say so in their skip reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The diagnosis found two causes on the Windows runner. The rewritten-on-disk
tests cannot run there at all. The rest hit a stinger that never parks its
first clip, tracked in #1069.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@srperens
srperens merged commit 5e1dca8 into main Oct 12, 2026
9 checks passed
@srperens
srperens deleted the test/skip-known-ci-failures branch October 12, 2026 17:06
srperens added a commit that referenced this pull request Oct 13, 2026
…runner (#1071)

Both failed on main after #1067 with the #1069 symptom (parked false).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:macos Run Build (macOS) on this pull request ci:windows Run Build (Windows) on this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant