Occurrence
Error
E AssertionError: In app shiny/api-examples/todo_list/app-core.py had JavaScript console errors!
E Failed to load resource: the server responded with a status of 404 (Not Found)
tests/playwright/examples/example_apps.py:258: AssertionError
========= 1 failed, 96 passed, 4 skipped, 3 rerun in 110.79s (0:01:50) =========
The assertion is the console_errors check in example_apps.py:258. Note the 3 rerun — the in-job pytest-rerunfailures retries were exhausted, so this reproduced several times within the one job before surfacing.
Why this looks like a flake
- Passed on restart.
gh run rerun 31414916798 --failed came back fully green (173 passed, 2 skipped, 0 failed) with no code change in between.
- The failure is a static resource 404 in the browser console, not an app-level Python error, and the commit under test changed only docstrings.
- The immediately preceding head on the same branch was fully green at 173 passed.
Notes
The console message does not identify which resource 404'd, which is the main obstacle to diagnosing this. If it recurs, capturing the failing request URL (e.g. logging console_errors alongside the page's failed network requests in example_apps.py) would make the next occurrence actionable — a webkit-only asset race on app startup is the leading guess.
Occurrence
playwright-examples (3.12, webkit, 1)tests/playwright/examples/test_api_examples.py::test_api_examples[webkit-shiny/api-examples/todo_list/app-core.py]Error
The assertion is the
console_errorscheck inexample_apps.py:258. Note the3 rerun— the in-jobpytest-rerunfailuresretries were exhausted, so this reproduced several times within the one job before surfacing.Why this looks like a flake
gh run rerun 31414916798 --failedcame back fully green (173 passed, 2 skipped, 0 failed) with no code change in between.Notes
The console message does not identify which resource 404'd, which is the main obstacle to diagnosing this. If it recurs, capturing the failing request URL (e.g. logging
console_errorsalongside the page's failed network requests inexample_apps.py) would make the next occurrence actionable — a webkit-only asset race on app startup is the leading guess.