dependency-cruiser · JSON · CI · шлюз OpenClaw · 2026

2026 OpenClaw фронтенд на удалённом Mac:
разбор JSON dependency-cruiser пороги ворот по циклам сводка для pull request и merge с блоком линтеров

30.04.2026 Архитектура фронта · CI · монорепо 9 мин чтения
Slug: 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

  1. Дрейф путей абсолютные корни раннера не совпадают с деревом на ноутбуке ревьюера и с удалённым Mac поэтому без нормализации к относительным сегментам таблица циклов в PR каждый раз новая и спорная.
  2. Длинный stdout если смешать лог сборки и json парсер на шлюзе ломается а повторный запуск на другой фазе даёт расхождение с артефактом который увидел OpenClaw.
  3. Разрозненные комментарии отдельный поток для линтеров отдельный для графа ревьюер закрывает вкладку не понимая можно ли мержить пока не сведёте блоки в одну запись с маркером.

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 до комментария

  1. Закрепите конфиг и имена правил чтобы jq и скрипты не зависели от порядка ключей в следующей версии dependency-cruiser.
  2. Всегда пишите отчёт командой вида npx depcruise src --config .dependency-cruiser.js --output-type json --output artifacts/depcruise/graph.json на локалке CI и на удалённом Mac одинаково.
  3. Извлеките из json число циклов максимальную длину цепочки и счётчик модулей сравните с таблицей уровней и определите итоговый код выхода.
  4. Сформируйте markdown не более трёх циклов в таблице пути усечь до трёх сегментов остальное одной строкой счётчика со ссылкой на артефакт пайплайна.
  5. Запускайте генерацию сводки только после записи json иначе шлюз получит пустой файл и создаст шум в pull request.
  6. Отправьте тело через подписанный webhook на OpenClaw с полями путь json номер pull request sha и версия порогов либо через gh pr comment с тем же телом на раннере с OIDC.
npx depcruise src --config .dependency-cruiser.js --output-type json --output artifacts/depcruise/graph.json

04 Шлюз 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 что и продовый раннер.

Открытые страницы: главная помощь тарифы блог.

macwww.com · публичные страницы без входа

Тарифы помощь и покупка на одном сайте

Перед заказом узла для прогона depcruise и шлюза откройте тарифы помощь покупка и аренда без обязательной авторизации затем настройте тот же сценарий на удалённом Mac.

Граф и пороги Один комментарий Без сырого json в чате

Оформление доступа к удалённому Mac: сначала тарифы затем покупка или аренда выгоднее держать отдельную машину под тяжёлый depcruise в монорепо чем гонять тот же сценарий на ноутбуке тимлида.

Mac под depcruise и OpenClaw