---
name: avtero-harness-cosmetic-brackets-and-omniroute-uuid
description: "Автеро — [[OEM]] в выводе e2e_harness это подсветка самого харнесса, не прод-баг; настоящая причина 'ничего не нашёл' была в коллизии provider-node prefix OmniRoute для mistral, починено стабильным алиасом avteromistral"
metadata: 
  node_type: memory
  type: project
  originSessionId: 4eea915e-3b47-4cd5-8a0e-bfa29b78a87c
  modified: 2026-08-03T18:29:34.605Z
---

**Грабля диагностики.** `bot/tests/e2e_harness.py`'s `_hl_oem()` (строки ~255-256)
оборачивает найденные OEM-подстроки в `[[...]]` ТОЛЬКО для консольной печати
(`_print_step`) — чтобы номер было легко заметить глазами в терминале.
Реальный `rec["text"]`, который харнесс шлёт как ответ бота, скобок не
содержит — их никогда не видел ни один живой пользователь Telegram.

Потратил заметный кусок сессии (2026-08-03), приняв это за реальный баг:
"OEM приходит пользователю как `[[96475855]]`" — написал сложный фикс
(`_sanitize_oem_token` снимает обёрточные скобки + добавил GM concern-group
в `_OEM_FORMATS_MAKE`), протестировал юнит-тестами, задеплоил. Фикс
безвредный и разумный (защита от РЕАЛЬНОГО будущего случая, если LLM
когда-нибудь и правда обернёт номер), но чинил не то, что было нужно.
**Правило на будущее:** если баг виден только в распечатке диагностического
харнесса — прежде чем чинить прод-код, проверить, не добавляет ли сам
харнесс форматирование/подсветку для читаемости (`grep` харнесс на предмет
regex-подстановок в вывод перед печатью).

**Настоящая причина «Chevrolet Nexia 2020 — ничего не нашёл».** OmniRoute
сменил connection-префикс для mistral с короткого `mistral/` на UUID-based
`openai-compatible-chat-19f61b01-b9dd-4d43-8148-eb735da7bc07/` — старые
алиасы в avtero `.env` `PROVIDER_CHAT_FALLBACK` 404-ли на каждом вызове.
Юзер попросил быстро убрать оба mistral-входа — стало ХУЖЕ: оставшиеся два
`cerebras/*` входа физически не тянут реальный system prompt Автеро —
`cerebras/zai-glm-4.7` режет контекст на 8192 токенах (реальный запрос
16927), `cerebras/gpt-oss-120b` не падает, но не укладывается в 60с на
тяжёлом запросе (`ReadTimeout` ровно на границе таймаута, при коротком
промпте отвечает за 13.58с). Правильный фикс — не удалить mistral, а
поправить его путь на актуальный UUID-based. После фикса: тот же промпт
через mistral — 1.97с вместо 60с-таймаута.

**ДОПОЛНЕНО (2026-08-03, тот же день): стабильный алиас заведён, корень был
глубже.** Реальная причина 404 на короткий `mistral/…` — НЕ дрейф UUID сам
по себе, а **коллизия provider-node prefix**: в OmniRoute этого mac mini три
разных Mistral-пула (202 ключа / 15 / наши 163, все легитимно юзера — см.
[[harvested_free_key_repos_refuse]]) претендуют на один и тот же
`prefix:"mistral"`. Роутер при коллизии резолвит только по сырому node-id,
игнорируя prefix для узла, чей prefix занят другим. **Полный рестарт
сервиса OmniRoute коллизию НЕ лечит** (проверено) — она в данных нод, не в
рантайм-кэше. Фикс: через дашборд-API (:20129, manage-cookie)
`PUT /api/provider-nodes/<id>` переименовал prefix НАШЕЙ ноды на уникальный
`avteromistral` — короткий алиас сразу заработал (200). Автеро переведён на
`gateway:avteromistral/mistral-{medium,small}-latest`, живой e2e подтверждён.
Алиас теперь стабилен: привязан к node (не к connection/ключу), переживёт
ротацию любого из 163 ключей — сломается только если кто-то ещё раз
переименует prefix узла в коллизионное имя.

**Правило на будущее (2 части):** (1) при коллизии provider-node prefix в
OmniRoute (несколько узлов с одинаковым `prefix`) — роутинг молча падает на
raw node-id для непобедившего узла; чинится переименованием `prefix` через
`PUT /api/provider-nodes/<id>` (нужен ПОЛНЫЙ объект узла, PATCH не
поддерживается) — рестарт сервиса НЕ помогает, только явное переименование.
(2) Диагностировать HTTP-ошибки честно: `llm.py` логировало тело ответа
только для 429/403/502/503 — для 400 (и других кодов) тело терялось,
`context_length_exceeded` пришлось откапывать через временный monkeypatch.
Стоит logировать тело ЛЮБОЙ non-2xx ошибки (не только текущий список кодов)
— не сделано в этой сессии, оставлено на будущее (не хотел трогать код сверх
запрошенного).

Полный разбор — `Projects/Автеро/Changelog.md`, запись «ДОПОЛНЕНИЕ:
скобки... — артефакт харнесса».

Связано: [[avtero_stale_mock_and_provenance_retry_gap]] (тот же паттерн
сессии: диагностика вскрывает не то, что искали, но находит что-то
настоящее), [[omniroute_custom_provider]].
