7.3 KiB
Промт бэкенд-сессии: ПАК-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)
- 古月 из общего zh-langpack — ВОН (
configs/langpacks/zh/surnames-compound.txt): это клан книги, не 百家姓-фамилия. Механизм: книго-скоупное расширение langpack (например,book.yaml: langpack_extензии/ merge сид-имён в майнер-вход) — дизайн предложи, парити EXACT сохрани (古月 обязан остаться в майнер-входе ДЛЯ ЭТОЙ книги — иначе catastrophe-набор {古月:22} сломается; общий langpack при этом чист). - Инъекция-тексты — в пар-данные (
memory.go:601и рядом): русские строки инъекции (gender-аннотации «(муж. — …)», заголовки glossaryBlockHeader/editorConstraintHeader) рендерятся для ЛЮБОЙ пары без гейта. Вынести в pair-keyed данные (langpack-слот или prompts-pack по образцу stage-промптов). ⚠ Байты для zh-ru обязаны совпасть с текущими (иначе wire-сдвиг) — сверка golden. - Refusal-блэклист (
disposition.go:235-250): en/ru/zh/ja-фразы отказов — в langpack-данные (per-source или общий файлrefusal.txtсо слотами). - Чанкер: zh-числительные (
chunker.go:207,270-304— руны+value-мапы; heading-рендер уже данные, а числительные под ним — нет) иsourceAbbrevs(chunker.go:628, en-аббревиатуры) — в langpack. - Майнер: 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()хеширует файлы, рефактор хеш-нейтрален. - Чекеры zh-ru: таблицы DC1 (
checkers_zh_ru.go:30) иdcRegisterNegList(«терем»+формы,:139) — в langpack-данные пары; код чекера остаётся, читает данные. - Калибровки как fallback-константы (
config/pipeline.go:366-377): fertility 1.1978/0.3852 + draft/edit-бюджеты — оставить механизм, но дефолты пере-документировать как «пар-калибровка zh-ru» и брать из пар-конфига, Go-fallback — только generic. - Свип-добор: полный grep CJK/Cyrillic-литералов в non-test
.go(карта zone-6 аудита — спроси оркестратора при старте, он передаст список) — каждый решить: langpack / book-data / OK-generic; ратифицированные DEFER не трогать. - Промпты — видимость пар-скоупа в дереве: файлы
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. Сессия НЕ коммитит.