# Промт: бэкенд-сессия — инфра-пак читаемости (санитайзер-классы + экспорт-фикс + гарды + reseed-координация) (2026-07-12, D38, приоритет №1)

---

## Кто ты и зачем

Ты — **бэкенд-сессия** TextMachine. Эмпирика D35→D38 сошлась: **потолок читаемости — в НАШЕЙ ИНФРЕ (глоссарий-согласованность + output-санитайзер), НЕ в модели** (D38: дешёвый glm-дискурс ≈ фронтир gpt-5.4; обе внешние слепые сессии + exp14b голосуют за инфру, не за эскалацию на фронтир). Это ПЕРВЫЙ «строить» шаг под ДОКАЗАННЫЙ ROI (не «мерить»). Задача — залатать конкретные читательские дефекты, найденные h2h/exp14/exp14b, дешёвыми детерминированными гейтами.

**Конкретные дефекты (span-верифицированы оркестратором в сыром выходе):**
1. **Сырой китайский протекает в русский выход:** `«…охотники,却有 на это лишние деньги!»` (arms/C/17.0) — санитайзер СЕЙЧАС НЕ ловит CJK-в-выходе (5 классов: преамбула/хвост-заметки/markdown-###/латиница/битые-словоформы; Han-класса НЕТ).
2. **Флагнутый чанк экспортится ПУСТЫМ** (D35.4a): ch5.0/ch20.0 зачины глав выпали целиком из-за ведущего `### Глава N`; текст правки цел. Дроп целого чанка ради косметического ### — переоверкилл.
3. **Дрейф грейдов** `丙→«разряда Б»` (должно В) — **корень = статус-draft сида** (D38, верифицировано `memory.go:489` CONFIRMED-only + `suppressContained` съедает верный approved `族长`). Фикс — RESEED (промоут статусов), координируется с тобой (ниже), НЕ твой код.
4. **Число-дрейф / omission** при reflow (`四成四`=44%→«четыре десятых» у glm; `大哭了一场`→«проплакала несколько часов»).

Зона: **только `backend/`**. Golden — инвариант №8 (осознанный re-capture, мутационно пинить). **Ничего не коммитить** (лендит оркестратор). **По мандату самопроверки (CLAUDE.md, решение владельца 12.07): ПОСЛЕ кода прогони явный бэкенд-ревью-проход своего кода + результатов** (не «0 ошибок» на веру); адверсариальное ревью диффа (author≠reviewer, find→refute).

## Онбординг

1. `CLAUDE.md` (гардрейлы, вкл. мандат самопроверки) → CURRENT-STATE → **D35.4 + D37 + D38 целиком** (мандат) → `docs/experiments/14b-meaning-battery.md` ревью-шапка (h2h-дефекты).
2. `backend/internal/pipeline/sanitizer.go` (5 классов, precision>recall, opt-in гейт, фолдится в снапшот при enabled — D30.3/D33) + `render.go` (экспорт-сборка) + `mempostcheck.go`/`memory.go` (глоссарий-инъекция, editor-констрейнт = CONFIRMED-only).
3. `docs/experiments/00-provider-quirks.md` (не трогать провайдеров — только читать).

## Задачи (по приоритету; каждая — golden байт-в-байт + мутационный тест)

### 1. [major] Экспорт флагнутого чанка: strip-and-export для КОСМЕТИЧЕСКИХ классов, не drop-to-empty (D35.4a + D29.1а)
Сейчас флагнутый чанк → `FinalText` не экспортится (пусто). **Ввести дисп-по-классу:** высоко-precision КОСМЕТИЧЕСКИЕ утечки (ведущий `#{1,6} ` markdown-заголовок; одиночный CJK-токен — см. задачу 2) → **strip утечки + экспорт остатка + флаг для человека** (не терять чанк); СУБСТАНТИВНАЯ контаминация (преамбула gemini, тяжёлая латиница, битые формы) → как сейчас (skip, не экспортить). Ведущий `### Глава N` рождается в ЧЕРНОВИКЕ deepseek → strip на экспорте (нормализация), НЕ править editor-промпт. Тест: флагнутый-косметикой чанк экспортит текст БЕЗ ведущего ###; субстантивный — по-прежнему пуст.

### 2. [major] Новый санитайзер-класс: CJK-в-выходе (Han + полноширинные в ФИНАЛЕ)
Финал — русский; любой иероглиф `\p{Han}` (U+4E00–9FFF + расширения) или полноширинный знак = утечка. Детерминированно, высокий precision (в чистой ru-прозе Han=0). Класс `cjk_leak` в `sanitizerResult`. **Дисп — КОСМЕТИЧЕСКАЯ (задача 1): strip CJK-токены + экспорт + флаг** (одиночный `却有` не должен ронять весь чанк). Пины: fire на `«…охотники,却有 деньги»`; non-fire на чистой ru-прозе; полноширинная пунктуация/цифры — учесть (не ложить на легит-кейсы, если есть). Golden re-capture (правило = loud resnapshot, `sanitizerVersion` bump).

### 3. [minor-major] Число/omission-гард на reflow (guard пост-черновой регрессии, research/18 §C#5)
Детерминированный гейт (precision>recall, opt-in как санитайзер): (а) финал НЕ короче черновика на >X% (порог — предложи, напр. 40%; ловит коллапс/пропуск — draft 5000→final 600); (б) множество ЦИФР/чисел финала ⊆ близко к множеству черновика (грубо: не появились/не исчезли числовые токены — ловит `四成四`→«десятых» дрейф и добавки). Флаг `regression_guard`, НЕ drop (человеку на ревью). Осторожно с легит-случаями (reflow укрупняет, но не режет смысл). Пины mutation-verified. Если (б) шумит — оформи как наблюдаемость-флаг, не hard-skip.

### 4. RESEED-КООРДИНАЦИЯ (глоссарий-промоут — НЕ твой код; координируется в ОДИН resnapshot)
Сид (`/home/ubuntu/books/gu-zhenren/guzhenren-seed-v2.yaml`, ВНЕ git) промоутит полигон/владелец: грейды `甲乙丙丁`→dst «класс А/Б/В/Г» + **status draft→approved**; `四代族长`→«Четвёртый глава рода» **draft→approved** (владелец подписал направление D37/D38). Твоё: убедиться, что editor-констрейнт-инъекция enforce-ит promoted-термы (механизм есть — `renderEditorConstraintBlock` CONFIRMED-only, `memory.go:489`; промоут→CONFIRMED→enforced; longest-match делает 四代族长 победителем над 族长). **НЕ править seed сам** (зона полигона/владельца). Финальный resnapshot (санитайзер-версия + промпт-экспорт + сид) — ЕДИНЫЙ (D30.9-паттерн), координирует оркестратор.

## Deliverable / дисциплина
- `go build && go vet && go test -race` зелёные; golden re-captured осознанно (маскированный дифф = ровно санкционированные классы); все новые классы/гарды mutation-verified (реверт→FAIL).
- **САМОПРОВЕРКА (обязательна):** после кода — свой ревью-проход (что реально ловит/не ловит на РЕАЛЬНОЙ ru-прозе, ложные срабатывания), затем адверсариальное ревью диффа (find→refute, author≠reviewer). FP-классы на легит-прозе — НЕ приемлемы (роняют хороший чанк).
- Зона `backend/` only; чужой untracked (`eval/exp14b_*.py` полигон) НЕ трогать; `.env` не читать; коммиты — оркестратор.
- Оговорки/вопросы — в конце отчёта (порог X% гарда; легит-кейсы CJK-класса; дисп-матрица strip-vs-skip).

**После лендинга бэкенда + reseed → единый resnapshot → пере-прогон 3–10 глав дешёвым конфигом (дискурс-промпт glm=P1a; кандидат-редактор mistral/deepseek-pro как арм — exp14b за них по смыслу) → чтение владельца.** Планка = 2 претензии ИНТЕРИМ (D35); пилот Ф2.5 — решающая точка, не разбавляется.
