textmachine/docs/BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md

41 lines
12 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.

# Промт бэкенд-сессии: ПАКЕТ-ЧЕКЕРОВ — детекторы качества против размеченного корпуса ($0-код)
**Выдан 01.08.2026, оркестратор №9; санкция владельца D39.67/68 (строка 25 бэклога — переведена в работу этим промтом).** Ты — бэкенд-сессия TextMachine. Зона: `backend/` (+ `configs/langpacks/`) + свой отчёт в `docs/archive/reports/`. НЕ коммитить — лендит оркестратор. **Первый деливерабл — эхо-блок ≤10 строк** (первым сообщением ДО работы: как понял скоуп/стоп-точки/$0/зону; продублируй шапкой отчёта; подтверждения не жди — СТОП только в конце).
**Денег — НОЛЬ** (развилка 74). ⚠ **Параллельно может идти банк-сессия в режиме read-only дизайна** — её файлов нет; если в дереве появятся чужие правки `backend/` — СТОП и пинг. `--resnapshot` не запускать; `TM_UPDATE_GOLDEN` — только ОДИН раз в самом конце (см. приёмку).
## Глобальный критерий владельца (01.08 — мерило каждого фикса)
**Чистый архитектурный бэкенд, который легко писать и поддерживать, и который качественно выполняет задачу.** Общность: «заработает ли на паре, которой нет в репо, без правки Go?» — фиксы через данные пары/цели, где возможно. Механизм — только где несёт качество; допустимый исход ревизии = «не чинить, закрыть с обоснованием».
## МАНДАТ РЕВИЗИИ ПОСЫЛОК (обязателен)
Каждый пункт ниже найден по критерию «забыли», НЕ по критерию «надо ли». Для КАЖДОГО перед кодом — вердикт-тройка: **(а)** посылка (источник-замер: D39.39 / GENERALITY_RESEARCH §8 / пост-сверка) актуальна? — перепроверь сам дефект на текущем коде и labels-корпусе; **(б)** нужность — что даёт починка на РАЗМЕЧЕННЫХ данных (сколько единиц ловит/отпускает); если выигрыш ~0 — рекомендуй закрыть, не строй; **(в)** форма — лучшая из альтернатив (данные vs код vs контракт-запись «потолок by construction» по Р4). Замер бьёт по посылке → СТОП и пинг, не тихий обход.
## ШАГ 0 — карта чтения
1. `CLAUDE.md` → CURRENT-STATE `docs/PROGRESS.md` (строка 25 — твой полный перечень) → **`docs/architecture/13-tech-debt-anchors.md`, секция «строка 25»** — там file:line-якоря КАЖДОГО дефекта (chevron `cheapgates.go:248-275` · K5a digit-требование `:508-519` · заглавная латиница `checkers.go:527` · K5c-супрессор `:411-435` + «a design, not a patch» `cheapgates.go:84-89` · 两 `dc-checkers.txt:65` · 转-подстрока `memory.go:1048/144` · R4-резидуал).
2. **Контракты:** D39.63 — **Р2 = детекторы единиц/шкал жёстко флагают ТОЛЬКО неверное ЗНАЧЕНИЕ, неконвертированная форма = мягкий счётчик** (нужен split hard/soft в результате чекера); **Р4 = потолок recall by construction записывается В КОНТРАКТ правила** (комментарий+тест), не «переспрашивается».
3. **Корпус и харнесс:** `~/books/gu-zhenren/labels/` (разметка УРОВНЕМ НИЖЕ: `labels/labels/{k1..k4,k5a-d,k6}.jsonl` · `pools/` · `raw/corpus.jsonl` (91 юнит) · `verdicts/` · **`metrics.json` — ратифицированный базлайн пакета-6**; README с рецептом ре-рана НАСТОЯЩИХ чекеров, вкл. ловушку ApplyHeading) — корпус СТАТИЧЕН, свежий прогон не нужен. Прежний харнесс замера утрачен в scratch (урок «персист, не scratch») — **пересобери и положи В GIT**; рекомендуемая форма — env-гейченный Go-тест по образцу майнер-парити (`TM_CHECKER_LABELS=1 go test …`), выбор за тобой, но durable.
4. Происхождение дефектов: D39.39/40 (пакет-6, 12 дефектов) · `docs/archive/reports/GENERALITY_RESEARCH_2026-07-31.md` §8 (актуальные якоря; ссылки D39.39 устарели) · D39.64 отчёт §5.5 (что фаза-2 сознательно НЕ делала и почему).
5. `docs/experiments/00-provider-quirks.md`НЕ нужен (вызовов нет); `12-go-style-notes.md` — норматив общности.
## Состав пакета (= строка 25 + строка 79; приёмка КАЖДОГО — по labels)
**Корзина II пака-21:** #3 атрибуция речи сверх «X», — (восклицательные/безатрибуционные; 38/46 реплик мимо) · #5 K5a: 数/几-магнитуды проходят к подчекеру (сейчас recall=0 на 149k знаков; узкий DC2-проб покрывает ровно 数十万) · #6 класс «заглавная латиница/маркеры TM-BANK в финале» (с allowlist) · #7 порог-3 — решить ПО ДАННЫМ labels: фикс или Р4-запись «потолок by construction» · #10 однознаковые Han-ключи пост-чека (转 в 转身): **СТРОИТЬ ЗДЕСЬ**`membank/mempostcheck.go`+`memory.go` пишешь ТЫ (банк-сессия на этапе 1 read-only, её стройка идёт после твоего лендинга — D39.68); контракт границы/контекста коротких Han-ключей опиши отдельным §-блоком отчёта — оркестратор релеит его в дизайн-пак банка.
**Из (I)/(III):** #1 K5c-супрессор пер-вхождением + **имплементация Р2-контракта** (сравнение ЗНАЧЕНИЯ, hard/soft split — «a design, not a patch», проектируй как дизайн) · #8 两/兩 → `cheng_re` (данные, батчем).
**Отложенные фазой-2 (D39.64 §5.5):** K4b-атрибуция · inner_marker-вето-на-тире · приёмка гомоглиф-детектора (существует — `tk.mixed`, замерить на labels) · строгий OffLanguage (⚠ оговорка 36а: «甲等 → класс Цзя» строгой формой НЕ ловится — не заявлять выигрышем).
**R4-резидуал пака-11:** DC7 grade/role (⚠ предусловие — approved-promote 甲乙丙丁, owner-only, PACK11_CONT:195: если approved-строк нет — легитимный исход тройки = дизайн + вопрос владельцу, не стройка вслепую) · omission-бэкстоп (лёгкий ru-стеммер + лемма-матч по {dst, decl.forms, aliases}) · DC2 word↔word дроби (дизайны: PACK11_CONT §«Открытые эскалации» п.4 (:195-197) → полные — план-11 §5(б), `archive/architecture/11-implementation-plan.md`).
**Довески:** Problem-классы research/22 §2 №5 (char-freq-degeneration, control-code-loss) — вердикт-тройка, строить только если labels подтверждают класс · alignment-защита рефренов: МИНИМУМ = правка `prompts/zh-ru/editor.md` + `editor-mono.md` той же строкой («повторы, которых НЕТ в оригинале»; двигает PromptSHA256/wire — допустимо, перекупок нет D39.63; mono — DORMANT, но класс закрывается целиком), детектор повторов — только вердикт-тройкой · **строка 79:** `checks/repair.go:131` DC1-трим и `checkers.go:457,474` isCyrLetter → `c.wordScript`; `lintNumberMagnitude` гейтить по объявленному письму источника (`SourceScripts`).
**Довесок (строка 89, D39.72) — чистка ведра D карты D39.60 по пути:** удалить/поправить мёртвое в файлах, которые всё равно трогаешь — указатели на несуществующий `checkers_zh_ru.go` (cheapgates.go:56,125,130 · langpack.go:73+) · ложную шапку checkers.go:22-25 (register читает пар-пак, не target-данные) · дубль isHeaderContentRune↔isHeaderSeparator · прочее из дюжины ведра D сверить по карте GENERALITY_RESEARCH §3 (что не в твоих файлах — оставить строке 89); заодно свериться, закрыла ли фаза-2 ведро B («6 пар-модуль без гейта»).
**Выход пакета:** пере-замер recall чекеров на labels (вход решения строки 12 `postcheck_gate`) — таблица per-класс ДО/ПОСЛЕ со вскрытыми единицами.
## Приёмка и самопроверка (обязательны, «ВСЕГДА на важных»)
1. Харнесс labels: **калибровка = сперва ВОСПРОИЗВЕДИ `metrics.json` пакета-6 на НЕизменённом коде** (каждую дельту объяснить; конвенцию k5c — их две: `k5c_unit` 0.167 vs `k5c_unit_codeconv` 1.0 — выбрать и назвать) — это и есть колонка ДО; два независимых пути счёта совпадают; метрики per-defect ДО/ПОСЛЕ; **перед любым сравнительным выводом — глазами ≥1 единица с каждой стороны** (вывод на агрегате до вскрытия единиц запрещён).
2. `go build`/`vet`/`go test -race ./...` зелёные В ФИНАЛЕ (после единственного пере-захвата голдена; красный голден-тест ПО ХОДУ работ — ожидаем, промежуточными захватами не чинить); майнер-парити EXACT; мутационные тесты на новые данные-классы.
3. **Голден:** вердикт-двиги для чекер-класса ОЖИДАЕМЫ и ратифицированы этим промтом — пере-захват ОДИН раз в конце (`TM_UPDATE_GOLDEN`), маскированный дифф, в отчёте: какие оси/вердикты двинулись, почему КАЖДЫЙ двиг верен (вскрытые единицы). Перекупок нет (D39.63) — но оси протоколируй.
4. Общность: свип своих диффов на новые язык-ветвления (их быть не должно — данные/контракт).
5. Адверсариальное селф-ревью исполнением: свой код + свои метрики (author≠reviewer внутри сессии).
**Отчёт:** `docs/archive/reports/CHECKER_PACKAGE_<дата>.md` — эхо-блок · вердикт-тройки ВСЕХ пунктов (вкл. «не чинить» с обоснованием) · метрики · голден-протокол · вопросы владельцу отдельным блоком. Плюс краткий итог 35 строк — в секцию «Бэкенд» `docs/PROGRESS.md` (таблицу бэклога и CURRENT-STATE НЕ трогать). Расхождение промта с кодом = пинг. **СТОП — приёмка оркестратора.**