textmachine/docs/BACKEND_SANITIZER_FIX_SESSION_PROMPT.md

36 lines
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.

# Промт: бэкенд-мини-сессия — 2 обязательных фикса output-санитайзера (D33.1) + golden re-capture (2026-07-12)
> **Гейтит пере-прогон 25 глав.** Санитайзер (D30.3, `sanitizer.go`) залендён (D33, 00f8e36) и **включён в `pipeline-c1.yaml`**, но ревью нашло 2 major-дефекта, которые backend-ревью пропустило. Оба правят вердикт-ось → **golden re-capture обязателен** (инвариант №8, D23.1). Правки вольются в единый resnapshot пере-прогона (нулевая доп. цена).
---
## Кто ты
Бэкенд-мини-сессия. Зона: `backend/` + секция «Бэкенд» в `PROGRESS.md`. **Ничего не коммитить** — лендинг оркестратора. Пакет крошечный и целевой: 2 регекс-фикса санитайзера + пины + golden. Не расползаться (этап Б/В D15.2 — отдельный промт после пере-прогона).
## Онбординг
1. `CLAUDE.md` → CURRENT-STATE → **D33 целиком** (мандат; особенно D33.133.2) → D30.3 (санитайзер) → D23.1 (процедура golden).
2. `docs/experiments/12-quality-diagnosis.md:229` (точная строка хвостовой утечки gemini A5/5_1 «Основные правки для справки» — цель фикса 1) + шапка D30.
## Задачи
### 1. [major] Хвостовой класс ловит «Основные правки для справки» (D33.1а)
Санитайзер ловит ВЕДУЩУЮ gemini-преамбулу, но НЕ хвостовую форму «**Основные правки для справки:**» + список — ту самую утечку A5/5_1 (exp12:229), ради которой гейт включён. Сейчас `sanitizer.go:164/171` матчат только примечание/заметки/сноска и внесённ+правк/что изменено/список правок — «для справки»/«основные правки» проваливаются.
- Фикс: high-precision альтернатива на «основные правки»/«для справки» (эти фразы в НАРРАТИВЕ не встречаются — низкий FP-риск).
- Пин: fire-тест точной строкой 5_1 (хвостовой блок должен флагаться).
### 2. [major] Класс «битые словоформы» ложно флагает нормальную прозу (D33.1б)
`junctionDuplicated` (`sanitizer.go:356`) фаерит «около колонны», «около колодца», «стало талой» ТАК ЖЕ, как реальный «Первок предок» — гард полиптотона (`:362`) исключает только префикс-вложенность, а эти пары лишь случайно делят 4+-рунную морфемную границу, не содержа друг друга. «около» — частый предлог → флаг-шторм на 25 главах легитимного текста. Гейт включён в c1.
- Фикс на выбор: (а) требовать, чтобы перекрытие покрывало **бо́льшую часть ОБОИХ токенов** (не просто 4+ руны общей границы); ИЛИ (б) **снять класс целиком** — он и так признаёт (`TestSanitizerBrokenWordRecallGap`), что канонический «Первок предок» не ловит (recall-gap до Ф2-морфологии), т.е. класс ловит мало реального и много ложного. Реши по precision: если после сужения (а) класс всё ещё даёт FP на прозе — снять.
- Пины: clean-кейсы «около колонны»/«около колодца»/«стало талой» (НЕ флагать) + сохранить recall-gap-тест как есть.
### 3. Мелочи (документировать границей ИЛИ быстро сузить — не блокеры, D33.2)
Латиница-heavy на 5+ брендах («iPhone, iPad, MacBook…») — исключить капитализированные одиночные латинские токены из heavy-count; хвостовой «Примечание:»/«Комментарий:» в последних строках; «# # #»/«## ***» разделители (требовать букву/цифру после хешей). Разговорный префикс «Конечно!/Готово!» перед преамбулой — recall, precision-over-recall дизайн, ОК (не трогать). Recall-gap «Первок предок» — **принятая граница** до Ф2-морфологии (не чинить).
### 4. Golden re-capture
Правки 12 меняют вердикт-ось → `TM_UPDATE_GOLDEN=1`; дифф-класс задокументируй — изменения ДОЛЖНЫ исчерпываться sanitizer-version-бампом + (если фикстура ch6 упражняет затронутые классы) вердиктами санитайзера. Любой другой класс = стоп и пинг оркестратору.
## Дисциплина
Только санитайзер + пины + golden; никаких других wire-правок. Каждый фикс/пин mutation-verified; `go build/vet/test -race` чисто. `git status` перед стартом (в дереве могут быть чужие правки). `.env` не читать. Отчёт: секция PROGRESS «Бэкенд» — дифф-класс golden, числа пинов, что решил по классу «битые словоформы» (сузил/снял). Не коммитить.