HowTo · OpenClaw · Linear · мультиузел

2026 OpenClaw MeshMac на практике: Linear webhook — трансляция статуса общей сборки и краткая сводка обратно в задачу (минимальные шаги)

10 апреля 2026 г. Команда Meshmac 9 минут чтения

Командам с пулом удалённых Mac нужен единый контур: событие из Linear не должно привязываться к «тому самому» физическому узлу. Ниже — воспроизводимая схема на 2026 год: один шлюз OpenClaw принимает webhook Linear, проверяет подпись по сырому телу, кладёт нормализованную задачу в общую очередь, чтобы сборку взял любой свободный MeshMac-узел, затем шлюз рассылает статус в чат (Slack, Google Chat, Teams — по вашему шаблону) и при необходимости пишет короткую сводку комментарием через GraphQL Linear. В конце — матрица «шлюз vs узел», политика повторов и FAQ.

Три ограничения, если webhook смотрит сразу на сборщик

  1. Ротация секретов. Каждый новый Mac в пуле не должен требовать новой записи в Linear и нового signing secret.
  2. Аудит и HMAC. Проверка подписи и лимиты входа проще стандартизировать на одном процессе, чем копировать на N runner’ов.
  3. Исходящие вызовы. GraphQL Linear и URL чатов держите на шлюзе с узким egress; узлы остаются «тупыми» исполнителями с Xcode и общим томом артефактов.

Общая картина мультиузла — в руководстве по мультиузловому развёртыванию MeshMac и в шаблоне webhook для общей сборки.

Установка шлюза и проверка работоспособности

Только шлюз должен принимать POST от Linear. Узлы подключаются и отключаются без смены URL в настройках workspace.

  1. Шаг 1. Установите OpenClaw на выделенном Mac-шлюзе, задайте OPENCLAW_CONFIG_ROOT, запустите агент под LaunchDaemon (или аналогом), чтобы процесс переживал перезагрузки, пока пул обновляет Xcode.
  2. Шаг 2. Опубликуйте https://… на стабильном имени хоста шлюза — именно его вставьте в Linear. Вынесите путь webhook в отдельный location reverse-proxy с разумным client_max_body_size; край и TLS согласуйте с матрицей Nginx vs Caddy.
  3. Шаг 3. Подтвердите готовность: openclaw doctor, журналы старта, GET /health или составной probe из материала про prewarm и health-check навыков, чтобы балансировщик снимал нездоровые инстансы при выкатке.
  4. Шаг 4. Логируйте correlation_id, маршрут и задержку до ack очереди; лимиты одновременных webhook’ов сверьте с FAQ по rate limit и сессиям на шлюзе. Дополнительные сценарии — в хабе OpenClaw в блоге.

Проверка подписи Linear

Сначала проверка, потом разбор JSON. Linear подписывает точное сырое тело; ранний json_decode ломает HMAC под нагрузкой.

  1. Шаг 1. Создайте webhook в Linear, один раз скопируйте signing secret, сохраните в файл с правами 0440 по гайду секреты и минимальные права на узлах, например /etc/openclaw/secrets.d/linear/webhook.secret.
  2. Шаг 2. Буферизуйте байты тела, вычислите HMAC-SHA256 согласно документации Linear, сравните заголовок Linear-Signature в постоянном времени; при наличии окна времени отсекайте устаревшие доставки.
  3. Шаг 3. На неверной подписи отвечайте 401; в лог пишите только обезличенные поля (та же гигиена, что в статье про Teams и статус сборки).
  4. Шаг 4. 200 OK отдавайте только после долговременной записи задачи в очередь, иначе повторы Linear размножат джобы; порядок и синхронизацию очереди см. единый деплой и синхронизацию очереди.

Сцепление со скриптами общей сборки

После проверки превратите payload в одну запись задачи, которую может исполнить любой узел: репозиторий, ref, issueId, команда, актор, метки, плюс idempotency_key из метаданных доставки Linear. Узел A занят — узел B выполняет тот же entrypoint; второй публичный webhook не нужен.

  1. Шаг 1. Явно перечислите переходы колонок или метки (например ci), при которых ставится сборка; для прочих событий быстро возвращайте 200 без побочных эффектов.
  2. Шаг 2. Поместите задачу в общую очередь (Redis, RabbitMQ, планировщик OpenClaw — см. очередь и повторы) с полями linear_issue_id, команда, инициатор и ключ идемпотентности.
  3. Шаг 3. На всех Mac запускайте один зафиксированный по версии entrypoint: блокировка версии skill и шаблон окружения; при конкуренции за lockfile используйте матрицу worktree и lockfile.
  4. Шаг 4. По завершении публикуйте событие «сборка завершена» с mesh_node_id, длительностью, коротким фрагментом лога и ссылкой на артефакты. Шлюз транслирует в чат через уже принятые хуки: Slack, Google Chat, Teams.
  5. Шаг 5. Краткую сводку в задачу Linear отправляйте с шлюза через GraphQL (узкий API-ключ; ротация — алерты и ротация токенов): эмодзи статуса, SHA, узел, ссылка на прогон, две строки текста от OpenClaw.

Если Linear параллельно дергает GitHub Actions, разведите дорожки через маршрутизацию runner и очередей, чтобы очереди не боролись за диск.

Сбои: повторы и уведомления

В мультиузловом пуле растёт число транзиентных отказов; держите одну историю уведомлений. Разделите входящий контур (Linear → вы) и исходящий (вы → чат и API Linear).

  1. Шаг 1. Быстро подтверждайте приём после записи в очередь; пусть Linear повторяет свой край при сетевых сбоях. Таймауты обработчика уложите в бюджет параллелизма шлюза.
  2. Шаг 2. Для webhook’ов чатов применяйте exponential backoff с полным джиттером на 429 и 5xx, ограничьте число попыток, дедуплицируйте по idempotency_key + состояние на окно порядка 72 часов — в духе раздела про Teams в указанной выше статье.
  3. Шаг 3. Для GraphQL Linear логируйте массив errors, на rate limit откатывайтесь по backoff; на 401 не крутите цикл — сначала исправьте ключ и scope.
  4. Шаг 4. Если и чат, и комментарий в Linear недоступны, эскалируйте через IM по runbook из материала про алерты; отказоустойчивость шлюза планируйте с балансировкой и failover.

Матрица: куда ставить webhook в mesh

Вариант Плюсы для пула MeshMac Минусы / риск
Один шлюз OpenClaw Один signing secret, единый аудит, Linear не трогают при добавлении 4-го и 5-го Mac Нужен health-check и дренаж за балансировщиком
Webhook на каждом сборщике Кажется «проще» на первом Mac N секретов, расхождение версий обработчика, сложнее idempotency
Прямой вызов скрипта без очереди Минимум компонентов на POC Потеря события при рестарте, нет справедливого распределения по узлам

Цифры и ориентиры для runbook

  • Права на секрет webhook: файл 0440, владелец процесса шлюза — снижает риск утечки при бэкапах репозитория.
  • Окно дедупликации исходящих уведомлений: держите не менее 24–72 ч по паре «ключ идемпотентности + итог», чтобы повторные прогоны CI не забивали канал.
  • Размер тела для edge: заранее задайте лимит тела запроса на location webhook выше типичного JSON Linear, но без избыточного запаса — проще отлавливать аномалии.

FAQ

В curl подпись совпадает, в продакшене — нет
Сравните байты: фреймворк мог перекодировать тело, CDN — пересжать gzip, WAF — убрать заголовок. Снимите эталон с staging, отключите лишние трансформации на edge, проверяйте по захваченным из access-лога образцам (обезличенным).
Двойные сборки при быстром перетаскивании карточки
Добавьте debounce в маппере состояний или требуйте стабильную метку «готово к сборке». Включите в idempotency ключ issue, колонку и короткий временной bucket, чтобы дрожание руки не создавало две записи.
Комментарий в Linear не появляется при зелёной сборке
Проверьте scope ключа на команду, убедитесь, что в GraphQL передаёте тот же issueId, что пришёл в webhook, и прочитайте errors ответа — после обновлений API схема могла сдвинуться.
Действительно ли только один Mac должен звонить в Linear API?
Для секретов и аудита — да. Сборщики остаются взаимозаменяемыми; шлюз владеет проверкой подписи, токенами и URL чатов. Добавление узла — это мощность CPU и диска, а не новый security review в Linear.

Кратко

Итог: шлюзhealth-checkHMAC по сырому телуочередь с idempotencyобщий скрипт на любом MeshMacbroadcast в чат → опционально GraphQL-комментарий с ограниченными повторами. Смежные материалы — в хабе OpenClaw.

MeshMac · Linear · мультиузел

Расширяйте пул Mac — не умножайте webhook’и

Аренда дополнительных узлов MeshMac даёт параллельные сборки без перенастройки Linear: секрет остаётся на шлюзе, очередь честно раздаёт задачи. Откройте страницу тарифов и пакетов (без входа в аккаунт), загляните в центр помощи по SSH и VNC, на главную и в блог — спланируйте ёмкость шлюза и воркеров до оформления заказа.

Linear Mesh HMAC
Тарифы и пакеты