2026: фронтенд-QA на удалённом Mac —
шарды Playwright, агрегированный отчёт, политика flake и сводка в PR через шлюз OpenClaw
Для кого: фронтенд QA с непрерывными прогонами на удалённом Mac и WebKit. Здесь не «один проект — один test»: матрица Playwright sharding, merge-reports, политика flake и сводка PR через OpenClaw. Внутри — таблицы параметров, каталог .openclaw/reports, границы шлюза, формула ретраев и таймауты. См. также токены и E2E-смоук, сводка knip. Боли: спам комментариев от шардов, слепая зона без merge, «дамп логов» вместо JSON-контракта. Тарифы, аренда, блог.
03 Соглашение по каталогам отчётов
Коллизии имён на томе удалённого Mac ломают merge. Корень .openclaw/reports/${OPENCLAW_RUN_ID}/, внутри shard-${SHARD}/ для blob, trace.zip только на fail.
.openclaw/reports/${OPENCLAW_RUN_ID}/
shard-1/blob-report.zip
shard-2/blob-report.zip
merged/html/
summary.pr.json
Агрегатор монтирует shard-*, делает npx playwright merge-reports, кладёт HTML в merged/html и summary.pr.json для шлюза.
- Инвариант: один
PLAYWRIGHT_VERSIONна все шарды одного прогона. - Инвариант: не смешивать в одном каталоге отчёты разных коммитов.
- Полезный артефакт: единый
report.jsonпосле merge для счётчиков в сводке PR.
04 Границы вызова OpenClaw
Вход шлюза OpenClaw — компактный JSON: git_sha, run_id, shards_total, shards_received, счётчики, ссылка на merged HTML, топ падений без секретов. Выход — Markdown в PR; токен Git только в CI.
Если число shard-* не равно TOTAL, шлите incomplete_matrix. Idempotency-Key: ${GIT_SHA}:${PROFILE} даёт одну сводку PR на коммит.
05 Порог повторов при flake: формула и пример
Flake в матрице растёт с числом наблюдений: задайте потолок ретраев и метку карантина.
Пусть R_max — максимум ретраев на тест, W — воркеры шарда. Тогда
R_max = clamp( 1, floor( 4 / W ), 3 ) допустимый_процент_flaky = min( 3, 0.5 * sqrt( число_спек / 100 ) )
При превышении доли flaky после merge добавляйте в сводку PR блокер даже при зелёных passed.
Отдельно ведите учёт повторных успехов: если тест стабильно проходит только со второго запуска, это сигнал завести карантинный тег и снизить workers, а не повышать retries бесконечно на всей матрице.
06 Типовые таймауты и разбор
Таймаут в UI-suite часто означает не «медленный тест», а нехватку CPU при нескольких шардах на одном хосте: сначала измерьте загрузку и очередь джобов, потом трогайте expect.timeout и зафиксируйте версию WebKit на узле.
| Симптом | Частая причина на Mac | Что проверить первым |
|---|---|---|
Test timeout только в WebKit |
Реальный рендер медленнее чем в Chromium, мало RAM на шард | Снизить workers, включить сохранение trace только на fail |
Зависание на goto или API |
DNS или TLS к тестовому стенду из датацентра | Повторить curl с раннера, сравнить с локальным VPN |
| Таймаут шага CI «загрузка артефактов» | Слишком много trace для всех тестов | Политика сэмплирования и отдельный лёгкий артефакт для шлюза |
См. scrollbar-gutter Safari Chromium для отделения сети от вёрстки.
07 HowTo: семь воспроизводимых шагов
OPENCLAW_RUN_IDиGIT_SHAво все шарды.blobс уникальнымoutputDirпод.openclaw/reports/....- Матрица Playwright sharding, артефакты без перезаписи.
- Проверка
shards_received == shards_total, затемplaywright merge-reports. summary.pr.jsonсо счётчиками и ссылкой на HTML.- POST в OpenClaw с
Idempotency-Keyи Markdown. - Ночной cron на том же удалённом Mac с тем же layout.
Выделенный удалённый Mac для WebKit и ночных матриц снимает flake от плавающего пула. Тарифы, аренда, блог.