textmachine/docs/BACKEND_GENERALITY_PASS_SESSION_PROMPT.md

29 lines
6.6 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.

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