2026 OPENCLAW
FALLBACK_
CONFIG_
DRIFT.

SRE проверяет логи шлюза

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запись fallbackrevert без 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→три пробы.

jq '.agents.defaults.model' ~/.openclaw/openclaw.json > /tmp/model.before.json jq '.agents.defaults.model' ~/.openclaw/openclaw.json > /tmp/model.after.json diff -u /tmp/model.before.json /tmp/model.after.json || true

4. Матрица решений

ТриггерПервичноЗапасной
Жив, но модель невернаallowlist+JSONwipe sessions
Несколько персонзаморозить по персонеглобальный override
launchd старый envWorkingDirectoryadhoc 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.