Symptom
The test (windows-latest, 3.12) leg of ci.yml intermittently fails with:
textual.worker.WorkerFailed: Worker raised exception: NoMatches("No nodes match '#status-bar' on Screen(id='_default')")
The failing TUI test varies between runs (observed: tests/test_tui.py::test_run_cleans_the_selected_file_and_reinspects, tests/test_tui.py::test_clean_now_runs_the_plan_and_shows_the_run_pane, tests/test_layer_b_end_to_end.py::test_tui_run_performs_a_live_rewrite) but the root error is always the same: a worker queries a selector before the widget is mounted.
Evidence (last ~1 hour, unrelated diffs)
Since ci-green is a required check, this flake randomly blocks PR merges.
Suggested direction
- Assert/wait for widget mount before workers query selectors (e.g.
pilot + explicit mount wait, or App.run_test() with wait_for_animation=False + polling query_exclusive/retry)
- Or mark the TUI tests
pytest.mark.flaky(reruns=N) on Windows as a stopgap
- Or serialize the TUI tests (some Textual flakes are load-order related)
Symptom
The
test (windows-latest, 3.12)leg ofci.ymlintermittently fails with:The failing TUI test varies between runs (observed:
tests/test_tui.py::test_run_cleans_the_selected_file_and_reinspects,tests/test_tui.py::test_clean_now_runs_the_plan_and_shows_the_run_pane,tests/test_layer_b_end_to_end.py::test_tui_run_performs_a_live_rewrite) but the root error is always the same: a worker queries a selector before the widget is mounted.Evidence (last ~1 hour, unrelated diffs)
main, gradio bump) — failed this way at 23:34Since
ci-greenis a required check, this flake randomly blocks PR merges.Suggested direction
pilot+ explicit mount wait, orApp.run_test()withwait_for_animation=False+ pollingquery_exclusive/retry)pytest.mark.flaky(reruns=N)on Windows as a stopgap