From bf80f8874a6103ddffa523046940543fe062a000 Mon Sep 17 00:00:00 2001 From: Timofey Maximov Date: Thu, 15 Oct 2026 20:14:48 +0400 Subject: [PATCH] test(a11y): leave Firefox out of the browser runs until #263 A drag test failed in Firefox in the 1.0.0-rc.2 release gate, and no local run can reproduce it on macOS 27 (#182). `vp run browsers`, and with it the full and release gates and CI's on-demand job, run WebKit alone until #263 brings Firefox back. Refs #263 Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 8 ++++---- docs/internal/quality-gates.md | 6 +++--- tools/a11y/vite.config.ts | 16 +++++++--------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d2c32890..f3ca4448 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,7 +34,7 @@ Check locally; don't wait on CI to learn whether a change passes. There are thre | ----- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Quick | `vp run ready:quick` | The docs site's link check, which compiles every page, then `vp check` and `vp test` | | PR | `vp run ready` | Quick, plus production builds, the release checks (size budgets, API reports, package exports), the React, SSR, registry and package-graph gates, and the a11y suite in Chromium. CI runs the same tasks on every PR: `ready:checks` and `a11y`. | -| Full | `vp run ready:full` | Everything in PR, plus the a11y suite at CI's speed (`a11y:ci-speed`) and in Firefox and WebKit (`browsers`), the release dry run (a fresh build, the packed tarballs installed from the pnpm store into a clean project, the registry built for that version), the docs site's types and search, and the dry run's tarballs in use (`release:artifacts`): the SSR fixture's tests and the docs site's build in copies outside the workspace, and `shadcn add` into clean Vite and Next.js apps, which needs the network. It's the release gate. | +| Full | `vp run ready:full` | Everything in PR, plus the a11y suite at CI's speed (`a11y:ci-speed`) and in WebKit (`browsers`; Firefox is off until #263), the release dry run (a fresh build, the packed tarballs installed from the pnpm store into a clean project, the registry built for that version), the docs site's types and search, and the dry run's tarballs in use (`release:artifacts`): the SSR fixture's tests and the docs site's build in copies outside the workspace, and `shadcn add` into clean Vite and Next.js apps, which needs the network. It's the release gate. | When each tier runs: @@ -47,7 +47,7 @@ When each tier runs: - **Full, for releases only:** the release workflow runs it on the release commit before it publishes. A PR doesn't run it, with one exception: a PR that changes the full gate itself or the release tooling runs it once, to show the gate still works, and links a green run of CI's - on-demand `release-gate` job on a fresh runner, which runs Firefox too. A PR that changes the + on-demand `release-gate` job on a fresh runner. A PR that changes the release tooling also links a green dry run of the release workflow (`vp run release --dry-run` from its branch). @@ -62,8 +62,8 @@ only redoes what changed; `a11y:ci-speed` never replays, since a timing race can When a tier fails, `vp run --last-details` names the step; rerun it alone with `vp run `. The browser runs need Playwright's browsers once: `vp exec --filter a11y playwright install chromium -firefox webkit` (add `--with-deps` on Linux). Playwright's Firefox doesn't start on macOS 27 (#182); -there `browsers` runs WebKit alone. CI runs both on demand: `gh workflow run ci.yml --ref `. +firefox webkit` (add `--with-deps` on Linux). `browsers` runs WebKit alone until #263 brings Firefox +back. CI runs it on demand: `gh workflow run ci.yml --ref `. A new check joins a tier in `vite.config.ts`: `ready:checks` or `gate:serial` for the PR tier, `ready:full` or `gate:serial:full` for the full gate only. Put it in a `gate:serial` lane if it diff --git a/docs/internal/quality-gates.md b/docs/internal/quality-gates.md index e593485a..6556e045 100644 --- a/docs/internal/quality-gates.md +++ b/docs/internal/quality-gates.md @@ -133,9 +133,9 @@ installs the polyfill before any test imports, as an app would, and a test check - Some tests skip in WebKit: focus kept in view in the scrolling agenda (#185, a known issue for rc.1), and until #181 the agenda's end, the 10,000-event agenda scroll (too slow on the polyfill in CI), a day swipe's and a month step's snap points, and a drag against the edge. -- Playwright's Firefox doesn't start on macOS 27 (#182). There the run leaves it out and says so; - CI runs it on Linux in the on-demand `browsers` job and in the release gate, green since #204 - (#192). +- Firefox is left out of every run, the release gate's included, until #263 brings it back: a drag + test failed there in the 1.0.0-rc.2 release gate. Playwright's Firefox also doesn't start on + macOS 27 (#182). ## Passing gates diff --git a/tools/a11y/vite.config.ts b/tools/a11y/vite.config.ts index d61247ae..c0d73f7b 100644 --- a/tools/a11y/vite.config.ts +++ b/tools/a11y/vite.config.ts @@ -1,4 +1,4 @@ -import { availableParallelism, release } from "node:os"; +import { availableParallelism } from "node:os"; import tailwindcss from "@tailwindcss/vite"; import { configDefaults, defineConfig } from "vite-plus"; @@ -8,10 +8,10 @@ import { mouse } from "./mouse"; import { Watchdog } from "./watchdog"; /** - * Playwright's Firefox can't find a profile folder on macOS 27 and quits before it opens a page - * (#182). There, `--mode browsers` runs WebKit alone. + * `--mode browsers` leaves Firefox out until #263 brings it back: a drag test failed there in the + * 1.0.0-rc.2 release gate. Playwright's Firefox also can't start on macOS 27 (#182). */ -const firefoxStarts = !(process.platform === "darwin" && Number(release().split(".")[0]) >= 27); +const firefoxRuns = false; /** Reduced motion runs in a Chromium context of its own. */ const chromiumOnly = ["tests/reduced-motion.a11y.tsx"]; @@ -19,9 +19,7 @@ const chromiumOnly = ["tests/reduced-motion.a11y.tsx"]; export default defineConfig(({ mode }) => { // `vp run browsers`: the suite in Firefox and WebKit instead of Chromium. const otherBrowsers = mode === "browsers"; - if (otherBrowsers && !firefoxStarts) { - console.warn("Firefox left out: Playwright's Firefox doesn't start on macOS 27 (#182)."); - } + if (otherBrowsers && !firefoxRuns) console.warn("Firefox left out until #263."); /** * Test files that run at once, each in a page of its own. Vitest gives each browser a pool of @@ -29,7 +27,7 @@ export default defineConfig(({ mode }) => { * and unit-test lane. So a run takes half the cores, split between its browsers, and the full * gate runs its browser runs one at a time. Reduced motion has one file, so one page. */ - const browsers = otherBrowsers && firefoxStarts ? 2 : 1; + const browsers = otherBrowsers && firefoxRuns ? 2 : 1; const maxWorkers = Math.max(1, Math.ceil(availableParallelism() / 2 / browsers)); return { @@ -61,7 +59,7 @@ export default defineConfig(({ mode }) => { headless: true, instances: otherBrowsers ? [ - ...(firefoxStarts ? [{ browser: "firefox" as const, exclude: chromiumOnly }] : []), + ...(firefoxRuns ? [{ browser: "firefox" as const, exclude: chromiumOnly }] : []), { browser: "webkit" as const, exclude: chromiumOnly }, ] : [