textmachine/docs/BACKEND_INFRA_PACK_SESSION_PROMPT.md

43 lines
9.6 KiB
Markdown
Raw 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.

# Промт: бэкенд-сессия — инфра-пак читаемости (санитайзер-классы + экспорт-фикс + гарды + 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+4E009FFF + расширения) или полноширинный знак = утечка. Детерминированно, высокий 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 → пере-прогон 310 глав дешёвым конфигом (дискурс-промпт glm=P1a; кандидат-редактор mistral/deepseek-pro как арм — exp14b за них по смыслу) → чтение владельца.** Планка = 2 претензии ИНТЕРИМ (D35); пилот Ф2.5 — решающая точка, не разбавляется.