Отказ белого списка моделей OpenClaw и прод-исправление (MacLogin облачный Mac 2026-04-23): остановить тихие регрессии Model not allowed на шлюзах HK, JP, KR, SG и US
Когда логи OpenClaw сжимаются до короткого Model not allowed, команды чаще винят провайдера. На арендованных шлюзах Apple Silicon в апреле 2026 чаще виноват дрейф белого списка: agents.defaults.models перестаёт пересекаться с ID каталога после минорного обновления. Статья даёт матрицу политика vs каталог, ключи JSON5, семишаговый раскат с откатом, curl-пробы против ложноположительных «зелёных» и FAQ по регионам MacLogin.
Опирайтесь на диагностику doctor, сравнение скрипта установки и npm global и дисциплину прод cutover и health-check. Лимиты — вместе с бэкоффом провайдера. Хаб: индекс тем OpenClaw. Операции: справка, цены, VNC.
В мультирегионе MacLogin проверяйте белый список в токийском staging, затем поднимайте на универсальный хост автоматизации в Гонконге, читалку SG и Сеул, затем US prod. Без счётчиков отказов и p95 на каждом шаге получится «staging ок, prod молча отклоняет». В тикет обязательно diff JSON doctor и git describe шлюза.
Для регулируемых клиентов храните замаскированные curl и тела health минимум один полный цикл cron, доказывая одинаковый model ID в интерактивной оболочке и в cron. Если launchd и диск расходятся, фиксируйте постоянное решение (например, убрать OPENCLAW_MODEL из plist), а не маскируйте перезапуском.
Почему Model not allowed появляется после «недель без изменений конфигурации»
Upstream может переименовать алиасы маршрутизации, ужесточить дефолтные deny-листы или разделить preview и stable SKU. JSON5 остаётся на коротких legacy ID, а рантайм ждёт квалифицированные строки вендора. Cron-навыки с YAML фиксируют модель и обходят громкое онбординг-фейло.
- Инъекция окружения: plist launchd с
OPENCLAW_MODELперезаписывает JSON5 для одного процесса;doctorзелёный до старта cron. - Частичные merge: в Git подтягивается только
toolsбезagents.defaults— prod строже staging. - Региональные каталоги: списки US и JP с расхождением в минуты дают одинаковые строки, но разные флаги доступности — JP отказывает.
Матрица дрейфа политики и каталога
| Сигнал | Политика | Каталог | Проверка |
|---|---|---|---|
| 401 провайдера | маловероятно | ротация ключа | curl /models |
| Сразу 200 и пустое completion | неизвестный ID | модель снята | grep отклонённого ID в логах |
| Только cron, рывками | в cron нет нового ID | то же | printenv внутри job launchd |
| Только после npm upgrade | ужесточены defaults | peer меняет роутер | openclaw doctor --json diff |
Форма JSON5 и забываемые ключи
agents.defaults.models — явный массив строк: без ломающих парсер висячих запятых и «воскресших» комментариев из cherry-pick. ID провайдера дословно; при -latest и хеше в prod берите хеш, в staging оставьте один алиас для soak.
Комментируйте владельца и дату квартального ревью; дикие карты без пояснений не проходят аудит. После правок — openclaw doctor --fix, затем без --fix.
Семь шагов (канарейка JP → prod US)
- Снимок
~/.openclawпо гайду бэкапа состояния. - Применить diff белого списка на JP staging; синтетика < 5 RPS.
- Doctor дважды; провал, если предупреждений > baseline + 1.
- Промоут HK; мониторить отказы 24 ч.
- Промоут SG/KR read-mostly; смотреть p95.
- Промоут US только после финансового согласия для торговых моделей.
- Откат tarball + перезапуск launchd, если отказы > 15/ч в регионе.
curl после перезапуска (без ложного зелёного)
Бейте локальный health 5 раз с паузой 200 мс; второй вызов может подгрузить плагины, снова включающие белый список. Сохраняйте build-хедеры. TLS на reverse-proxy — добавьте 127.0.0.1:18789.
| Проба | Успех | Провал значит |
|---|---|---|
| GET /health локально | HTTP 200, OK тело | шлюз не поднялся после рестарта |
| Тест completion | текст ассистента не пуст | тихий путь отказа белого списка |
| Cron dry-run | тот же model ID, что вручную | дрейф окружения |
Если прокси срезает X-OpenClaw-Build, сохраняйте git describe в канале инцидента — иначе в среднем 47 минут лишних прогонов doctor из-за сравнения JSON5 с разных semver-линий npm.
FAQ
Временно allow-all? Только в одноразовых клонах; никогда на общих арендах MacLogin с общим layout домашнего каталога.
Регистр важен? Да — ID как чувствительные к регистру непрозрачные строки.
Владелец квартального обзора каталога? платформенная инженерия + подпись ИИ-governance; ростер в runbook со ссылкой из справки.
Почему Mac mini M4 ускоряет циклы проверки
Класс M4 укладывает doctor и перезапуск npm-linked шлюза в < 90 с; удобно прогнать пять метрополий до открытия. Unified Memory держит тёплый tokenizer cache под параллельные curl. Флот HK/JP/KR/SG/US позволяет JP-first доступность без ночных звонков в US.
Добавить канарейки через цены дешевле, чем ловить прод-отказы: держите более строгую реплику белого списка 24/7 и поднимайте JSON5 только после полного цикла cron.
Меняйте белый список OpenClaw на выделенном Apple Silicon
Сопрягите JSON5, прошедший doctor, с узлами MacLogin HK, JP, KR, SG и US.