# Промт бэкенд-сессии: ПАКЕТ-ЧЕКЕРОВ — детекторы качества против размеченного корпуса ($0-код) > **⚠ АРХИВ (02.08.2026): исполнен и ПРИНЯТ — D39.78** (строка 25 целиком + первые два компонента строки 79; двухраундовая приёмка оркестратора с постфиксом §8 отчёта; строка-79-остаток = cjkScriptNames, хвосты → строка 93, вопросы §6 → строка 92). Отчёт: [`../reports/CHECKER_PACKAGE_2026-08-02.md`](../reports/CHECKER_PACKAGE_2026-08-02.md). Инструкции НЕ исполнять. **Выдан 01.08.2026, оркестратор №9; санкция владельца D39.67/68 (строка 25 — в работе этим промтом); ОСВЕЖЁН 02.08 после лендинга банк-дуги D39.69–77 и холодного пере-чтения.** Ты — бэкенд-сессия TextMachine. Зона: `backend/` (+ `configs/langpacks/`) + свой отчёт в `docs/archive/reports/`. НЕ коммитить — лендит оркестратор. **Первый деливерабл — эхо-блок ≤10 строк** (первым сообщением ДО работы: как понял скоуп/стоп-точки/$0/зону; продублируй шапкой отчёта; подтверждения не жди — СТОП только в конце). ⚠ **Денег — НОЛЬ** (развилка 74). **Банк-дуга залендена ЦЕЛИКОМ (D39.69–77) — параллельных сессий НЕТ**; дерево на старте чистое (кроме START_PROMT.MD владельца); появятся чужие правки `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:1071/144` (якорь уехал после банк-пака; :144 = minKeyLen/allow_short) · R4-резидуал). **1а. Свежий контекст банка (обязателен — membank менялся ПОСЛЕ якорей справочника):** ревью-шапки `docs/archive/reports/BANK_QUALITY_DESIGN_2026-08-01.md` (что построено: серия-батчинг · тип-классификатор · `lang.TargetStemmer`+neuter) и `SOFTSIGN_DECL_FINDING1_2026-08-02.md` («ь» НЕ возвращать — глобальная коллизия «Синь/синий» доказана, регресс-гвозди `stemmer_test.go`/`memdecl_test.go` упадут; anchor-правило отвергнуто как переносящее коллизию) и `BANK_FIXPACK_2026-08-02.md` (**§е: стеммер = accept-biased ФЛАГГЕР, не гейт, и в voice-канал НЕ заводится** — контракт `voice.go:368-378` + `mempostcheck.go:132-142`; **§и: `lang.TokenizeWords`→`text.TokenizeLetters` с combining-mark-фиксом — ГЛАВНЫЙ кандидат-объяснение дельт при калибровке metrics.json**; §а — первоисточник «ь»-отката). 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 (происхождение и корзины; ⚠ его якоря ЧАСТИЧНО устарели после фазы-2/банк-пака — верить справочнику-13 и п.1 ЭТОГО промта) · 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` пишешь ты (банк-дуга залендена, файлы свободны); ⚠ в `dstFormPresent` теперь ЖИВЁТ стеммер-путь `declinedFormPresent` (банк-пак §3) — не сломай его и его гвозди; контракт границы/контекста коротких 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-бэкстоп: стеммер НЕ строить — **УЖЕ построен** (`lang.TargetStemmer`, примитив C банк-пака) — переиспользуй его в лемма-матче по {dst, decl.forms, aliases}; уроки softsign обязательны (только флаггер; «ь»-класс не трогать) · 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`). ⚠ Третий компонент строки 79 — граница ПЛОТНОСТИ письма (`cjkScriptNames`-константа) — **НЕ в твоём скоупе**, остаётся строке 79 (дизайн-уровень). **Довесок (строка 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 (`chunk/` — ВНЕ твоих файлов, скорее всего останется строке 89) · прочее из дюжины ведра 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 внутри сессии). **Плюс обязанность лендинга:** актуализировать устаревшие якоря срезов «строка 25»/#10 в `docs/architecture/13-tech-debt-anchors.md` (memory.go:1048→1071 и др. — банк-пак сдвинул) — пометь исполненное D-номером, не удаляй. **Отчёт:** `docs/archive/reports/CHECKER_PACKAGE_<дата>.md` — эхо-блок · вердикт-тройки ВСЕХ пунктов (вкл. «не чинить» с обоснованием) · метрики · голден-протокол · вопросы владельцу отдельным блоком. Плюс краткий итог 3–5 строк — в секцию «Бэкенд» `docs/PROGRESS.md` (таблицу бэклога и CURRENT-STATE НЕ трогать). Расхождение промта с кодом = пинг. **СТОП — приёмка оркестратора.**