**ПАК ЗАКРЫТ ЦЕЛИКОМ 31.07.2026, АРХИВ.** Дизайн ратифицирован D39.55 (9 инвариантов) · стройка принята D39.56 (схема голоса/обращений v13/v14 с условным фолдом · tu-vous-флаггер · спойлер-лик-флаггер; golden байт-идентичен; девиация target-side атрибуции ратифицирована). Отчёты: `../reports/PACK19_DESIGN_2026-07-30.md` · `../reports/PACK19_BUILD_2026-07-30.md`. # Промт бэкенд-сессии: ПАК-19 «голос и состояние» (ДВУХФАЗНЫЙ: дизайн → ратификация → стройка) **АКТУАЛИЗИРОВАН 26.07 (пост-D39.53), оркестратор №8; дельта 30.07 (пост-D39.54), оркестратор №9.** С момента выдачи (25.07) закрыт ВЕСЬ пак-20 с продолжениями: построены терминолог (роль пар-пака, `internal/terminology`), флаговый стоп `--verify-bank` (дефолт = авто), **авто-провод неподписанного — редакторская инъекция теперь ДВУХСЕКЦИОННАЯ** (закон CONFIRMED + помеченная секция ⟨проверить⟩; ВСЕ строки банка фолдятся в версию памяти — D39.42/45), **точечная ре-редактура по ключу** (bank-only-сдвиг → пере-пин $0 + оплата только затронутых юнитов, `repin.go`), языковой экран `target_script`, дисциплина банкноты (кавычки, агрегация по чанкам); жанровый словарь ОТМЕНЁН КАК КЛАСС (D39.47: решение о переводе = подпись владельца на банк КНИГИ). После этого пака идёт **ХОЛОДНЫЙ мини-прогон** (D39.51 §6: пустой сид, отдельная БД) — твои метрики флаггера попадут в него. Устаревшие места исходного промта исправлены по тексту; при любом конфликте промта с кодом — код и D-лог первичны, пинг обязателен. **Дельта D39.54 (30.07):** залендена малая пачка 14а+14б — ingest епабов переехал на токенайзер `x/net/html` (байт-паритет со старым ридером запинен), а `LoadPromptTemplate` теперь ВЫРЕЗАЕТ `` с провода и хеширует каноническую форму: комментарий в промпт-файле больше не байты провода и не деньги (само-документируй новые промпт-файлы смело, шапка 1–2 строки — норма остаётся). Фикс-лист пачки, закрыть по пути фазы 2 (одна строка): комментарий поля `SHA256` в `pipeline/render.go:89` остался «hash of the raw file» — привести к «канонической форме». **СТАТУС: ФАЗА 1 ИСПОЛНЕНА И РАТИФИЦИРОВАНА (D39.55, 30.07; санкция владельца «идём» получена). ТЕКУЩАЯ — ФАЗА 2, СТРОЙКА. Спека = отчёт `archive/reports/PACK19_DESIGN_2026-07-30.md` (читать С ревью-шапкой) + D39.55. Разделы фазы 1 ниже — контекст, не задание.** ## ФАЗА 2 — ДИРЕКТИВА СТРОЙКИ (оркестратор №9, 30.07) **Первый деливерабл до кода: эхо-блок ≤10 строк + карта файлов/миграций, которые тронешь.** Дальше цикл нормы владельца 30.07: план → синк по вопросам (канал пинга) → исполнение → самоверификация ТОЙ ЖЕ сессией. Приёмка оркестратора будет короткой — груз доказательства в твоём отчёте. **Строим (порядок §3.V1 отчёта, ратифицирован):** 1. Схема: три типа записей банка (voice-профиль · address_pair · reveal = документированный паттерн двух строк, БЕЗ `reveal_ch`) + секции сида + загрузка в ТОЙ ЖЕ транзакции ReplaceGlossary + условный фолд в `memory_version` (образец `editor-unverified-section-v1`). `speech` → deprecated; `first_person` → поле профиля (D39.55 п.2 диспозиций). 2. Флаггер спойлер-утечки: `Selection.Rejected` + `dstFormPresent`; скоуп — «утечка при СРАБОТАВШЕМ ключе» (слепые классы названы в ревью-шапке, не закрывай их молча и не расширяй скоуп). 3. Детерминированный ты/вы-флаггер: свой гейт `gates.voice`, версия НЕ фолдится, логируется с прогоном; оси A–C полноценно, ось D — отдельный счётчик-индикатор с оговоркой точности; счётчики в `retrieval_state` + `QualityReport` (всё с `omitempty`). 4. Данные по V5: T/V-строки в `lang/data/target-ru.txt` · опциональный `speech-cue.txt` пары · алфавит кавычек/порядок кия — данными. Ни одного пар/языкового литерала в Go. 5. Инъекция НЕ проводится — кода за ней нет (дизайн §3.V3 остаётся бумагой до полигона). 6. Фикс-строка из D39.54: комментарий поля `SHA256` в `pipeline/render.go:89` → «канонической формы». **Девять «РОВНО ТАК» из приёмки (D39.55, нарушение = пинг, не тихая девиация):** (а) бюджет инъекции входит в денежный потолок/reserve — закрой абзацем в отчёте (в фазе 1 не закрыто, REFUTED); (б) критик полноты — отдельной секцией отчёта (второй REFUTED фазы 1); (в) `Materialize` получает фильтр типа записи — строки голоса/обращений НЕ попадают в AC-матчер/глоссарную инъекцию (`memory.go:264-270` сейчас матчит всё с непустым Dst); (г) условный voice-тег копирует порядок «исключение скоупом ДО подсчёта условия» (`memory.go:352-357`); (д) свой ключ снапшота для голоса (`voiceSnap` и т.п.) — ЗАПРЕЩЁН, ломает `repin.go:72`; (е) `address_pair` — по стабильному ключу (src+sense), НЕ по autoincrement `glossary.id`; (ж) sticky-carry, отклонённый окном, добавляется в `Selection.Rejected` (`memory.go:495-497` — сейчас молчаливый дроп); (з) включение инъекции (когда-нибудь) = полный `--resnapshot` через consent-гейт; bank-only на флипе не ожидать; (и) v1 переиспользует `GlossaryTokenBudget` в сигнатуре отбора (отдельный voice-бюджет = зеркало в `repin.go:186` — не в этом паке). Опционально, если дёшево: линт «gap в окнах одного src» (сид сейчас грузится молча с дырой). **Самоверификация (обязательна):** сквозные сценарии через настоящий драйвер (mock-провайдер/overlay-тесты) · мутация на каждую новую ветку · дифф `^func Test` исполнением · golden: маскированный структурный дифф ОБЯЗАН быть пуст (фикстура голоса не имеет; непустой дифф = дефект реализации, не смена поведения) · парити EXACT · `-race` · $0, сессия НЕ коммитит. Отчёт: `docs/archive/reports/PACK19_BUILD_<дата>.md`, мерится плотностью. --- **СТАТУС ФАЗЫ 1 (исполнена): СКОУП УРЕЗАН И ПОЗИЦИЯ УТОЧНЕНА АУДИТОМ (`D39.34`, 25.07). Стартует ПОСЛЕ пака-20 «банк» (закрыт целиком, D39.41–53).** Курс D39.33: масштаб последним, доказательство эффективности — мини-прогоны ~10 глав. **Инъекционная часть D21 ратифицирована УСЛОВНО** (D21 п.2: «Схема + детерминированный ты/вы-флаггер — безусловно; инъекционная часть — условно до полигон-эксперимента на ТРУДНЫХ парах»). ## ШАГ 0 — ОБЯЗАТЕЛЬНЫЙ СИНК (норма D39.38, ДО дизайна) Таблица «источник ↔ код ↔ вердикт (совпадает / расходится / не построено)» в отчёт фазы 1. Сверять: D21/`research/15` (ратифицированная база ниже) ↔ **новая реальность банка**: `membank/memory.go` (двухсекционный редакторский блок `editor_unverified_header`, условный фолд `editor-unverified-section-v1`, `ComputeVersionScoped` фолдит ВСЕ строки) · `pipeline/repin.go` (bank-only-сдвиг = точечная ре-редактура — если сущности голоса/обращений фолдятся в версию банка, их поздняя правка наследует этот механизм: спроектировать ЯВНО) · `pipeline/terminologist.go` + `config.TerminologyGate` (прецедент «гейт-конфиг вне снапшота» и роль-сосед по инъекции) · головы D-лога D39.42–54. Расхождение = пинг, не тихая интерпретация. **Статус выдачи: 25.07.2026, оркестратор №8.** Цель — построить последний крупный НЕпостроенный рычаг качества: механизмы D21 (voice-профиль · реестр обращений ты/вы · reveal-окна). Ратифицированы 09.07 как механизмы Ф2, в коде их НЕТ — есть только описания будущих таблиц в комментариях миграций. Пак **двухфазный** (образец паков 16/17): фаза 1 — дизайн + СТОП, фаза 2 — стройка по размеченному списку. **Первый деливерабл — эхо-блок (≤10 строк): скоуп / инварианты / чего не делать. ДО работы.** **Дисциплина ответа, обязательное следование (норма для многословных моделей, владелец 26.07):** эрудиция ≠ улика — каждая рекомендация либо грунтована `file:line`/замером, либо явно помечена «мнение»; не писать лишнего кода и не выходи за свои границы, пиши как профессиональный сеньер; не пересказывай промт и контекст; отчёт меряется плотностью, а не объёмом; шаблонные оговорки и советы вне скоупа не писать; комментарии в коде/данных — 1–2 строки «почему», улики — в отчёт. ## Почему это ответственный пак (контекст, из кода не выводится) 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` 3–5 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-глоссарий > обращения > голос. **АМЕНДИРОВАНО D39.42/45:** «только CONFIRMED» больше не описывает редакторскую инъекцию — она двухсекционная (закон + помеченная секция ⟨проверить⟩). Дизайн обязан ПЕРЕ-ПОДТВЕРДИТЬ D21-приоритет против этой реальности: куда встают обращения/голос относительно ДВУХ секций глоссария, и идёт ли неподписанное голосовое в помеченную секцию или только CONFIRMED (аргумент, не умолчание). - **Экономика D21 п.8:** верхняя граница editor-side инъекции +$0.2–0.3/вебновелла; при драфт-слоте ~+$0.02–0.05. Дороже — повод для развилки, не для тихого списания. ## ФАЗА 1 — ДИЗАЙН (кода не трогать; отчёт → СТОП → ратификация) Каждый пункт — «реши сам и аргументируй»; советы ниже = приоры, опровергаются аргументом или замером. - **V1. Скоуп и порядок — граница ратификации, «ровно так».** Строим БЕЗУСЛОВНУЮ половину: схема трёх сущностей · **детерминированный ты/вы-флаггер** · reveal-окна. **Инъекционная часть ПРОЕКТИРУЕТСЯ, но НЕ проводится в прод** — D21 п.2 держит её условной до полигон-эксперимента на ТРУДНЫХ парах («лифт на лёгких = 0; исход «только флаггер-ось» легитимен и дешевле»), а `internal/store/migrate.go:312` добавляет гейт пилота и лендинга D15.2. Дизайн инъекции обязан быть в отчёте — чтобы полигон знал, что мерить, — но код за ним не идёт до отдельного решения. - **V1-бис. Вход, которого пока нет.** Детерминированному флаггеру нужны speaker/addressee, а их производит Annotator (D21 п.5), которого в этом паке НЕТ. Ответь честно: на каком входе флаггер работает сегодня (атрибуция 说/道 детерминированным пре-гейтом?), и что именно он НЕ поймает без Аннотатора. Плюс требование из реестра памяти: гендер-аннотация нужна НАРРАТИВНАЯ (since_ch-смены + перспектива), а не булево поле. - **V2. Схема и хранение.** Где живут три сущности (типы записей банка против отдельных таблиц), как ложатся на миграции, что делает версия банка со снапшотом, и какова политика append в середине книги. Явно ответь: **что из этого durable, что производное, что пере-оплачивается при правке.** - **V3. Инъекция.** Формат, позиция, бюджет, приоритет; кэшируемый префикс для 2–3 главных героев (стабилен на книгу — кэш почти бесплатен); пер-ролевая разница (переводчик против редактора — реестр `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. **Курируемое ≠ намайненное; неподписанное — только с пометкой** (двухсекционная реальность D39.45; «только CONFIRMED» — амендировано, см. базу выше). 3. **Ни одного пар/языкового литерала в Go** (§0). Ты/вы, формы обращений, признаки регистра — данные. 4. **Voice-профиль заморожен per-job**, пока не доказано обратное (см. базу выше). 5. ~~Ниты общности + флип `RegressionGuard`~~ **ИСПОЛНЕНО ДО ТЕБЯ (мини-прогон, D39.37): флип сделан и дал первое живое срабатывание; множитель ×2 и Detail-строки уехали в данные пары (`dc_ratio`/шаблоны, загрузчик падает громко без них). НЕ пере-делывать.** Нормы замеров D39.46/47 обязательны и для тебя: у измеряемого фактора — арм без него · критик полноты на каждую фазу · право сказать «этого делать не надо», если синк подрывает посылку. 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` декларировать. **Канал вопросов:** непонятно / промт конфликтует с кодом или доками → пинг оркестратору через владельца, **НЕ тихая интерпретация**. Аддендумы доезжают только релеем — подтверди получение строкой в отчёте.