## Why `@suaveplan/testing-e2e` is the entry point for every Playwright E2E test in the genesis monorepo. Per the testing-package separation hard rule, it owns Playwright fixtures, page objects, helpers, and a `createPlaywrightConfig()` factory. It is the third and final Layer 0 testing-infrastructure package. Layer 0 — testing-infra packages take no `@suaveplan/*` workspace deps. External catalog deps only. ## What Changes - New package `@suaveplan/testing-e2e` at `packages/universal/testing-e2e/` (genesis-fresh, version `0.1.0`). - **Substitutions per genesis rules:** - Local `TestingE2eError extends Error` with `{ code, cause, context }` shape (no `@suaveplan/error`) - `@opentelemetry/api` direct (no `@suaveplan/opentelemetry`) - `zod` direct (no `@suaveplan/schema-registry`) - English-only `code` machine-contract messages (no `@suaveplan/i18n`) - **No `@suaveplan/*` runtime deps.** `@suaveplan/testing` is allowed as a `devDependency` only (mirroring the testing-dom precedent). ### Public surface (this package) - **Re-exports of Playwright primitives**: `test`, `expect`, `Page`, `Browser`, `BrowserContext`, `Locator`, `request` - **`createPlaywrightConfig(options)`** — factory that emits a `PlaywrightTestConfig` with WSL2-safe defaults (`fullyParallel: false` for stability, retries on CI, screenshot/video/trace on failure) - **`PageObject`** base class — typed wrapper around a Playwright `Page` exposing common patterns (`navigate`, `waitForReady`, `findByRole`-style locators) - **Test fixtures** — `extendedTest` extending Playwright's `test` with a stable shared fixture set: `userPage` (pre-authenticated), `apiContext` (Playwright `request` instance), `freshPage` (forced new context) - **Helpers**: `waitForNetworkIdle`, `screenshotOnFailure`, `dismissDialog`, `mockGeolocation`, `mockClipboard` - **Errors**: `TestingE2eError`, `NavigationError`, `WaitTimeoutError`, `ConfigError`, `FixtureError`, `AbortedError` with `TESTING_E2E..` codes ## Capabilities ### New Capabilities - `testing-e2e`: Playwright fixtures, page-object base class, helpers, config factory, structured errors. Layer 0; no `@suaveplan/*` runtime deps. ### Modified Capabilities (none) ## Impact - **Affected code**: `packages/universal/testing-e2e/**` (fresh). - **Affected consumers**: every E2E-testing app/package (none yet on genesis). - **Version**: `0.1.0`. - **Catalogs**: `@playwright/test` is already in `catalogs.testing` on main; carry over or add the version. - **Pre-publish gate**: `bunx turbo lint typecheck test --filter=@suaveplan/testing-e2e` green + ≥ 95% coverage on touched modules.