29 lines
6.6 KiB
Markdown
29 lines
6.6 KiB
Markdown
# Промт бэкенд-сессии: ПАК-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()).
|
||
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`. Сессия НЕ коммитит.
|