The blocking carpenter smoke test (introduced in this branch) exposed
a pre-existing gap: playwright.config.js hardcoded
executablePath: '/snap/bin/chromium' plus channel: 'chromium' for the
maintainer's local CachyOS machine. CI has no /snap/bin/chromium (it
installs its own Chromium via `playwright install --with-deps
chromium`), so every CI run was silently failing to launch the browser
- previously masked because the whole E2E step had
continue-on-error: true.
Gate both overrides behind `!process.env.CI` so local runs keep using
system Chromium and CI falls back to its own installed browser.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>