# Промт: бэкенд-сессия, мини-пакет №5 — фиксы приёмки этапа A (D24), 2026-07-11

---

## Кто ты и что делаешь

Ты — **бэкенд-сессия** TextMachine, мини-пакет №5. Зона записи: `backend/` (+ своя секция в `docs/PROGRESS.md` → «## Бэкенд»). **Ничего не коммитить** — лендинг у оркестратора после внешнего ревью. Пакет маленький и целевой: две ратифицированные смены поведения из приёмки этапа A (D24.3–24.4) + два теста-оговорки вердикта (D24.1) + микро-хвосты D23.4. **Пакет гейтит этап B приёмки** — не расползаться.

## Онбординг (~30 мин)

1. `CLAUDE.md` → CURRENT-STATE в `docs/PROGRESS.md` → отчёт «## Приёмка Ф1 … этап A» там же (особенно «Находки для оркестратора»).
2. `docs/architecture/05-decisions-log.md`: **D24 целиком** (твой мандат), D23.1 (процедура golden), D22.9/D23.4 (микро-хвосты).
3. `backend/README.md` (инварианты 1–8) + `docs/experiments/00-provider-quirks.md` (флоры thinking-моделей: строки DeepSeek/Gemini/Kimi).

## Задачи (по приоритету)

### 1. Per-model floor `min_max_tokens` (D24.3) — смена wire-поведения

- Поле в `models.yaml` **capabilities** (схема, не комментарий): `min_max_tokens: <int>`. Значения: `deepseek-v4-flash: 8000`, `deepseek-v4-pro: 8000`, `gemini-3.1-pro-preview: 8000`, `kimi-k2.6: 16000`. glm-5/5.1 и grok-4.3 — БЕЗ поля (reasoning off/none).
- Применение: при деривации max_tokens **любого** вызова модели — праймари-аттемпты (`stagerun.go:89-92`) И эскалационные хопы (`maybeEscalate` наследует бюджет праймари — ровно это сломало эскалацию на этапе A: хопы deepseek-v4-pro при 2048/3291 вернули finish=length, один — 0 байт контента). Флор берётся по МОДЕЛИ вызова (у хопа — модель хопа, не праймари), применяется ДО request_hash — wire-видимо.
- Существующие комментарии-заглушки «дать max_tokens ≥8000/16000» в models.yaml привести к новому полю (комментарий → схема).
- Санити: резервация EstimateUSD вырастет на флорнутых вызовах (≤$0.10/вызов) — убедись, что тесты потолков это переживают; committed не меняется (биллинг по факту).

### 2. Post-check `dstFormPresent`: базовый dst всегда проверяется (D24.4) — смена вердиктов

- `mempostcheck.go:85-96`: множество проверяемых форм = `declForms ∪ normalizeTargetForm(dst)` ВСЕГДА (сейчас фолбэк на базу только при пустом decl). Закрывает 37/55 ложных промахов этапа A (класс: «Фан Юань» в выходе, decl только косвенные).
- Тест на репро-кейс этапа A: entry с непустым oblique-only decl + именительный в выходе → промаха НЕТ; и негатив: dst и все формы отсутствуют → промах ЕСТЬ (mutation-verified: реверт фикса валит тест).

### 3. Golden re-capture — ратифицированная смена поведения (D23.1, инвариант №8)

- `TM_UPDATE_GOLDEN=1` вручную; в журнал пакета — дифф-класс golden: изменения ДОЛЖНЫ исчерпываться (а) `max_tokens` в wire-телах/request_hash флорнутых моделей, (б) postcheck-вердиктами (confirmed-miss набор). Любой другой класс диффа = стоп и пинг оркестратору.
- Заодно D23.4: ячейка AMBIGUOUS>0 в фикстуру ИЛИ смягчение коммента `golden_test.go:32` — реши и сделай.

### 4. Тесты-оговорки вердикта этапа A (D24.1)

- **Coverage-recall (D24.1б):** синтетический мини-набор искусственных пропусков (вырезание предложений/абзацев из эталонных чанков) → coverage-гейт ловит **≥90%** (критерий 4 приёмки, первая половина). Юнит/интеграционный, без wire. Зафиксируй в тесте и recall-число.
- **Отказ эскалации по budget_usd (D24.1г):** исчерпанный `escalation.budget_usd` → хоп НЕ стреляет, диспозиция честная (флаг остаётся), деньги не тратятся. Mutation-verified.

### 5. Микро-хвосты D23.4 (попутно, не разрастаться)

- Тест errTail на границу руны (реверт фикса сейчас выживает сьют); лог-ассерты retryLoop (retry_in / отсутствие «will retry» на последней попытке) через slog-capture. Опционально: компонент-тест snapshotID-payload; kill9 rounds 3→5.

## Дисциплина

- Промпты/конфиг-семантику НЕ менять сверх D24-мандата; никаких «заодно» в wire.
- Всё mutation-verified где применимо; `go build ./... && go vet ./... && go test -race ./...` чисто.
- `git status` перед стартом: чужие незакоммиченные правки — стоп и пинг. `.env` не читать. Книга/производные вне git.
- Отчёт: секция в `docs/PROGRESS.md` «Бэкенд» — что сделано, дифф-класс golden, числа тестов, вопросы. Не коммитить.
