# Промт бэкенд-сессии: ПАК-14 «генеральность-пасс» (движок ↔ данные) **Статус: ВЫДАН 24.07.2026, оркестратор №7.** Источник: директива владельца 24.07 («движок не должен врастать в одну книгу/пару — при 10 языках захлебнёмся») + адверсариально подтверждённый аудит-фикс-лист (25-агентный воркфлоу, findings пережили refute-pass). Норматив — `docs/architecture/12-go-style-notes.md` §0 (читать ПЕРВЫМ). Это перенос ДАННЫХ, не редизайн алгоритмов. **Жёсткий инвариант: байт-точность.** Каждый перенос данных из Go-констант в langpack/данные — поведенчески нулевой: golden байт-идентичен, **майнер-парити EXACT** неизменен, все пины зелёные. Прецедент дисциплины — D39.16 (арх-проход, парити EXACT). Данные langpack фолдятся в `pack.Version()` — движение снапшот-хеша от НОВЫХ файлов данных допустимо и ожидаемо (version-only), wire-тела — нет. ## Онбординг `CLAUDE.md` → `docs/architecture/12-go-style-notes.md` → D39.16 (граница данные/код, что уже ратифицировано: `translitInterjections` = DEFER, НЕ трогать) → `internal/lang/langpack.go` (loader/формат) → `configs/langpacks/`. ## Фикс-лист (подтверждённый; file:line на момент 24.07) 1. **古月 из общего zh-langpack — ВОН** (`configs/langpacks/zh/surnames-compound.txt`): это клан книги, не 百家姓-фамилия. Механизм: книго-скоупное расширение langpack (например, `book.yaml: langpack_extензии` / merge сид-имён в майнер-вход) — дизайн предложи, парити EXACT сохрани (古月 обязан остаться в майнер-входе ДЛЯ ЭТОЙ книги — иначе catastrophe-набор {古月:22} сломается; общий langpack при этом чист). 2. **Инъекция-тексты — в пар-данные** (`memory.go:601` и рядом): русские строки инъекции (gender-аннотации «(муж. — …)», заголовки glossaryBlockHeader/editorConstraintHeader) рендерятся для ЛЮБОЙ пары без гейта. Вынести в pair-keyed данные (langpack-слот или prompts-pack по образцу stage-промптов). ⚠ Байты для zh-ru обязаны совпасть с текущими (иначе wire-сдвиг) — сверка golden. 3. **Refusal-блэклист** (`disposition.go:235-250`): en/ru/zh/ja-фразы отказов — в langpack-данные (per-source или общий файл `refusal.txt` со слотами). 4. **Чанкер:** zh-числительные (`chunker.go:207,270-304` — руны+value-мапы; heading-рендер уже данные, а числительные под ним — нет) и `sourceAbbrevs` (`chunker.go:628`, en-аббревиатуры) — в langpack. 5. **Майнер:** sentence-терминаторы `。!?` (`miner_alias.go:64`) и фонотактика Палладия (jqx/ретрофлексы/ü-finals, `miner_palladius.go:38`) — в langpack; формат loader'а расширь при необходимости (fail-loud, байты в Version()). **Аддендум (владелец, 24.07):** расширяя формат — перепиши `parsePalladius` (`langpack.go`) правильно: (а) generic-парсер категорий `map[категория]map[string]string`, незнакомая категория ≠ ошибка парсера (обязательность категорий валидирует потребитель пары по required-списку); (б) вместо четырёх-кортежа `(ini, fin, yw, si …)` и четырёх параллельных полей `Pack` — один типизированный struct с говорящими именами; (в) байты данных не трогать — `Version()` хеширует файлы, рефактор хеш-нейтрален. 6. **Чекеры zh-ru:** таблицы DC1 (`checkers_zh_ru.go:30`) и `dcRegisterNegList` («терем»+формы, `:139`) — в langpack-данные пары; код чекера остаётся, читает данные. 7. **Калибровки как fallback-константы** (`config/pipeline.go:366-377`): fertility 1.1978/0.3852 + draft/edit-бюджеты — оставить механизм, но дефолты пере-документировать как «пар-калибровка zh-ru» и брать из пар-конфига, Go-fallback — только generic. 8. **Свип-добор:** полный grep CJK/Cyrillic-литералов в non-test `.go` (карта zone-6 аудита — спроси оркестратора при старте, он передаст список) — каждый решить: langpack / book-data / OK-generic; ратифицированные DEFER не трогать. 9. **Промпты — видимость пар-скоупа в дереве:** файлы `prompts/*.md` (все pair-keyed через `prompts:{zh-ru:…}`, голых `prompt:` нет) перенести в `prompts/zh-ru/` и обновить пути во всех конфигах — чтобы имя файла не читалось как общий слой. Механика: байты файлов НЕ менять (wire нетронут), только пути. Извлечение конвенций в структурированный пакет пары — НЕ в этом паке (10-prompt-architecture, гейтится формой пакета). ## НЕ делать Редизайн алгоритмов · переезд `checkers_zh_ru.go` как файла (пар-модуль легитимен — выносятся ДАННЫЕ) · трогать `translitInterjections` (D39.16 DEFER) · любые правки wire-байтов zh-ru · переименования пакетов «для красоты» (12-go-style §3: файлы ≠ критерий сплита). ## Приёмка (ревью исполнением, мандат 12.07) `go build/vet/test -race` зелёные · **golden байт-идентичен** (кроме version-only снапшот-метаданных от новых langpack-файлов — классифицировать дифф) · **майнер-парити EXACT** (вкл. 古月-механику через книго-расширение) · `grep -P '[\x{4e00}-\x{9fff}]|[а-яА-Я]' backend/internal/**/*.go` (non-test) — остаток объяснён построчно в отчёте · адверсариальный селф-ревью (линзы: байт-точность/парити/общность ja-ru мысленный тест). Отчёт — `docs/archive/reports/PACK14_GENERALITY_REPORT_<дата>.md`. Сессия НЕ коммитит.