|
|
| Feasibility |
Medium |
| Status |
Open |
Noted 2026-07, NOT investigated — parked deliberately for its own session. Symptom: a full ./run_tests.sh occasionally fails ONE test that passes both in isolation and on a clean tree, so it is not a regression. Seen twice in one session on DIFFERENT tests — TestPresenterMode::test_stack_peek_renders_next_page_not_on_last and TestShareToPhone::test_server_serves_only_the_token_path — which points at load/timing rather than either test's logic. Prime suspects: the share server binds a real port (collision or a race with another test's server), and _settle()-style main-loop pumping that is a fixed number of iterations rather than a wait-for-condition, so a slow full run under the headless compositor can outrun it. Reproduce by running the full suite repeatedly; a rerun plugin (pytest-rerunfailures) would only mask it. Worth fixing because a suite that cries wolf trains you to ignore it — which is exactly how a real regression slips through. UPDATE 2026-07-30, one cause identified and fixed in its test: late in a full run Weston drops the surface (VK_ERROR_SURFACE_LOST_KHR), the frame clock stops, and with it ALL allocation — widgets keep their last size and even an explicit set_size_request is never honoured, so any assertion downstream of geometry (an adjustment's upper, a scroll position, translate_coordinates) reads stale. That is a third suspect beside the port collision and fixed-iteration pumping, and it is the one that looks most like a race while not being one. Recognise it by WHERE the test dies: at a geometry precondition rather than at what it set out to assert. Cure is to assert the property or the model instead of the pixels, and to skipTest on the unmet precondition where a gesture-level assertion really is the point (see row 128's test).
Noted 2026-07, NOT investigated — parked deliberately for its own session. Symptom: a full ./run_tests.sh occasionally fails ONE test that passes both in isolation and on a clean tree, so it is not a regression. Seen twice in one session on DIFFERENT tests — TestPresenterMode::test_stack_peek_renders_next_page_not_on_last and TestShareToPhone::test_server_serves_only_the_token_path — which points at load/timing rather than either test's logic. Prime suspects: the share server binds a real port (collision or a race with another test's server), and _settle()-style main-loop pumping that is a fixed number of iterations rather than a wait-for-condition, so a slow full run under the headless compositor can outrun it. Reproduce by running the full suite repeatedly; a rerun plugin (pytest-rerunfailures) would only mask it. Worth fixing because a suite that cries wolf trains you to ignore it — which is exactly how a real regression slips through. UPDATE 2026-07-30, one cause identified and fixed in its test: late in a full run Weston drops the surface (VK_ERROR_SURFACE_LOST_KHR), the frame clock stops, and with it ALL allocation — widgets keep their last size and even an explicit set_size_request is never honoured, so any assertion downstream of geometry (an adjustment's upper, a scroll position, translate_coordinates) reads stale. That is a third suspect beside the port collision and fixed-iteration pumping, and it is the one that looks most like a race while not being one. Recognise it by WHERE the test dies: at a geometry precondition rather than at what it set out to assert. Cure is to assert the property or the model instead of the pixels, and to skipTest on the unmet precondition where a gesture-level assertion really is the point (see row 128's test).