textmachine/docs/BACKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md

13 KiB
Raw Blame History

Промт бэкенд-сессии: ПАК-19 «голос и состояние» (ДВУХФАЗНЫЙ: дизайн → ратификация → стройка)

СТАТУС: АКТИВЕН — позиция в очереди РАТИФИЦИРОВАНА (D39.33, 25.07). Владелец амендировал курс: масштаб целой книги уходит в КОНЕЦ, за достройку алгоритмического идеала, а доказательство эффективности крупных изменений идёт мини-прогонами ~10 глав. Под этим курсом механизмы D21 — законно первый пункт идеала. (История: промт был запаркован после того, как проверка показала, что его исходная выдача была ре-ордерингом оркестратора против ратифицированного тогда курса D39.22; директива владельца сняла конфликт.)

Статус выдачи: 25.07.2026, оркестратор №8. Цель — построить последний крупный НЕпостроенный рычаг качества: механизмы D21 (voice-профиль · реестр обращений ты/вы · reveal-окна). Ратифицированы 09.07 как механизмы Ф2, в коде их НЕТ — есть только описания будущих таблиц в комментариях миграций. Пак двухфазный (образец паков 16/17): фаза 1 — дизайн + СТОП, фаза 2 — стройка по размеченному списку.

Первый деливерабл — эхо-блок (≤10 строк): скоуп / инварианты / чего не делать. ДО работы.

Почему это ответственный пак (контекст, из кода не выводится)

  1. Он двигает провод. Инъекция голоса/обращений меняет сборку контекста ⇒ снапшот, ⇒ --resnapshot, ⇒ пере-оплата книги. Это не побочный эффект, а планируемое свойство: пак делается тогда, когда мы готовы платить за пере-прогон.
  2. Он трогает банк памятиа банк durable и его версия фолдится в снапшот. Ошибка схемы стоит пере-оплаты всех книг, а не одной.
  3. Он на грани ru-target долга. Различение ты/вы — свойство ПАРЫ (в английском его нет, в японском своя система), поэтому это первый пак, где §0-инвариант общности проверяется по-настоящему. Ревью-вопрос по умолчанию: «заработает ли на паре, которой в репо ещё НЕТ, без правки Go?»

Ратифицированная база (D21, читать как контракт)

  • Voice-профиль — схема research/15 §1.5 (char_id · register · self_ref · address_default · lexicon_markers · ng_lexicon · exemplars 35 RU-реплик из УТВЕРЖДЁННОГО перевода · brightness · окна since_ch/until_ch). Оговорка red-team, «ровно так»: до полного лендинга D15.2 профиль ЗАМОРОЖЕН per-job — самодозаполнение exemplars = mid-run append памяти = пере-оплата книги (D8/D15.1). Проверь фактическое состояние D15.2-семантики в коде и, если считаешь, что заморозку можно снять, — принеси АРГУМЕНТ, а не тихое послабление.
  • Реестр обращений address_pair — ратифицирован как МАТЕРИАЛИЗАЦИЯ журнала ты/вы (D7-Правки-1), то есть ОДИН источник истины, а не второе хранилище рядом с банком.
  • Reveal-окна (reveal_ch + pre/post-reveal алиасы) — та же фигура, что уже работающие спойлер-окна since_ch/until_ch (internal/seed, internal/membank): pre-reveal dst не должен инжектиться до раскрытия.
  • Приоритет инъекции: CONFIRMED-глоссарий > обращения > голос; в инъекцию идёт только CONFIRMED.
  • Экономика D21 п.8: верхняя граница editor-side инъекции +$0.20.3/вебновелла; при драфт-слоте ~+$0.020.05. Дороже — повод для развилки, не для тихого списания.

ФАЗА 1 — ДИЗАЙН (кода не трогать; отчёт → СТОП → ратификация)

Каждый пункт — «реши сам и аргументируй»; советы ниже = приоры, опровергаются аргументом или замером.

  • V1. Скоуп и порядок. Какие из трёх механизмов берём сейчас и в каком порядке. Приор: реестр обращений первым — он детерминирован, дёшев, даёт $0-детектор (слой 1) и материализует уже ратифицированный журнал; reveal-окна вторыми — это расширение существующей идиомы окон, а не новая сущность; voice-профиль третьим — он самый дорогой по схеме и бюджету инъекции. Опровергни, если данные говорят иначе.
  • V2. Схема и хранение. Где живут три сущности (типы записей банка против отдельных таблиц), как ложатся на миграции, что делает версия банка со снапшотом, и какова политика append в середине книги. Явно ответь: что из этого durable, что производное, что пере-оплачивается при правке.
  • V3. Инъекция. Формат, позиция, бюджет, приоритет; кэшируемый префикс для 23 главных героев (стабилен на книгу — кэш почти бесплатен); пер-ролевая разница (переводчик против редактора — реестр role→инъекция уже существует). Обязательно: что именно фолдится в снапшот и почему — блок context_assembly уже есть, новая ось обязана быть в нём или получить осознанный отказ.
  • V4. Детерминированный детектор отклонения голоса (слой 1, $0). Ты/вы-флип в атрибутированной реплике против реестра пар — где живёт (пакет checks), как отчитывается (QualityReport), версионируется ли (CheapGateVersion фолдится БЕЗУСЛОВНО — любое изменение правила двигает снапшот всех книг: реши осознанно). Слой 2 (эмбеддинги) — НЕ в этом паке.
  • V5. Общность (несущее). Ты/вы — свойство пары, не движка. Спроектируй так, чтобы T/V-различение приходило ДАННЫМИ (internal/lang + configs/langpacks|pairs), а пара без T/V (en→?) просто не активировала механизм без единой правки Go. Мысленный тест обязателен и должен быть в отчёте: что именно придётся дописать для пары, которой в репо нет.
  • V6. Деньги и измеримость. Оценка прироста COGS по слотам инъекции; что мерить и чем (детерминированно, где возможно — «детерминированный скорер > судьи»). Метрика blind speaker attribution — eval-сторона, в пак НЕ входит.

Приёмка фазы 1: отчёт docs/archive/reports/PACK19_DESIGN_<дата>.md — эхо-блок · по каждому V варианты/рекомендация/риски · адверсариальный селф-ревью (линзы: деньги и пере-оплата · durable-схема и миграции · общность §0 · байт-точность и снапшот · граница с ru-target долгом). СТОП — ратификация.

«РОВНО ТАК» для обеих фаз

  1. Annotator-пре-пасс (D21 п.5) — НЕ в этом паке. Это LLM-проход, то есть деньги и отдельное решение; дизайн может на него ссылаться как на будущее.
  2. Только CONFIRMED идёт в инъекцию. Курируемое ≠ намайненное.
  3. Ни одного пар/языкового литерала в Go (§0). Ты/вы, формы обращений, признаки регистра — данные.
  4. Voice-профиль заморожен per-job, пока не доказано обратное (см. базу выше).
  5. Ниты общности едут ЭТИМ паком. Ратифицировано D39.31 п.5: они требуют --resnapshot, а этот пак его и так вызывает — платить дважды за одно нельзя. Оба: множитель expectedHours := n * 2 (internal/checks/checkers.go) → данные пары; Detail-строки чекеров → шаблоны из данных (у второго байт-нейтральной формы НЕ существует определительно — он именно поэтому ждал resnapshot).
  6. Пере-капчер golden — под ратифицированную смену поведения, с доказательством: маскированный структурный дифф обязан быть пуст вне осей, которые пак сознательно двигает. Каждую сдвинутую ось назвать в отчёте отдельной строкой.
  7. Деньги durable не трогаем: reserve→settle+чекпойнт одной транзакцией; инъекция не смеет ослепить потолок (бюджет инъекции входит в оценку).
  8. Никаких платных прогонов. Фикстуры и мок; живой прогон — отдельное решение владельца после лендинга.

НЕ делать

ru-target долг (isRuTarget/TokenizeCyrillic/санитайзер — слой 7, свой дизайн-пак; но проектируй так, чтобы не углублять его) · Annotator · слой-2 детектора · native-Gemini судья · метрики пилота · масштаб на сотни глав · расширение скоупа без пинга.

Мандат самопроверки и приёмка

Ревью ИСПОЛНЕНИЕМ (решение владельца 12.07): сквозные сценарии через настоящий драйвер · мутация на каждую новую ветку (мутация возвращает дефект → тест краснеет) · дифф ^func Test ИСПОЛНЕНИЕМ · заявление = команда (приёмка ре-ранит манифест). Инварианты фазы 2: парити EXACT · -race · golden только под п.6 · сессия НЕ коммитит, git mv декларировать.

Канал вопросов: непонятно / промт конфликтует с кодом или доками → пинг оркестратору через владельца, НЕ тихая интерпретация. Аддендумы доезжают только релеем — подтверди получение строкой в отчёте.