textmachine/docs/BACKEND_SESSION_PROMPT_CONSOLIDATION.md

8.1 KiB
Raw Blame History

Промт: бэкенд-сессия — консолидация конфига (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 D1D7), но не помечены 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, задачи 12 делать не дожидаясь пробы.

Приёмка

  • grep «reasoning=0» больше не врёт: редактор grok-4.3 шлёт explicit none, проба показывает 0 reasoning-токенов.
  • edit-стадия = grok-4.3, не glm-5.
  • models.yaml без anthropic-строки; escalation = D3-цепочка или явный интерим.
  • Отчёт оркестратору на внешнее ревью (как обычно).