Files
jakevin 6129bb3953 ci(e2e): place each gate where its runner can run it deterministically (#2082)
#2081 tried to make the real-browser AX smoke run everywhere via
--headless=new. That fixed headed macOS's Mach-port crash but exposed a
second environment property: hosted runners don't reliably start the MV3
extension service worker in headless, so main went red on macOS anyway.
Chasing headless reliability across runner images is the wrong axis.

First principles: gate each check on the environment that can run it
deterministically, and make sure every OS has a real blocking gate.

- Real-browser extension smoke (AX tree + cross-frame CDP): Linux under
  xvfb is the one hosted environment where a real Chrome reliably starts
  an MV3 extension. It runs there, headed, release-blocking. It is not
  scheduled on macOS/Windows because neither can run it deterministically
  (headed macOS crashes on Mach port rendezvous outside an Aqua session;
  headless connects no SW).
- Daemon transport contracts: no browser, deterministic, so they run
  blocking on all three OSes including Windows — macOS/Windows now have a
  real gate over the exact layer our recent bugs lived in (#2067/#2070/
  #2073), not a skipped test that proves nothing.
- Windows joins the matrix for the first time (transport gate); the
  setup-chrome action is skipped there since it hangs on the MSI path and
  Windows needs no browser.

Local Chrome launch stays headed by default; OPENCLI_E2E_HEADLESS=1 opts
into headless for display-less local runs.
2026-07-04 02:12:22 +08:00
..