2026 OpenClaw фронтенд на удалённом Mac:
разбор JSON dependency-cruiser пороги ворот по циклам сводка для pull request и merge с блоком линтеров
2026-openclaw-dependency-cruiser-pr-summary-remote-mac.htmlДля кого: команды которые уже гоняют depcruise в CI но хотят одну читаемую сводку в pull request с жёсткими порогами и без утечки полного графа в чат модели. Ниже контракт пути json таблица уровней шесть воспроизводимых шагов и вариант шлюз OpenClaw или локальный скрипт на удалённом Mac как у прод раннера. Связанные сценарии merge комментария: ESLint Stylelint json и шлюз knip и неиспользуемые экспорты Oxlint Biome и бюджет предупреждений. Публичные страницы без входа: тарифы помощь покупка.
00 Три узких места если оставить только exit code depcruise
- Дрейф путей абсолютные корни раннера не совпадают с деревом на ноутбуке ревьюера и с удалённым Mac поэтому без нормализации к относительным сегментам таблица циклов в PR каждый раз новая и спорная.
- Длинный stdout если смешать лог сборки и json парсер на шлюзе ломается а повторный запуск на другой фазе даёт расхождение с артефактом который увидел OpenClaw.
- Разрозненные комментарии отдельный поток для линтеров отдельный для графа ревьюер закрывает вкладку не понимая можно ли мержить пока не сведёте блоки в одну запись с маркером.
01 Матрица кто держит контракт json
Раннер пишет один файл графа CI читает код выхода по порогам шлюз OpenClaw или маленький сервис нормализует пути и длину markdown провайдер pull request получает тело без секретов.
| Слой | Фокус | Риск если пропустить |
|---|---|---|
| Репозиторий | .dependency-cruiser.js и правило no-circular |
Несравнимые отчёты между ветками |
| Артефакт | Только artifacts/depcruise/graph.json |
Парсинг stdout и гонки кэша |
| Шлюз или скрипт | Подсчёт циклов длина модулей версия таблицы порогов | Ложный зелёный статус при длинном хвосте нарушений |
02 Уровни нарушений и лимиты числа модулей
Числа ниже стартовый шаблон зафиксируйте в README и поднимайте версию таблицы при каждом изменении чтобы шлюз логировал согласованность с json.
| Уровень | Условие пример | Код выхода CI |
|---|---|---|
| info | Нет циклов либо только записи из allowlist | 0 |
| warn | От одного до двух циклов каждый не длиннее шести модулей в цепочке не более восьми строк таблицы в теле комментария | 0 в шапке сводки метка WARN |
| error | Три и более циклов или цепочка длиннее семи модулей или число проанализированных модулей выше восьмисот до рефакторинга конфига | 1 блокирует merge |
Для ветки релиза можно поднять warn до error одной строкой в конфиге шлюза чтобы срочный патч не обходил архитектурный долг без явного решения владельца сервиса.
03 Шесть воспроизводимых шагов от json до комментария
- Закрепите конфиг и имена правил чтобы jq и скрипты не зависели от порядка ключей в следующей версии dependency-cruiser.
- Всегда пишите отчёт командой вида
npx depcruise src --config .dependency-cruiser.js --output-type json --output artifacts/depcruise/graph.jsonна локалке CI и на удалённом Mac одинаково. - Извлеките из json число циклов максимальную длину цепочки и счётчик модулей сравните с таблицей уровней и определите итоговый код выхода.
- Сформируйте markdown не более трёх циклов в таблице пути усечь до трёх сегментов остальное одной строкой счётчика со ссылкой на артефакт пайплайна.
- Запускайте генерацию сводки только после записи json иначе шлюз получит пустой файл и создаст шум в pull request.
- Отправьте тело через подписанный webhook на OpenClaw с полями путь json номер pull request sha и версия порогов либо через
gh pr commentс тем же телом на раннере с OIDC.
npx depcruise src --config .dependency-cruiser.js --output-type json --output artifacts/depcruise/graph.json04 Шлюз OpenClaw или скрипт как триггер сводки
Шлюз принимает только путь к json и метаданные билда токен провайдера остаётся в процессе шлюза модель если используется видит усечённый текст а не сырой граф. Удобно когда тот же шлюз уже агрегирует ESLint и Stylelint как в отдельной статье про merge.
Скрипт на Node читает файл печатает markdown в stdout дальше оболочка решает создать или обновить комментарий это проще для ночного крона на выделенной машине когда OpenClaw не в пути.
В обоих случаях добавьте Idempotency-Key из пары номер pull request и sha коммита и дебаунс если завершение CI и ручной rerun приходят подряд.
05 Merge с блоком линтеров в одном комментарии
Выберите уникальный маркер например <!-- openclaw-gate-depcruise --> и обновляйте один комментарий upsert API провайдера если секция линтеров уже существует вставьте блок циклов после неё с отдельным подзаголовком чтобы дифф был коротким.
Если шлюз собирает единый markdown из нескольких инструментов фиксируйте порядок секций в конфигурации шлюза и не меняйте его без объявления версии иначе ревьюеры потеряют привычный скан списка.
06 Три цифры для тикета и короткие ответы
- Один файл
artifacts/depcruise/graph.jsonкак единственный вход парсера на шлюзе. - Три цикла максимум в таблице в теле pull request остальное числом и ссылкой на артефакт.
- Шесть шагов HowTo покрывают путь от конфига до merge блока без ручного копирования json в чат.
Пустой json при ненулевом depcruise проверьте права каталога артефактов и флаг --output. Разъезд с локалкой сравните cwd и версию Node. Дубликаты комментариев включите поиск по маркеру перед созданием новой записи.
Контракт пути плюс таблица уровней и лимитов модулей даёт предсказуемый код выхода шлюз OpenClaw или скрипт генерирует короткую сводку merge с линтерами по маркеру закрывает цикл в pull request на том же удалённом Mac что и продовый раннер.
Тарифы помощь и покупка на одном сайте
Перед заказом узла для прогона depcruise и шлюза откройте тарифы помощь покупка и аренда без обязательной авторизации затем настройте тот же сценарий на удалённом Mac.
Оформление доступа к удалённому Mac: сначала тарифы затем покупка или аренда выгоднее держать отдельную машину под тяжёлый depcruise в монорепо чем гонять тот же сценарий на ноутбуке тимлида.