2026 OPENCLAW
FALLBACK_
CONFIG_
DRIFT.
Primary + fallback держит аптайм, пока успешный fallback не запишет runtime-модель в openclaw.json и заявленный primary не вернётся. Здесь — дрейф диска / дрейф сессии / разветвление парсинга провайдера, пять шагов (остановить Gateway → бэкап-тройка → восстановить intent → почистить маппинги → поэтапный рестарт) и замечания для launchd на удалённом Mac. Ссылки: 429, sessions, token.
1. Разбор боли
Запись runtime в статический agents без охраны, расхождение qualified ID, старый sessions.json, расхождение SSH и plist.
Особенно коварно, что метрики доступности остаются зелёными: вебхуки дают 200, каналы доставляют — а метки соответствия или разнесение затрат тихо плывут. Без хеша agents.list[].model на дашборде причину спишут на «нестабильного провайдера», а долговременные фиксы откладываются. В нескольких часовых поясах ночной jq-фикс к утру может превратиться в двойную правду из-за launchd.
Поэтому runbook рассматривает тройной бэкап, структурированный diff, чистку маппингов и поэтапный рестарт как один пакет. Чем чаще fallback становится рутиной, тем жёстче нужно фиксировать «разрешена ли запись» в код-ревью и фичефлагах.
2. Матрица симптомов
| Сигнал | Причина | Не делать |
|---|---|---|
| primary как backup | запись fallback | revert без prune |
| один канал неверен | runtime provider в сессии | слепая переустановка |
| doctor конфликт | JSON vs session | бесконечный npm |
| только удалённо | старый env plist | пол-плиста |
3. Пять шагов
Step 1 Остановить Gateway
systemd/launchctl, закрыть WS.
Step 2 Бэкап тройки
openclaw.json, sessions.json, jsonl.
Step 3 Восстановить intent
agents.list[].model, defaults.primary, fallbacks.
Step 4 Чистка маппингов
Удалить неодобренные ключи, логировать.
Step 5 Поэтапный рестарт
doctor→Gateway→три пробы.
4. Матрица решений
| Триггер | Первично | Запасной |
|---|---|---|
| Жив, но модель неверна | allowlist+JSON | wipe sessions |
| Несколько персон | заморозить по персоне | глобальный override |
| launchd старый env | WorkingDirectory | adhoc export |
5. Полевая заметка и аудит
«Ночь спасли — через две недели аудит: primaries на малом моделе.»
Мульти-провайдерный failover спас доступность, но рантайм сессии перезаписал agents.list[0].model на малую модель; после возврата primary резолвер застыл на «последней успешной модели». Бэкап→правка JSON→чистка маппингов sessions→рестарт Gateway; в шаблон MR — запрет тихой персистенции от fallback; однотипные тикеты ушли в ноль.
В аудите серьёзность отнесли к целостности конфигурации (не падение канала, а риск меток и контрактов). С тех пор — ежедневный хеш блока models во внутренней отчётности; diff без номера CR уходит на вторичное ревью автоматически.
6. Управление и наблюдаемость
Диффы JSON проходят тот же контур согласования, что и Terraform. Каждый успешный тур пишет qualified model (с namespace) структурированно; SIEM тревожит, если меняется agents.list без CR. Один свободный текст через три недели остановит разбор инцидента.
launchd на удалённом Mac стабилизирует тепло и питание, но временный export по SSH кажется истиной. Дежурство: «env из launchctl → путь openclaw doctor → минимальное сообщение с отпечатком модели». Gateway живёт и на Windows/Linux; чтобы переиспользовать macOS-скрипты, шаблоны на узле MACGPU Apple Silicon проясняют границы ответственности.
7. Ворота провайдера и ограниченных путей
Голые алиасы в agents.list[].model неявно цепляются к провайдеру по умолчанию. После одного успеха в формате vendor/model следующий цикл может дать то же имя, другой маршрут. В CI — jq-проверки: provider+model обязательны в шаблонах.
Telegram, Web UI и Cron рядом: матрицей проверить, что persona-override не ссылается на старые указатели сессий. «Только один канал верен» — почти всегда раскол сессий. plist обновили, а env процесса старая? Не заканчивать только SSH — добавить launchctl bootstrap или перезагрузку LaunchAgent в runbook.
8. Пороги (вставить в заявку на изменение)
① Минимум по три раунда проб до/после починки + отпечаток логов. ② При смене провайдера — метка времени и HTTP в тикет. ③ Больше двух расхождений «диск vs намерение» в неделю — заморозить изменения топологии fallback до код-аудита. ④ Любая работа с каталогом sessions — бэкап с sha256.
FinOps: свести почасовые токен-затраты до/после и рядом — долю ошибок меток из структурированных логов; так проще объяснить побочные эффекты персистентного fallback руководству.
9. FAQ
Только sessions? JSON может быть кривым.Docker? согласовать HOME тома и контейнера.Сначала апгрейд? сначала починка и маппинги.Несколько редакторов? блокировка или окно изменений; конфликт — приоритет блоков намерения в Git.Выключить fallback? лучше сузить допустимое множество моделей.Канарейка? разделить персоны, дублировать блоки agents.list, разнести CR.