2 months ago
9815920Two Playwright e2e tests flaked on WebKit and CI retries:1 absorbed the
flakes silently, eroding CI trust.
lyrics-follow "user wheel unlocks follow":
- Replace page.mouse.wheel (WebKit drops synthetic wheel deltas) + the
up-to-6s waitForScrollSettle poll + the 800ms sleep that raced the 4s
re-lock window with a deterministic scrollTop write + dispatched
WheelEvent in one synchronous frame.
- Assert follow state via data-visible and poll the resting/re-locked
scrollTop instead of fixed sleeps. Drop the now-unused helper.
playback-controls "muted stem button color":
- Stop sampling getComputedStyle().backgroundColor right after a mouse
click, which reads the :hover / transition value. Assert the semantic
terminal state (aria-pressed=true, no data-active) and poll the icon
color until it settles to the --color-text-dimmer token, resolved
inside the button's own cascade scope (the token is re-defined for the
desktop window-chrome subtree the app renders in).
CI:
- Add a JSON reporter and a "Report flaky tests" step that counts
status=flaky results from the report and prints the count (even 0) to
the job summary, plus a ::warning:: when > 0. retries:1 stays but can
no longer mask flakes silently. No ${{ }} in the run block (env-free
file parse) per the workflow hygiene test.
Verified: webkit --repeat-each=20 green for both tests (40/40); full
both-spec run green on chromium+webkit (86/86); lint, oxfmt, tsc, and the
workflow-security + ci-workflow-contract vitests pass.
Fixes #218
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>Parent6ecbdfa