textmachine/docs/archive/prompts/BACKEND_GENERALITY_PASS_SESSION_PROMPT_2026-07-24.md

7.3 KiB
Raw Blame History

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