Symptom
web/tests/e2e/specs/flows/ui/command-palette.spec.ts:110 — typing surfaces a seeded ban — fails reliably on the mobile-chromium project (chromium project passes deterministically). Both the original 14-char prefix shape and the post-#1205 full-unique-nick shape hit the same wall:
✘ specs/flows/ui/command-palette.spec.ts:110:9 [mobile-chromium]
Error: expect(locator).toBeVisible() failed
Locator: locator('[data-testid="palette-result"][data-result-kind="ban"]').first()
Timeout: 5000ms
Error: element(s) not found
This is the only test that surfaced after #1205 turned failOnFlakyTests: true and dropped CI to workers: 1. The entire rest of the suite (87 tests including the same spec on chromium and the enter subtest on mobile-chromium) passes deterministic green.
What's been ruled out
Likely shape of the bug
Something specific to the mobile-chromium project (iPhone 13 device descriptor, defaultBrowserType: 'chromium', viewport 390×844) interacts with the palette dialog's <dialog> rendering or the post-fill input handling so the bans.search either:
- doesn't actually land a request (the click on
data-loading clears because the helper deletes the attribute on "no envelope" too), or
- lands and returns rows but the rendered
<a data-testid=\"palette-result\"> isn't laid out inside the visible dialog rect (so Playwright's toBeVisible() returns false), or
- lands but the
<dialog> has been closed/re-opened by some mobile-specific keyboard handling between the assertions.
Investigation paths:
- Add a
page.waitForResponse(POST /api.php with action: 'Bans.Search') and inspect data.bans.length directly to disambiguate (1) from (2)/(3).
- Pull a Playwright trace from CI (
trace: 'on-first-retry' already on) and look at the DOM snapshot at the failed assertion.
- Reproduce locally with
./sbpp.sh e2e --project=mobile-chromium --grep \"typing surfaces a seeded ban\".
Workaround in #1205
The test is conditionally skipped on mobile-chromium with a comment pointing at this issue:
```ts
test.skip(testInfo.project.name === 'mobile-chromium', 'tracked in #');
```
Chromium coverage of the same surface remains. Removing the skip is the success criterion for closing this issue.
Refs
Symptom
web/tests/e2e/specs/flows/ui/command-palette.spec.ts:110— typing surfaces a seeded ban — fails reliably on the mobile-chromium project (chromium project passes deterministically). Both the original 14-char prefix shape and the post-#1205 full-unique-nick shape hit the same wall:This is the only test that surfaced after #1205 turned
failOnFlakyTests: trueand dropped CI toworkers: 1. The entire rest of the suite (87 tests including the same spec on chromium and theentersubtest on mobile-chromium) passes deterministic green.What's been ruled out
GET_LOCKinSbpp\\Tests\\Fixture::truncateAndReseed(fix(tests): serialize Fixture truncate+reseed; fail loudly on flaky CI #1205).workers: 1in CI (fix(tests): serialize Fixture truncate+reseed; fail loudly on flaky CI #1205).data-loadingflag with a 10s timeout (fix(tests): serialize Fixture truncate+reseed; fail loudly on flaky CI #1205);data-loadingclears, then we still don't see results..sidebar__linkhidden on mobile: there's no media-query intheme.csshiding the class.bans.searchreturns no early-empty for non-empty queries;LIKE '%full-unique-nick%'should match the just-inserted row.Likely shape of the bug
Something specific to the mobile-chromium project (iPhone 13 device descriptor,
defaultBrowserType: 'chromium', viewport 390×844) interacts with the palette dialog's<dialog>rendering or the post-fill input handling so the bans.search either:data-loadingclears because the helper deletes the attribute on "no envelope" too), or<a data-testid=\"palette-result\">isn't laid out inside the visible dialog rect (so Playwright'stoBeVisible()returns false), or<dialog>has been closed/re-opened by some mobile-specific keyboard handling between the assertions.Investigation paths:
page.waitForResponse(POST /api.php with action: 'Bans.Search')and inspectdata.bans.lengthdirectly to disambiguate (1) from (2)/(3).trace: 'on-first-retry'already on) and look at the DOM snapshot at the failed assertion../sbpp.sh e2e --project=mobile-chromium --grep \"typing surfaces a seeded ban\".Workaround in #1205
The test is conditionally skipped on mobile-chromium with a comment pointing at this issue:
```ts
test.skip(testInfo.project.name === 'mobile-chromium', 'tracked in #');
```
Chromium coverage of the same surface remains. Removing the skip is the success criterion for closing this issue.
Refs