2026: фронтенд на удалённом Mac —
Oxlint и Biome JSON в одну сводку ворот PR и идемпотентный комментарий через шлюз OpenClaw
Для кого: CI с Oxlint и Biome, единые ворота PR и краткий комментарий. HowTo под Node 22+: .openclaw/reports, шлюз OpenClaw на удалённом Mac, пороги, опционально OpenAI-совместимый вызов. См. Playwright, Lighthouse, knip.
00 Три узких места без единого merge
- Oxlint и Biome отдают разные контракты полей: если склеивать вручную в шаблоне PR, счётчики расходятся и ворота дают ложный зелёный статус.
- Абсолютные пути в артефактах раннера не совпадают с деревом на удалённом Mac, поэтому дедупликация по файлу и правилу ломается без нормализации на шлюзе OpenClaw.
- Длинные логи и вставка закрытых превью в комментарий размывают сигнал: ревьюер не видит, что именно заблокировало merge, а аудит токенов усложняется.
01 Матрица ответственности
Раннер пишет json; удалённый Mac совпадает по Node 22; OpenClaw нормализует пути, merge, бюджет, один комментарий. CI и опциональный LLM читают lint_gate.json.
| Слой | Фокус | Риск |
|---|---|---|
| CI / локалка | JSON в .openclaw/reports |
Дрейф stdout и версий |
| Шлюз | lint_gate.json и пороги |
Ложный pass без merge |
| PR API | Идемпотентный комментарий | 429 и дубликаты |
01a Таблица порогов ворот PR
Числа — в конфиге шлюза или YAML рядом с OpenClaw.
| Сигнал | Жёсткий fail | Мягкий бюджет |
|---|---|---|
| Сумма ошибок после merge | любое значение > 0 |
не применяется |
| Предупреждения суммарно | превышение warn_budget в main |
например warn_budget: 24 в feature-ветках |
| Размер Markdown в PR | жёсткий лимит провайдера | ориентир 120 строк тела до усечения списка файлов |
| POST комментария | после четырёх неудач без нового SHA | код выхода 77 только для ретрая сети |
02 HowTo: воспроизводимый чек-лист
Одинаковая последовательность на локалке, CI и удалённом Mac.
- Node 22+ в
enginesи CI; тот же major на Mac. .openclaw/reportsи json Oxlint без смеси с логами сборки.- Biome с json-репортёром в отдельный файл.
- На шлюз: файлы плюс
GIT_SHA,PR_NUMBER, без секретов в именах. - Merge →
lint_gate.json,pr_lint_gate_summary.md, exit code по порогам. - REST upsert комментария с маркером; тело укоротить.
- Опционально: усечённый json → маршрут шлюза с телом как у OpenAI-совместимого
chat/completions, одна строка резюме в Markdown.
03 JSON Oxlint и Biome локально и в CI
Только файлы, без лишнего stdout. Нормализация путей на шлюзе через переменную REPO_ROOT.
Скрипты: в манифесте — шаг создания каталога отчётов, затем машиночитаемый вывод Oxlint в первый файл и json-репортёр Biome во второй. Флаги сверьте с версией пакета.
04 Шлюз OpenClaw: merge и сравнение с бюджетом
Шлюз читает оба json, мапит серьёзность, сравнивает с warn_budget. На Node 22 небольшой сценарий: два чтения, плоский список нарушений, запись lint_gate.json, код выхода ноль или единица. Добавьте топ правил и хеш в маркер комментария.
04b Опционально: LLM через OpenAI-совместимый API
Ключ не в раннер: только шлюз OpenClaw, усечённый lint_gate.json, маршрут как у /v1/chat/completions, temperature ноль, вставка после проверки. При таймауте — Markdown без модели, ворота автономны.
05 Повтор при сбоях и усечение сводки
Транспорт и 429 — backoff с джиттером с IP удалённого Mac; линтер без повтора, кроме битого JSON после краша.
Усечьте Markdown сводки PR (~120 строк), укажите «ещё N в артефактах CI», без base64 в комментарии.
Оболочка: цикл вызывает скрипт публикации; при коде семьдесят семь и меньше четырёх попыток — пауза с бэкоффом и джиттером с удалённого Mac, иначе выход с фактическим кодом.
06 API комментариев: идея без приватных URL
REST к issue PR или review-comment; токен только на шлюзе, не в Markdown.
Маркер <!-- openclaw-lint-gate:HASH --> по репо, PR и хешу JSON — ищите старый комментарий бота и обновляйте.
Не вставляйте приватные preview URL с обязательным входом; укажите номер джоба или публичную справку. Тело держите сильно ниже ~65k символов GitHub: режьте списки, не счётчики.
- Node 22+ — общий major для скриптов merge и клиента провайдера на удалённом Mac.
- Ориентир 120 строк Markdown сводки до усечения списка файлов.
- До четырёх повторов POST при коде
77в примере bash.
Node 22+, каталог .openclaw/reports и один lint_gate.json связывают локалку и удалённый Mac. После merge Oxlint и Biome на OpenClaw вы получаете единую сводку PR с порогами, усечённым списком и предсказуемым exit code для CI; опциональный абзац от модели остаётся вне критического пути ворот.
Арендуйте узел под шлюз и ворота Oxlint плюс Biome
Нужен тот же Apple Silicon, что и у смоука Safari? Оформите удалённый Mac на тарифах, откройте покупку без обязательной регистрации и держите OpenClaw рядом с быстрыми воротами Oxlint и Biome в одной цепочке поставки.