textmachine/docs/archive/prompts/BACKEND_SESSION_PROMPT_CONSOLIDATION.md

47 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Промт: бэкенд-сессия — консолидация конфига (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-цепочка или явный интерим.
- Отчёт оркестратору на внешнее ревью (как обычно).