# Промт: бэкенд-сессия — пакет №3: D15.2 v3 + fix-лист D20.4 + заводка цепочки D3 (2026-07-09)

---

## Кто ты и где ты

Ты — **бэкенд-сессия** проекта **TextMachine** (Go-бэкенд издательского перевода ранобэ/вебновелл zh/ja/en→ru мультиагентным LLM-пайплайном). Зона записи — **`backend/`** + твоя запись в `docs/PROGRESS.md` §Бэкенд. `eval/` только читать; `architecture/*`/`research/*` не редактировать — расхождения пингом оркестратору в журнале. Гардрейлы `CLAUDE.md` (автозагружен) жёсткие: **`.env` не читать; коммитить только по просьбе** (оркестратор примет после внешнего ревью); никаких деструктивных git-операций при возможных чужих незакоммиченных правках (параллельно работает полигон-erotica); DeepSeek thinking НЕ отключать (эхо-мина); grok off — только явный `reasoning_effort:"none"`; слаги моделей не менять без live-фактчека.

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

1. `CLAUDE.md` → `docs/README.md` → CURRENT-STATE в `docs/PROGRESS.md`.
2. **`docs/architecture/05-decisions-log.md`**: контракт этого пакета — **D20 (§1 v3-правки спеки + §4 fix-лист + §2 ответы на твои §13-вопросы)**, D3+D19.1 (состав цепочек и канала B), **D21 пп.6/10** (анти-эхо гейтится — промпты в этом пакете НЕ трогать; твои поручения).
3. `backend/README.md` (инварианты — ломать нельзя), **`docs/experiments/00-provider-quirks.md` ЦЕЛИКОМ перед задачей 3** (capability-квирки; строка grok сужена по D19.1 — прочитай именно свежую версию).
4. Твоя спека: `backend/docs/D15.2-content-addressed-resume-spec.md` (v2 — направление ратифицировано D20.1, реализация разблокируется твоими v3-правками).

## Задача 1 — спека D15.2 v3 (разблокирует реализацию; D20.1)

Три правки, обе стороны маленькие, но контрактные:
- **(а) role + имя стадии в guard_hash** — без них формула НЕ суперсет текущей защиты: конструируемый stale-VERDICT fast-path hit при флипе роли; клейм «строго сильнее» пока ложен. Покажи в спеке контрпример и как правка его закрывает.
- **(б) аналитическое правило editor-каскада в dry-run §7:** любая стадия НИЖЕ re-bill-юнита того же чанка считается re-bill (иначе консент-проекция занижает ~2× на самом дорогом классе правок — temp/reasoning/model translator'а).
- **(в) доукомплектовать полевой маппинг §4:** `style_check_version`; слой YoPolicy/StyleAllowlist («dropped: live-recomputed, класс post-check»); memoryNormVersion (target-часть) — и в postcheck-версию; судьба `jobs.snapshot_id` одним предложением; verdict-фолд конфига гейтов только при enabled (дисциплина coverageSnap).

Если спека v3 ляжет рано и останется бюджет сессии — реализацию НЕ начинай без пинга оркестратору (ратификация v3 — его подпись; D20.2-ответы про `--accept-rebill[=usd]` и пер-стадийную гранулярность уже даны — учти их в тексте v3).

## Задача 2 — fix-лист D20.4 (не блокирует приёмку, закрыть в этом пакете)

(а) README `backend/`: «миграции v1–v6» → v7 (устарело в твоём же пакете №2); (б) **cheap-gates v2** — 3 ложных срабатывания адверсариального ревью: «-цитата с начала строки как «смешение стилей»; 万 в составе имени + постороннее число в выводе; перефраз магнитуды + год; правка правил = громкий bump `cheapGateVersion`; + note про дефисные редупликации мимо блок-листа; (в) **NUL-гард на GB18030/UTF-16-путях декода** (сейчас только UTF-8); (г) `tmctl redrive --resnapshot` молча игнорируется — сделай ошибкой или поддержи; (д) style-колонка в human-таблице глав `status` (косметика); (е) report без API-ключей для read-only аудита (опционально). Каждый содержательный фикс — mutation-verified (реверт фикса валит именно его тест — дисциплина пакета №2).

## Задача 3 — заводка цепочки D3 / канала B в конфиг (гейтит приёмку D18)

- Провайдеры `gemini`/`openai`/`mistral` + модели `deepseek-v4-pro`, `glm-5.1`, `gemini-3.1-pro`, `mistral-large-2512` в `models.yaml` с ценами и capability-декларациями (budget_field/temperature/reasoning_control по квиркам exp00). **Каждый слаг — live-фактчек: `/models` И пробный вызов** (урок «есть в /models ≠ работает» и наоборот; research/15 поймал интермиттентный 404 у gemini-2.5-flash). Цену Mistral возьми с официального прайса с датой/URL (полигон перепроверяет параллельно — D19.5б; при расхождении с их числом — пинг).
- Эскалационные цепочки вместо `[kimi-k2.6]`-заглушек: канал A translator `escalate_to` — минимум одна модель ДО приёмочного прогона (D18: deepseek-эхо 25% на приёмочной книге — эскалация будет стрелять); полная цепочка A = v4-pro → glm-5.1 → gemini-3.1-pro. Канал B по D19.1 (Mistral-переводчик, grok-4.3 reasoning-ON эскалация) — конфиг-слоты; полный wiring канала B — Ф2, но конфиг не должен ему противоречить (adult-линт D20.2-Q3).
- grok reasoning-ON эскалация биллится через additive reasoning-буфер `EstimateUSD` (лендился пакетом №1) — сверь, что xAI-путь его реально использует (тест).
- Gemini 3.1 Pro: mandatory thinking — адаптер молча глотает `reasoning:"off"` (D6.3), reasoning-as-output в ценах.

## Задача 4 — мелочи D21.10 (БЕЗ кода памяти и БЕЗ правки промптов)

(а) Резервирование места в схеме банка v2 под будущие типы записей: `voice_profile`, `address_pair`, `reveal_ch`+pre/post-reveal алиасы — **только design-note в спеке/комментарии схемы, НЕ миграция, НЕ код** (механизмы Ф2, D21.1–3; address_pair = материализация журнала ты/вы D7 — учти в note единственность источника истины). (б) Wire-probe в бэклог (можно в этом пакете, если дёшево): пишется ли `temperature` в thinking-канале DeepSeek — вендор-док говорит «молча игнорируется», значит temp 0.3 драфта возможно no-op; зафиксируй фактом (3×2 вызова, дисперсия). (в) **Промпты ролей в этом пакете НЕ трогать**: анти-эхо правки (микро-few-shot, постинструкция) гейтятся fidelity-хвостом полигона (D21.6), языковые констрейнты в reasoning-off пути запрещены (P4-инверсия 3/10→9/10).

## Приёмка сессии

Спека v3 закрывает три пункта D20.1 (с контрпримером для «а»); fix-лист D20.4 закрыт (mutation-verified); цепочка D3/канал B заведены, `CheckRunnable` и adult-линт проходят, слаги live-фактчекнуты с датами; `go build ./... && go vet ./... && go test ./... -race` зелёные; финал — агентское адверсариальное селфревью (дисциплина пакетов №1–2). Запись в `docs/PROGRESS.md` §Бэкенд: что сделано, находки, вопросы оркестратору/владельцу. **Ничего не коммитить** — внешнее ревью и лендинг у оркестратора.
