Для кого: команды, которые начиная с OpenClaw 2026.3.x вешают openclaw config validate на общий удалённый Mac и хотят одинаково ловить invalid-key, уважать окно горячей перезагрузки шлюза и складывать контрольные tarball в артефакты. Связанные материалы: навыки и откат, Model Auth, Argo CD webhook. Страницы цены, покупка, помощь открываются без входа.

Три узких места до ворот CI

  • Несогласованный Node: демон шлюза и job CI должны видеть одинаковую ветку рантайма не ниже 22.12, иначе валидатор и рантайм расходятся по поведению.
  • Частичный hot reload: после смены секций конфигурации память воркера может держать старый снимок, пока вы не выполните документированный reload или короткий рестарт.
  • Артефакты с секретами: tarball с «полным домом» легко утащит ключи в публичное хранилище артефактов; политика исключений обязательна.

Матрица: validate, doctor и рестарт шлюза

Короткая таблица помогает не смешивать задачи: статический разбор схемы, живое состояние процесса и операционный сброс после изменений маршрутов или токенов. На общих раннерах полезно явно разделить job «только validate» и job «интеграционный прогон шлюза», чтобы длинные перезапуски не блокировали быстрые проверки схемы в очереди merge.

Задача config validate doctor / рестарт
Неизвестные ключи Ловит несогласованные поля до merge, удобно как красный светофор. Не заменяет validate; лишь подтверждает среду и версию пакета.
invalid-key в логе Часто даёт путь вида a.b.c или файл и строку — стартуйте отсюда. Сверяйте launchd и интерактивную оболочку, если путь верный, а значение «пустое».
После правки gateway Повторите validate дважды: до и после reload, зафиксируйте оба лога. Короткий рестарт снимает залипание старых обработчиков на длинных вебхуках.

Чеклист предпосылок

  • Версия линии: зафиксируйте пакет openclaw@2026.3.x в lockfile пайплайна или явном npm install -g с тегом.
  • Node 22.12+: первой строкой job выведите node -v и нормализованный тест мажор-минор как ниже в командах.
  • Пользователь: тот же UID, что у launchd шлюза, иначе пути к данным разъедутся с CI.
  • Переменные: вынесите нестандартные каталоги в именованные переменные и документируйте их в README ветки.
  • Политика секретов: запретите включение *.pem, *.key и сырого export в артефакты.

Пошаговые команды

Выполняйте сверху вниз в одном неинтерактивном шаге; сохраняйте единый файл лога для последующего grep и для прикрепления к тикету.

1
Жёсткий предел Node

Ниже порога завершайте job кодом ошибки, чтобы не тратить минуты на заведомо несовместимый CLI.

node -v
node -e "const [a,b]=process.versions.node.split('.').map(Number);process.exit(a>22||a===22&&b>=12?0:1)"
2
Контрольная точка до правок

Снимок каталога настроек без секретных файлов — основа воспроизводимого отката.

tar -czf openclaw-checkpoint-pre.tar.gz \
  --exclude='*.pem' --exclude='*.key' \
  "${OPENCLAW_CONFIG_DIR:-$HOME/.openclaw}" 2>/dev/null || true
3
Validate, doctor, поиск подписи

Сохраните stdout и stderr; по провалу извлеките строки с ключевыми словами.

openclaw config validate 2>&1 | tee openclaw-ci.log
openclaw doctor 2>&1 | tee -a openclaw-ci.log
grep -Ei 'invalid[-_]?key|unknown.?key|schema' openclaw-ci.log || true
4
Горячая перезагрузка шлюза

После изменения маршрутов или токенов выполните официальную процедуру reload, затем обязательно второй проход openclaw config validate и сравните diff логов.

5
Публикация артефактов

Загрузите tarball, openclaw-ci.log и однострочный checksums.txt; в публичных аннотациях оставляйте только маскированные имена переменных.

Типичные сигнатуры ошибок и разбор

invalid-key / unknown key в JSON-пути

Сопоставьте путь с фактическим файлом и версией схемы 2026.3.x; удалите устаревшие поля из шаблонов старше линии релиза и прогоните validate локально на том же архиве.

validate зелёный, но вызов модели отвечает 401

Часто перепутаны ключ шлюза и ключ провайдера модели; вернитесь к разделу Model Auth и проверьте, что CI не подставляет заглушку из кеша переменных.

Дрейф сразу после reload

Если лог чередует старые и новые значения одного параметра, сделайте короткий рестарт демона и зафиксируйте uptime до повторной проверки.

Связка с артефактами CI

Привяжите tarball к номеру merge request и к хешу коммита; задайте TTL артефактов и отдельный «зелёный» шаблон для ветки релиза. На провал ворот прикладывайте не только лог, но и последний успешный tarball, чтобы откат был копированием, а не угадыванием. Для соседних тем по таймаутам исходящих вызовов смотрите матрицу GHCR — те же лестницы backoff 2/4/8 с уместны для повторных validate при нестабильном реестре npm. В GitHub Actions используйте отдельный шаг upload-artifact с if: always(), в GitLab — artifacts:when: on_failure рядом с дублирующим успехом, чтобы аудитор видел симметричную пару файлов.

Итоговый чеклист перед merge

  • В логе есть доказательство Node 22.12+ и закреплённой версии 2026.3.x.
  • Два файла validate: до и после любого reload шлюза на той же машине.
  • grep по invalid-key выполнен; пути заведены в задачу трекера со ссылкой на строку.
  • Артефакты проверены глазами: нет PEM, нет сырого токена, есть только маски.
  • Есть ссылка на соседний runbook по откату навыков или Model Auth для эскалации.

Краткий итог

Сочетайте openclaw config validate как жёсткое CI-ворото, openclaw doctor как здравый смысл среды и дисциплину двойной проверки после горячей перезагрузки. Контрольные tarball и маскированные логи превращают расследование invalid-key из ночной охоты в воспроизводимый SOP.

Выделенный Apple Silicon для ворот и шлюза — цены, покупка, помощь; каталог статей — блог (чтение без входа).

Закрепите удалённый Mac под CI-ворота OpenClaw

Выберите узел с предсказуемым диском и политикой перезапуска демона; страницы тарифов, покупки и помощи открываются без авторизации.