# Промт: бэкенд-сессия — консолидация конфига (drift из doc-аудита, 2026-07-05) Ты — бэкенд-сессия TextMachine, зона `backend/`. Оркестратор прогнал read-only аудит доков↔кода и причесал доки; ниже — 4 конфиг-расхождения твоей зоны + фикс капабилити + подтверждение пробы. Каждый пункт с указателем (сверь по своему коду — номера строк из аудита, могли сместиться). **НЕ читай `.env`.** Источник истины по решениям — `architecture/05-decisions-log.md`. ## ⚠ ГЛАВНОЕ — переворот находки аудита: grok-4.3 reasoning ОТКЛЮЧАЕТСЯ Аудит (и exp08) считали, что grok-4.3 форсит reasoning и надо менять слаг на `grok-4.20-0309-non-reasoning`. **Это НЕВЕРНО** — перепроверено по xAI docs (`docs.x.ai/developers/model-capabilities/text/reasoning`, 05.07): - grok-4.3 принимает `reasoning_effort` ∈ {none, low, medium, high}; **`none` = 0 thinking-токенов**. - **Дефолт = `low`.** Не послал параметр явно → grok думает (вот почему exp08's «off by omission» не сработал). - Chat Completions: плоский `reasoning_effort:"none"`. Responses API: вложенный `reasoning.effort:"none"`. exp08 слал `reasoning_effort:low` (не off) и вложенный `extra_body.reasoning.effort:none` (форма Responses-API) → на Chat Completions off-switch не отправлялся ни разу. - `grok-4.20-0309-non-reasoning` под капотом = grok-4.3 + `effort:none` (мигрированные слаги, ретайр 15.05.2026). **Вывод: слаг НЕ менять. Редактор = grok-4.3, слать `reasoning_effort:"none"` ЯВНО.** ## Задачи ### 1. capability.go — `ReasoningNone` конфлейтит два ПРОТИВОПОЛОЖНЫХ поведения (F2) `backend/internal/llm/capability.go` (~:52-56) трактует `control=none` как «off by omission (DeepSeek / xAI-Grok)» — это неверно объединяет два провайдера, которым нужна ОБРАТНАЯ обработка: - **DeepSeek: omission НАМЕРЕННЫЙ — держит thinking ON (дефолт DeepSeek = ON).** У DeepSeek-flash thinking ОБЯЗАН оставаться ON, иначе он эхает исходник (`echoMineViolation` — та самая мина, ради которой строилась Веха 2.5). Пропуск параметра ≠ «дефолт off». **НЕ добавлять DeepSeek явное отключение thinking.** - **grok: omission даёт `low` (thinking ON), а редактору нужен OFF** → grok должен ЭМИТИТЬ явный `reasoning_effort:"none"`. Развести: DeepSeek → keep-default (параметр не слать, thinking остаётся ON); grok → explicit-none (слать `reasoning_effort:none`). Единый `ReasoningNone`=«off by omission» на оба — источник будущей ошибки (сессия «правильно» отключит DeepSeek-thinking и взведёт эхо-мину). ### 2. models.yaml grok-4.3 (F2) `backend/configs/models.yaml` (~:110 заметка «0 reasoning-токенов», ~:113 `reasoning.control: none`). `control:none` = off-by-omission → на деле low. Поставить режим, шлющий explicit `reasoning_effort:none`; заметку уточнить: «reasoning=0 ТОЛЬКО при явном `reasoning_effort:none`; дефолт grok = low». Reasoning у xAI аддитивен (`reasoning: additive`): при none → 0; при on → billed = completion+reasoning. ### 3. Редактор всё ещё glm-5 (F3) Переключить **только edit-стадию** на **grok-4.3** с `reasoning_effort:none` (ратифицированный дефолт D1/D3). Цели: `pipeline-c1.yaml` (~:44, edit) и edit-стадия `pipeline-c2.yaml`. **НЕ трогать `pipeline-c2.yaml:34` — это стадия `select`** (Gemini-слот Фазы 2), не редактор. Прим.: `glm-5` в конфиге — **плейсхолдер** (exp04 мерил glm-4.6, не glm-5); дефолт grok обоснован рейтингом exp04, а не «glm-5 слаб». Свитч гейтится **чистым xAI-ключом без data-sharing** (реальные книги через промо-аккаунт нельзя). `models.yaml:116-117` признаёт отложенное переключение — закрыть. ### 4. Anthropic price-litter (F5) `backend/configs/models.yaml` (~:7) — в шапке price-source ещё строка Anthropic pricing URL, хотя провайдер удалён (`:119-120`). Убрать. ### 5. Escalation-заглушки (F10) `pipeline-c1.yaml` (~:68-69) / `pipeline-c2.yaml` (~:61-62) — цепочки `[kimi-k2.6]`-заглушки. Ратифицированная D3-цепочка: **канал A** — DeepSeek V4 Pro → GLM-5.1 → Gemini 3.1 Pro; **канал B** — Grok 4.3. В `models.yaml` НЕ заведены провайдеры `gemini`/`openai` и модели `deepseek-v4-pro`/`glm-5.1`/`gemini-3.1-pro`. Либо завести их (провайдер+модель+цена+capability: Gemini mandatory-thinking `thinking_budget:0`→400 / `max_tokens` по `00-provider-quirks.md` (≥8000 для Gemini 3.1 Pro; НЕ спутать с Kimi ≥16000); `deepseek-v4-pro` подтверждён живьём $0.435/$0.87) и подставить D3-цепочку, **либо явно пометить `[kimi-k2.6]` интеримом** (чтобы заглушку не приняли за контракт). Слаги/квирки — provider-wiring память + `experiments/00-provider-quirks.md`. ### 6. PROGRESS [НУЖНО РЕШЕНИЕ]-маркеры (F18) Оба заголовка `[НУЖНО РЕШЕНИЕ]` в `docs/PROGRESS.md` отвечены и ратифицированы (05-decisions-log D1–D7), но не помечены RESOLVED → grep читает как открытые. Пометь «РЕШЕНО → <ссылка на ответ>». Нюансы: (а) фраза «НУЖНО РЕШЕНИЕ» есть не только в заголовках, но и в строках-ответах/back-ref'ах — помечай именно заголовки-вопросы, не полагайся на один grep; (б) один из двух заголовков — **оркестраторский блок, вложенный в §Бэкенд** (владение спорное) → его оставь оркестратору, тронь только чисто-бэкендовый. (Строки сдвинулись после вставки CURRENT-STATE — ищи по фразе, не по номеру.) ## Проба (НЕ гейт) Eval УЖЕ переснял (05.07): на grok-4.3 / Chat Completions плоский `reasoning_effort:"none"` → `usage.reasoning_tokens=0` ✅ (дефолт→444, `low`→384, вложенный `extra_body.reasoning.effort` молча проглочен). Рабочая форма записана в `00-provider-quirks.md`. Ты — подтверди то же в своём адаптере при wiring + additive-биллинг. **Это НЕ гейт**: контракт уже известен из xAI docs, задачи 1–2 делать не дожидаясь пробы. ## Приёмка - grep «reasoning=0» больше не врёт: редактор grok-4.3 шлёт explicit `none`, проба показывает 0 reasoning-токенов. - edit-стадия = grok-4.3, не glm-5. - `models.yaml` без anthropic-строки; escalation = D3-цепочка или явный интерим. - Отчёт оркестратору на внешнее ревью (как обычно).