Type: bug · Parent: Epic 8 (test-suite stability — a green CI is a launch gate) · Surfaces: the Playwright E2E (bulk-*) CI job / the E2E harness startup · Reported by: Yue.
A DIFFERENT flake class from MOTIR-671 / MOTIR-672 (those were spec-side optimistic-UI races, fixed). This one is a harness-startup failure: when a bulk shard's Playwright webServer (and/or the inngest dev server) doesn't come up cleanly, the entire shell-flows.spec.ts suite reds at once — not a product regression. Because PR CI runs each branch MERGED with main, this reds any open PR's E2E job regardless of its diff, forcing blind re-runs (the same tax MOTIR-671 called out).
Playwright E2E (bulk-4))8 failed, all in tests/e2e/shell-flows.spec.ts + 1 flaky in saved-filters.spec.ts (passed on retry); 54 passed. Failing specs: mobile drawer (310), sign-out via palette (342), sign-out via user menu (362), empty-workspace CTA (376), re-login restores last project (401), brand-new account lands on first workspace (483), archived last-active recovery (515), org-switch swaps list (598).
Root-cause signature in the WebServer log (both attempts):
GET /sign-up 404 — the app server wasn't serving the sign-up route, so every spec that creates/switches accounts fails at setup.PUT /api/inngest 404 throughout the run, plus {"level":"ERROR","msg":"error handling queue item","error":"invalid status code: 404","item_kind":"start"} — the inngest dev server / serve endpoint never came up in that shard.So the suite ran against a half-started server (app routes and/or inngest not ready), and every account-dependent shell flow failed deterministically within that shard.
getProjectRoadmap's off-level blocker readback (roadmap) — zero auth/shell/inngest surface.main) passed bulk-4 including all shell-flows specs — so the suite is healthy on main; #1517 just drew a bad shard start. Re-running the failed jobs is the current unblock, which is exactly the manual toil this bug is about removing.Matches the known harness-flake class (sandbox OOM killing the Playwright webServer; the inngest-cli cold-download / cold-start timeout) noted in prior E2E runs.
/sign-up or /api/inngest.playwright.config.ts (webServer config — command, port, reuseExistingServer, readiness url/timeout) + the E2E CI workflow (bulk shard matrix) — where the startup readiness gate lands.tests/e2e/_helpers/* (the shared sign-in / inngest-stub / db-reset harness) + the inngest dev-server launch — the cold-start path that 404s.tests/e2e/shell-flows.spec.ts — the suite that reds wholesale when startup is incomplete.