Prep for the upcoming E2E Playwright CI workflow (Batch C). When the
config flips reuseExistingServer to false in CI, each runner spawns a
dedicated backend + Vite dev server with the test-mode env vars
(APP_ENV=test, DISABLE_RATE_LIMIT_FOR_TESTS=true, etc.) instead of
piggy-backing on whatever happened to be listening on 18080/5173.
Local dev keeps reuseExistingServer=true so engineers retain the fast
turnaround when the dev stack is already up via `make dev`.
CI flag follows the standard convention (process.env.CI is set by
GitHub / Forgejo Actions automatically). No behaviour change for the
default `npm run e2e` invocation.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Set RATE_LIMIT_LIMIT=10000 and RATE_LIMIT_WINDOW=60 so that the
backend started by Playwright doesn't throttle test traffic.
Must be combined with 'make dev-e2e' when running tests against
an already-running backend (reuseExistingServer=true means
Playwright won't restart the backend if one is already on :18080).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root cause analysis via Playwright MCP snapshots revealed that all
35 remaining E2E failures were timing issues, not real app bugs.
Every tested element (Notifications bell, Settings tabs, Search
combobox, Discover genres, Marketplace products, Social tabs) renders
correctly — but the 5s expect timeout was too short for React SPA
hydration.
Changes:
- Increase expect timeout from 5s to 10s in playwright.config.ts
- Fix avatar selector: add img[alt="username"] fallback (no "avatar" class)
- Fix profile edit test: /profile/edit doesn't exist, fields are on /settings
- Fix language selector: handle hidden input from custom Select component
- Fix GoLive regex: include "stream configuration" and "obs" alternatives
- Fix analytics period: match button text "7d" exactly
- Add 10s timeouts to critical assertions (discover, marketplace headings)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>