From 282b97db2df5884ad5c654e9733477741570dabc Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Thu, 30 Jul 2026 23:17:06 +0300 Subject: [PATCH] Write the pack nineteen phase two build directive: ratified scope, nine acceptance invariants, self-verification cycle per the owner norm of 30.07 --- ...CKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/BACKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md b/docs/BACKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md index 1ced78e2..cb72cbff 100644 --- a/docs/BACKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md +++ b/docs/BACKEND_PACK19_VOICE_STATE_SESSION_PROMPT.md @@ -4,7 +4,37 @@ **Дельта D39.54 (30.07):** залендена малая пачка 14а+14б — ingest епабов переехал на токенайзер `x/net/html` (байт-паритет со старым ридером запинен), а `LoadPromptTemplate` теперь ВЫРЕЗАЕТ `` с провода и хеширует каноническую форму: комментарий в промпт-файле больше не байты провода и не деньги (само-документируй новые промпт-файлы смело, шапка 1–2 строки — норма остаётся). Фикс-лист пачки, закрыть по пути фазы 2 (одна строка): комментарий поля `SHA256` в `pipeline/render.go:89` остался «hash of the raw file» — привести к «канонической форме». -**СТАТУС: СКОУП УРЕЗАН И ПОЗИЦИЯ УТОЧНЕНА АУДИТОМ (`D39.34`, 25.07). Стартует ПОСЛЕ пака-20 «банк» (закрыт целиком, D39.41–53).** Курс D39.33: масштаб последним, доказательство эффективности — мини-прогоны ~10 глав. **Инъекционная часть D21 ратифицирована УСЛОВНО** (D21 п.2: «Схема + детерминированный ты/вы-флаггер — безусловно; инъекционная часть — условно до полигон-эксперимента на ТРУДНЫХ парах»). +**СТАТУС: ФАЗА 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, ДО дизайна)