# research/19 — Логическая нарезка, меж-чанковая когезия, контракт t/e и дизайн эмпирики (трек B, D39) > Сессия-ресёрчер, 2026-07-16. Промт: `docs/RESEARCHER_CHUNKING_COHESION_SESSION_PROMPT.md`. > НЕ коммитится этой сессией — лендит оркестратор после верификации первоисточников. > > **Протокол независимости (анти-анкоринг, как research/18):** §A написан и заморожен sha256 ДО чтения > стека проекта (код `backend/`, `docs/architecture/*`, `docs/experiments/*`, `docs/research/1-18`). > Верификация заморозки (в команде `[ ]` = пробел — чтобы сама команда, процитированная здесь, не совпадала с маркером): > `sed -n '//,//p' docs/research/19-chunking-cohesion.md | sed '1d;$d' | sha256sum` > — хеш зафиксирован в примечании сразу после закрывающего маркера §A. > > **Поверхность заражения (декларация):** до заморозки §A сессия видела ТОЛЬКО (а) текст промта > (он содержит сводку конфликта exp14 §2Б.4 vs research/18 §A Ось-4, факты полигон-синка, константу > `targetChunkTokens=1500` и список ролей пайплайна) и (б) CLAUDE.md + MEMORY.md (онбординг-контекст). > Ни один файл стека не открывался. Внешняя фактура §A добыта веб-ресёрчем этой сессии: > 8 тем × fan-out + адверсариальная верификация несущих клеймов по первоисточникам (author≠reviewer: > верификатор обязан был РЕФЬЮТИТЬ клейм по первоисточнику; вердикты CONFIRMED/OVERSTATED с коррекциями > отмечены по тексту) + critic-раунд добора (CJK-примитивы, diff-контракт, методология, русские нормы). ## §A — Независимое заключение (ЗАМОРОЖЕНО) ### A.0 Резюме в одно предложение Конфликт «крупный чанк vs мелкий чанк» — ложная дихотомия, потому что слово «чанк» склеивает три независимых параметра: **единицу эмиссии** (сколько модель порождает за вызов), **окно чтения** (сколько она видит) и **единицу связности** (сцена/глава); правильный дизайн — детерминированная нарезка по иерархии границ с оптимизационной упаковкой, мелкая-средняя эмиссия, широкое read-only окно там, где проход этого требует, и когезия, подаваемая МЕХАНИЗМОМ (структурированный стейт + замок терминов + carryover), а не размером единицы. ### A.1 Три размера вместо одного (разрешение центрального конфликта) Внешняя эмпирика расщепляет конфликт по осям: 1. **Единица эмиссии — связывает раньше всего.** Качество длинной генерации падает задолго до документированных лимитов output-токенов: у семи open-weight моделей — резкая деградация перевода на 4k–8k контекста с доминированием omission/under-translation (SEGALE, arXiv:2509.17249); структурированная генерация: open-weight модели сыпятся уже на 2k output-токенов, GPT-4o заметно деградирует на 8k (LongProc, arXiv:2501.05414); выровненные модели 2024 упирались в ~2000 слов (LongWriter, arXiv:2408.07055); окно в 50 предложений теряло 10 предложений перевода при полном исходнике на входе (DelTA, arXiv:2410.08143); paragraph-mode у Karpinska & Iyyer (WMT 2023, aclanthology 2023.wmt-1.41) дал МЕНЬШЕ mistranslation/grammar/consistency-ошибок, чем sentence-mode, но omission были ЗАМЕТНЕЕ (вердикт верификатора: в обоих режимах есть, в paragraph — чаще). У doc-MT деградация концентрируется в ХВОСТЕ документа (position bias: поздние предложения переводятся хуже; arXiv:2412.17592). → Выгода крупной единицы эмиссии съедается тихими потерями, и потери смещены к концу чанка. 2. **Окно чтения — дешевле, чем кажется (кэш), но не бесплатно.** Все четыре провайдера пайплайна кэшируют префикс запроса (официальные доки: Anthropic prompt-caching; OpenAI automatic caching; DeepSeek context caching «hit» ~1–2% цены miss на live-странице июля 2026 — перепроверить перед зашивкой в COGS; Gemini implicit caching), поэтому статичный префикс (система+глоссарий) почти бесплатен при последовательной обработке. Но большое окно чтения не бесплатно по КАЧЕСТВУ: на 2025-моделях деградация с ростом входа сохраняется (Context Rot, Chroma, 18 моделей, июль 2025), и хуже всего — ассоциации с НИЗКИМ лексическим перекрытием (NoLiMa, arXiv:2502.05167: эффективная длина GPT-4.1 ~16k при заявленном 1M), а кросс-язычный глоссарий/память — ровно этот режим. → Read-only контекст держать МАЛЫМ и СЕЛЕКТИВНЫМ, статику — в начало, чанк — в конец (U-кривая Lost in the Middle, arXiv:2307.03172, скоуп — retrieval/QA, не генерация — не овер-обобщать). 3. **Единица связности — не равна ни тому, ни другому.** 7% пар последовательных предложений, хороших по отдельности, ломаются в контексте; из них дейксис 37%, эллипсис 29%, лекс. когезия 14% (Voita et al., ACL 2019, P19-1116 — вердикт: CONFIRMED, ставка 7% от всех пар, не 8.5%). Триггерящий контекст в тест-сетах — ≤3 предложения НАЗАД (дизайн-выбор сета, не природная дистанция); наибольший прирост использования контекста даёт ПЕРВОЕ предыдущее предложение, дальше — убывающая отдача, target-side контекст используется чуть сильнее source-side (CXMI, Fernandes et al., ACL 2021 — вердикт OVERSTATED в части BLEU-дельт, направление подтверждено). Катафора: ~16% местоимений в субтитрах — катафорические, ~37% из них разрешаются СЛЕДУЮЩИМ предложением; +1 предложение вперёд давало измеримый прирост (Wong, Maruf & Haffari, ACL 2020 — CONFIRMED). Длинные зависимости (имена/термины/титулы) закрываются не окном, а ЗАМКОМ первого перевода: proper-noun record даёт +48.5пп консистентности имён на вебновелл-сете (DelTA, GuoFeng) — а в вебновелл-домене именованные сущности + терминология = 62.5% document-level ошибок (BWB, arXiv:2305.11142). → Когезию несут: carryover 1–3 предложения (билингвально, target-side важнее), lookahead ~1 предложение вперёд, замок терминов, — а не рост единицы эмиссии. **Следствие-развязка:** проходам, которым нужно «видеть много» (репараграфизация, сведение связей), не обязательно «переписывать много»: они могут читать сцену/главу и эмитить компактные правки. Наблюдение «крупнее чанк → лучше абзацы» объясняется шириной ОКНА ЧТЕНИЯ у reflow-решений, а «держать чанк мелким» — рисками крупной ЭМИССИИ (ретрай-радиус, omission-хвост). Оба совместимы. Это ПРОВЕРЯЕМОЕ утверждение, и эмпирика §D обязана его проверить, а не принять на веру. ### A.2 Что говорит внешняя фактура о САМОЙ нарезке - **Семантик-чанкинг модель-вызовами не окупается.** Контролируемое сравнение fixed vs semantic: преимущества нет на естественных документах, выигрыши только на искусственно склеенных корпусах (arXiv:2410.13070 — CONFIRMED). LumberChunker (LLM-сегментация нарратива, arXiv:2406.17526 — CONFIRMED) даёт +7.37% DCG@20, но retrieval-only и ценой LLM-вызовов на каждый документ. Вся эта литература — RAG/retrieval; её метрики (recall/IoU) к последовательному полнопокрывающему переводу неприменимы. → Ограничение владельца «границы без модель-вызовов» подтверждается как норма, а не компромисс: индустрия сегментации (SRX, ICU-regex правила) сама детерминированная. - **«Найти сцену» алгоритмически — нельзя рассчитывать.** Первый корпус сцен художки: BERT F1=24% (Zehe et al., EACL 2021 — CONFIRMED); shared task STSS 2021: лучшие F1=37% in-domain / 26% out-of-domain, у людей γ=0.7 (CEUR-WS Vol-3001 — CONFIRMED); NAACL 2025 follow-up: Llama-класс задачу не решил. Вся линейка — одна research-группа (одна нога литературы). GraphSeg на синтетике Pk 5.6–7.2, на естественных документах — ХУЖЕ рандома (Pk 63.56 vs 52.65; Koshorek NAACL 2018 — CONFIRMED). → Дизайн, ЗАВИСЯЩИЙ от верной детекции сцен, построен на песке. Правильная роль сигналов: поверхностные маркеры — высокоточные, когда есть; лексические долины — только РАНЖИРУЮТ кандидатов возле бюджета; всё валидируется на СВОЁМ корпусе, не на Choi-бенчах. - **Поверхностные конвенции доменов реальны и детектируемы.** en-фикшн: сцен-брейк = видимый токен (#/***; Shunn manuscript format). ja-вебновеллы: пустые строки —ШУМ (просто читабельность каждые 5–10 строк), сцен-смена — выделенные разделители *◇◆■○ (Syosetu-гайды). zh-вебновеллы: главы короткие (~2–5k иероглифов, «десять минут чтения»), конвенция 一句一段 (одно предложение — один абзац) → абзацная граница ≈ границе предложения, слабый сигнал; 分割线-орнаменты встречаются. Академической корпусной статистики по zh/ja вебновелл-форматированию НЕТ — только практикумы/платформы (слабая нога; для нас это довод строить рантайм-ПРОФИЛЬ структуры, а не зашивать конвенции). Для zh тема-сегментация работает на символьных биграммах БЕЗ словосегментации и даже лучше словной (+8.84% F, TDT2 broadcast news; одна группа NWPU — одна нога) → Go-скорер когезии на char-биграммах легитимен для zh/ja/ru единым кодом. - **CJK-примитивы предложения — решённая задача с известными краями.** UAX #29: 。!? = STerm; закрывающие 」』)" присоединяются к терминатору (SB9–SB11: разрез ПОСЛЕ 「…。」, не после 。); без терминальной пунктуации внутри абзаца дефолт НЕ даёт границы (SB998), граница абзаца/строки — легальный последний рубеж (CONFIRMED по TR29 + UCD). Pure-Go база есть (clipperhouse/uax29, Unicode 17, официальные тест-сьюты). Замер ja-сегментеров: у всех rule-based нулевые F1-классы (эмодзи/каомодзи/переносы строк — ровно вебновелл-стиль) → сегментер обязан деградировать в «абзац = граница», а не гадать. Оверсайз-предложение zh: запятая — документированная клаузная граница, но классификация запятых даже с ML ~87% (SIGHAN 2004) → детерминированный разрез по ,、;: допустим только как soft-граница с флагом, не как «предложение». - **Токен-бюджет считается оффлайн точно для 3 из 4 вендоров.** DeepSeek — официальный оффлайн-токенайзер (+официальная эвристика zh≈0.6 tok/char); GLM — tiktoken-совместимый rank-формат (загружаем pkoukk/tiktoken-go); OpenAI — tiktoken-go с вшитыми словарями. Gemini — SentencePiece, Go-пакет качает модель в рантайме, покрытие 2.x/3.x не верифицировано; замер на одном тексте: Gemini тратит в 2–2.8× больше токенов на CJK-символ, чем DeepSeek (один датапоинт, реселлер-блог) → для Gemini — вендоренная модель или замеренный ratio с запасом ~20–30%. Кросс-вендорный разброс chars/token для zh — до ~70% (cl100k 2.08× → o200k 1.34× vs английский) → единая константа chars/token НЕБЕЗОПАСНА; калибровка per-language × per-vendor, замеренная на СВОЁМ вебновелл-тексте. Для русского ВЫХОДА опубликованных ratio нет — замерить локально оффлайн-токенайзерами. ### A.3 Дизайн-вывод: алгоритм нарезки (детерминированный Go, без модель-вызовов) Инварианты: (i) никогда не резать внутри предложения; (ii) общность — алгоритм характеризует ЛЮБОЙ вход в рантайме, никакого тюнинга под книгу; (iii) детерминизм — одинаковый вход → байт-идентичные чанки со стабильными ID; (iv) при недоступности сильных сигналов поведение деградирует к «не хуже жадной упаковки по абзацам», с телеметрией деградации. **Шаг 0. Нормализация + структурный профиль (книга/глава).** Unicode-нормализация, унификация переносов; профиль: распределение длин абзацев в токенах, медиана предложений на абзац (line-per-sentence-детект), доля диалоговых строк (「」『』«»"—), плотность и словарь явных разделителей (пустые строки ≥2, орнаменты ***/*/◇/◆/■/○/分割线, внутриглавные заголовки), отношение размера главы к бюджету. Профиль — ВХОД детектора (какие сигналы в этой книге информативны), не приговор книге. **Шаг 1. Кандидаты границ с классами силы.** - **B0 жёсткая структурная**: граница главы/части; явный разделитель (орнамент-строка, ≥2 пустые строки там, где профиль говорит «пустая строка ≠ шум»). - **B1 вероятная сцен-граница**: маркеры сдвига время/место/POV в начале абзаца (per-language лексиконы: 次日/翌朝/三年后/一方/こうして/Наутро/…), переход диалоговый-блок→нарратив, разделители, которые профиль отнёс к слабым. - **B2 тема-сдвиг**: долина лексической когезии TextTiling-типа на скользящих окнах (zh/ja — символьные биграммы; en/ru — стем-токены) + обрыв цепочек упоминаний сущностей (имена из глоссария книги). Только z-score-глубокие долины; сигнал РАНЖИРУЕТ, не утверждает. - **B3 граница абзаца** (в line-per-sentence-режиме — группы строк, склеенные диалоговым контекстом). - **B4 граница предложения** (UAX #29 + CJK-tailoring: Close*-присоединение, 。!?…‼⁇, кавычко-осознанность, аббревиатуры en/ru). - **B5 внутри предложения — разрез запрещён.** Если предложение одно > hardMax: аварийный клауза-сплит по ;:,、 с флагом `oversized_sentence` (телеметрия, деградация не молчит). - **Диалог-констрейнт:** реплики одного обмена (turn-run) — связка; разрез внутри обмена штрафуется сильнее, чем между обменами; реплика не отрывается от атрибуции (слов автора), идентифицирующей говорящего. (Прецедент кодифицируемости таких запретов — Netflix TTSG: «не отрывать X от Y» как конечный список правил.) **Шаг 2. Упаковка — оптимизация, не жадность.** DP по кандидатам границ (аналог Кнута-Пласса): `cost(chunk) = w_size·f(|tokens−target|; недобор дешевле перебора; жёсткие min/hardMax) + w_bound·penalty(класс правой границы: B0=0 < B1 < B2 < B3 < B4) + w_dialog·(разрез внутри диалогового обмена)`. Глобальный минимум суммарной стоимости по главе, O(N·W). Хвост < min — перебалансировка последних двух чанков, не огрызок. Выход: чанки со стабильными content-hash ID + классом правой границы (доля разрезов по B0–B2 vs B3–B4 — наблюдаемая метрика качества нарезки в телеметрии). Бюджеты: target/min/hardMax в токенах ЦЕЛЕВОГО вендора (оффлайн-токенайзер, A.2), и отдельно — прогноз ВЫХОДНОГО размера (ru-ratio × source) против выходного лимита качества, потому что связывает выход (A.1.1): практический стартовый ориентир — эмиссия ~1–3k output-токенов у дешёвых моделей, точное значение — калибровать на полигоне (кривая уже частично есть). **Шаг 3. Фоллбек-лестница (полный веер кейсов).** | Кейс | Поведение | |---|---| | глава ≤ target | 1 чанк (тривиальный) | | глава > target, есть B0/B1 | резать по ним; сцена > target → внутрь B2/B3 | | плоский текст (профиль: line-per-sentence, сцен-маркеров нет) | B2-ранжирование возле бюджета; долины мельче порога → честный B3/B4 через DP (= не хуже жадности) + телеметрия «граница слабая» | | мега-абзац > hardMax | B4 внутри абзаца | | мега-предложение > hardMax | клауза-сплит + флаг | | стихи/песни/письма (плотные короткие строки без терминаторов) | блок целиком, не резать | | эпиграфы/авторские примечания/анонсы | отдельный класс чанка (не смешивать со сценой) | | смешанные конвенции внутри книги | профиль пересчитывается по главе, не по книге целиком | ### A.4 Дизайн-вывод: меж-чанковая когезия Пакет контекста на чанк — весь read-only, порядок от статичного к волатильному (закон всех четырёх кэшей; брейкпоинт Anthropic — на последнем СТАБИЛЬНОМ блоке): 1. **Статика роли** (system, конвенции, мандаты) — кэшируется всегда. 2. **Книжная статика** (глоссарий с замком первого утверждённого перевода; версия = снапшот; сортировка ключей детерминированная — пере-сортировка ломает кэш-префикс). Замок терминов — самый измеренный механизм когезии (DelTA +48.5пп LTCR-1 на вебновеллах; победители WMT24 — терминологические таблицы + editor/critic-агенты). ВАЖНО: LTCR-меряет «залочились на первом переводе», не «первый перевод верен» → гейт draft→approved на первом вхождении — реальная защита от отравления замка. Записи глоссария — кластеры алиасов на СУЩНОСТЬ (имя, курт. имя, титул, А-/-эр-диминутивы), с полом персонажа как первоклассным полем (см. A.6). 3. **Структурированный стейт сцены — слоты, не свободная проза**: кто-на-сцене/где/когда/открытые нити/регистр; билингвальные пары терминов сцены. Инкрементальный свободный running-summary — измеренно худший носитель: удваивает omission-ошибки vs иерархическая сборка (BooookScore, ICLR 2024 — CONFIRMED: entity omission 7.3% vs 3.71% и т.д.), слепое слияние без источника амплифицирует галлюцинации, ре-граундинг чинит (Ou & Lapata 2025). → Стейт собирается детерминированно из банка памяти/источника (перегрунтовка каждый чанк), НЕ LLM-пересказом поверх LLM-пересказа. 4. **Carryover**: хвост предыдущего чанка — последние K предложений источника + их УТВЕРЖДЁННЫЙ перевод (билингвально; target-side важнее source-side — Fernandes/DocRepair). K малое (1–3 предложения; DelTA STM k=3), адаптивно к классу границы (через B0 — можно меньше). 5. **Lookahead +1** (арм эмпирики): первые M предложений следующего чанка, только источник — единственный механизм против катафоры/zh zero-anaphora вперёд (Wong 2020: next-sentence помогает; в zh-диалогах опущено ~26% местоимений — survey arXiv:2305.10196). 6. **Сам чанк** — волатильная часть, всегда cache-miss, это нормально. Деньги/детерминизм: пп.2–5 — производные источника и уже ПРИНЯТЫХ переводов (фолд в снапшот); ретрай чанка не меняет вход соседей (carryover фиксируется порядком обработки); ретрай — байт-идентичным телом (любая приписка «почему упало» — в конец, иначе ломает кэш-префикс); параллельный фан-аут платит полный input N раз, пока кэш не прогрет → warm-then-fan (первый вызов прогревает префикс, остальные стартуют после первого токена ответа) — это прямой конфликт с идеей «параллелизм ради скорости» и обязан попасть в COGS-модель V4. ### A.5 Дизайн-вывод: контракт переводчик/редактор - **Черновик — верный и СТРУКТУРНЫЙ**: 1:1 по предложениям/абзацам источника со стабильными ID сегментов (иначе диффы редактора не адресуемы и omission не детектируем кодом). Paragraph-level вход переводчику (не предложение): 71.1% предпочтения проф-переводчиков, в 12× меньше consistency-ошибок (Karpinska & Iyyer) — но с omission-гардом, потому что paragraph-mode роняет контент чаще sentence-mode. - **Редактор — узкие мандаты, эмиссия = операции, не полный текст.** Ключевая внешняя опора: на сильном черновике en→ru НИ ОДНА APE-система WMT19 не побила do-nothing (16.16 TER/76.20 BLEU; W19-5402 — CONFIRMED), а овер-коррекция — именованная главная проблема APE; LLM-редакторы правят даже заведомо корректный вход (Ki & Carpuat 2024). → (а) у редактора обязан быть первоклассный выход «нет правок»; (б) каждый арм редактуры в эмпирике меряется ПРОТИВ do-nothing-арма; (в) формат «сначала перечисли правки, потом применяй» режет объём правок на ~¼–⅓ без потери качества (Raunak et al. 2023, с коррекциями верификатора). - **Формат диффа — анchored search/replace, НЕ line numbers.** Search/replace-блоки — самый надёжно ЭМИТИРУЕМЫЙ формат на всех размерах моделей (Diff-XYZ, JetBrains 2025: EM 0.68–0.95 generation); mid-tier модели держат 91–98% формат-комплаенса (aider polyglot; DeepSeek-класс 98.2%); оба вендора тренируют модели на context-anchored форматах без номеров строк; применяет — детерминированный Go-apply с ТОЛЕРАНТНЫМ поиском якоря (нормализация пробелов; у aider отключение fuzzy-apply давало 9× больше ошибок) + validate-retry-reject на 2–9% малформед-правок. Слабые модели ниже формат-пола → фоллбек full-regen с anti-omission гардами. Якоря должны быть уникальны в чанке — ещё один довод держать чанк умеренным. Всё это измерено на КОДЕ; на русской прозе бенчмарка не существует → это арм эмпирики, не пресуппозиция. - **Reflow/репараграфизация — отдельный проход «широкое чтение / узкая эмиссия»**: читает сцену/главу, эмитит план переверстки (какие сегменты сливать/делить), применяет код. Это прямой тест развязки A.1: если выигрыш «крупного чанка» по абзацам воспроизводится крупным ОКНОМ при мелкой ЭМИССИИ — конфликт снят. Перепараграфизация под целевые конвенции — легитимная переводческая работа (сплошная практика для zh→en/ru; у русского абзаца — своя композиционная логика), и она ТРЕБУЕТ, чтобы когезия/выравнивание не были прибиты к 1:1 абзацному соответствию. - **Арм «сильный переводчик отдаёт структуру»** — единственное плечо без единого датапоинта (полигон-синк, факт 1): черновик, уже несущий дискурс-решения, может сделать редактора-переписывателя ненужным. Обязателен в §D. ### A.6 Дизайн-вывод: русская целевая сторона — детерминированные линты (дёшево) Русская типографика диалога — замкнутая, регексуемая грамматика (Розенталь §§47–52; ПАС Лопатина §§154–157 — верифицировано по old-rozental.ru/orthographia.ru, с одной коррекцией: двоеточие лицензируется не только глаголами речи): «— » в начале реплики-абзаца; швы атрибуции «, —»/«? —»/ «! —»/«… —» с регистровыми констрейнтами; «?!» в этом порядке; «?..»/«!..» ровно с двумя точками; запятая поглощается многоточием. → Санитайзер/линтер в Go без модель-вызовов, около-нулевые ложные срабатывания. Дальше: пол персонажа — первоклассное детерминированное поле банка памяти («пошёл/пошла» — самый видимый класс дефектов МП в ru по двум независимым источникам: wuxiaworld.ru-редактура и VseGPT-глоссарий-тул); транскрипция имён — Палладий (zh) / Поливанов (ja) как машинные таблицы + детект англо-пивотных артефактов («ши/чи» из Хэпбёрна) с per-book policy-флагом (фандомные конвенции бывают сильнее нормы); китайский бестенсовый → время/вид в ru — изобретение переводчика, консистентность определена только ВНУТРИ сцены → линт тенс-флипов в пределах сцены, ещё один довод резать по сцен-границам. Реплика+атрибуция — неделимая единица и для ЧАНКЕРА (диалог-констрейнт A.3 получает независимое обоснование от целевой типографики). ### A.7 Принципы эмпирики (§D обязан их конкретизировать) - **Пары, кластеры, мощность.** Анализ — на ПАРНЫХ по-главных разностях против общего якоря (Miller, arXiv:2411.00640 — CONFIRMED: naive SE занижает до 3.05×); SE кластеризуются по книге; мощность считается парной формулой (не «unpaired × (1−ρ)» — ошибка ~2×); армы одного пайплайна — «related systems» → K>1 повторов судьи на пару даёт до ~6× меньший детектируемый эффект почти бесплатно (Wang, arXiv:2512.21326). - **Судья.** Пары — в ОБОИХ порядках (position bias в одиночку переворачивал 66/80 вердиктов; arXiv:2305.17926), температура 0, ~10 повторов с мажоритарным голосованием как стартовая норма (arXiv:2606.13685), leave-one-out по судьям, катастроф-скрин к победителю тоже; агрегация fidelity-first. Человеческое чтение — первичный эндпоинт когезии (WMT24 literary: людской и автоматический рейтинги расходятся; протокол 0–5 × {general, discourse} × проф-оценщики, κ=0.86 — прямой цитируемый образец). - **Стоимость.** Эндпоинт — Cost-of-Pass-стиль: ожидаемая цена ПРИНЯТОЙ главы = вся потраченная цена (включая ретраи и вызовы гейтов) / принятые главы (arXiv:2504.13359), ретраи и кэш-хиты репортятся отдельно, per-call кап, каждый скрипт персистит usage/cost. - **Трапы.** Маркированный набор КРОСС-ГРАНИЧНЫХ трапов, построенный ИЗ таксономии Voita + zh-специфики: анафора назад через границу, катафора вперёд, эллипсис/zero-anaphora, смена регистра, сущность-через-границу, тенс-консистентность сцены, пол персонажа. Каждый трап — с ожидаемым поведением; код ПРОВЕРЯЕТ до прогона, что трап реально пересекает границу тестируемой нарезки (иначе — снова неинформативный null). - **Корпус.** Вне претрейна, СТРУКТУРНО РАЗНООБРАЗНЫЙ (плоский CJK line-per-sentence / сцен-маркированный вебновелл / длинно-абзацный европейский / ja-ранобэ); плоская книга — одна точка спектра, не повод сузить продукт. - **Пре-регистрация.** Дизайн, армы, гипотезы, тесты, стоп-правило и мощность — заморожены коммитом ДО первого платного вызова (OSF-поля как чек-лист; van Miltenburg NAACL 2021). ### A.8 Фальсификаторы этого заключения 1. Q2 покажет, что крупная эмиссия выигрывает и на retry-adjusted COGS, и без роста omission (гарды молчат) → развязка A.1 не нужна, «edit=глава» легитимен для дешёвых моделей. 2. Diff-редактура на русской прозе систематически ломается (формат-комплаенс < ~90%, apply-reject высокий, или правки-диффы проигрывают full-regen по качеству) → контракт A.5 откатывается к full-regen + anti-omission гардам; остаётся do-nothing-гейт. 3. B2-сигнал (тема-долины) на реальных вебновеллах неотличим от шума → лестница живёт на B0/B1/B3 + DP (всё ещё лучше жадности), «логическая нарезка» = сцен-маркеры + упаковка. 4. Carryover+стейт НЕ чинит трапы, которые чинит крупное окно (Q3-null при Q2-эффекте) → когезия требует окна; правильная форма — «широкое чтение + узкая эмиссия» в одном вызове (дороже по входу, но кэш-френдли), т.е. развязка сохраняется, меняется носитель. 5. Профиль-детектор структуры нестабилен между главами одной книги (флип-флоп режимов) → профилирование поднять с главы на книгу/арку с гистерезисом. > **Заморозка §A:** sha256 строк строго между маркерами (команда — в шапке файла) = > `1a46548aa75e7f35cc9efc451e9ae20c2ca040d718d0f3a8a686722a0a43f28b`, зафиксирован 2026-07-16, ДО открытия любого файла стека проекта. > Всё ниже написано ПОСЛЕ чтения стека. --- ## §B — Дифф §A↔стек + реализуемый Go-дизайн нарезки и когезии ### B0. Дифф замороженного §A против стека (честно) **Прочитано после заморозки:** `09-target-architecture.md` (§0.1/§2/§4), `08-sync-audit-ledger.md` (L1/L2 целиком), `05-decisions-log.md` (D30–D39), код (`chunker.go`, `chunkrun.go`, `config/pipeline.go`, фрагменты `ingest.go`/`render.go`), `experiments/14-quality-empirics.md` (§2.3–2.7, §2Б), `research/18-quality-levers.md` §A. **Сошлось (§A ⟂ стек, при декларированной общей ноге — промт нёс сводку конфликта):** развязка draft-единицы/edit-единицы = ратифицированная цель слоя 1 (D39 §4, бывший фантом «D35.7»); бюджет в выходных токенах как снапшот-folded кноб (09 §2 слой 1 ↔ §A.3 шаг 2); стратегия границы как first-class ось greedy|logical с фоллбек-лестницей и «никогда не резать предложение» (09 §2 ↔ §A.3); оживление `STMDepth`/`OverlapTokens` под carryover/summary (09 §2 ↔ §A.4); узкие мандаты + диффы у редактора (research/07 через ледджер L1 ↔ §A.5); детерминированные структурные KPI + линты русской типографики (09 слой 5 ↔ §A.6). Три размера из §A.1 (эмиссия/окно/связность) в стеке НЕ различались — там двумерное «draft-единица vs edit-единица»; трёхмерная декомпозиция — вклад этого отчёта, она и порождает недостающий арм Q2c (см. §D). **Самопоправки §A после чтения кода (не меняют §A — фиксируются здесь):** 1. **B4-примитив уже построен и хорош.** `splitSourceSentences` (`chunker.go:219-294`) уже реализует кавычко-осознанную сегментацию с поглощением закрывающих скобок (аналог UAX #29 SB9–SB11 Close*), depth-трекингом 「」『』“” и аббревиатурным гардом. §A.3-B4 = реюз этого кода, не переписывание. Недостающее против ja-краёв (эмодзи/каомодзи/безпунктуационные строки — нулевые F1-классы ja-senter-benchmark) закрывается фоллбеком B3 (граница строки/абзаца), уже совместимым с дизайном. 2. **Sticky-scene уже есть зачаток структурного стейта.** `memory.Select` ведёт exact-match entity ids с пер-главным сбросом (`chunkrun.go:90`, bookrun) — слот «активные сущности сцены» из §A.4.3 надстраивается над этим, а не с нуля. 3. **Кривая exp14 мерила СКЛЕЕННУЮ величину.** В sizecurve рост «чанка» одновременно растил и окно чтения, и единицу эмиссии — ячейка «широкое окно × узкая эмиссия» пуста (это и есть Q2c). 4. **⚠ НОВОЕ (несущее для §D): кривая exp14 §2Б.4 НЕ мерила omission по размерам.** «whole = 7782 out-ток vs 800c = 15159» на ch17 — из чего сколько: снятый дублирующий overhead? слитые абзацы? или ТИХИЕ опущения? Внешняя эмпирика единодушно предсказывает рост опущений с размером эмиссии (Karpinska & Iyyer: omission заметнее в paragraph-mode; SEGALE: omission-доминированная деградация с длиной; DelTA: окно 50 предложений теряло 10 предложений перевода). Если часть «дешевизны» крупного чанка = невыплаченный контент, конфликт exp14↔research/18 разрешается сам собой. Q2 обязан прогнать omission-декомпозицию по размерам — но НЕ длинo-зависимыми гардами (см. reflow-инвариантную метрику в §D3: `RegressionGuard`/coverage считают легитимный reflow опущением — инструмент, смещённый в пользу этой же гипотезы, ею мерить нельзя). 5. **Упаковка в ВЫХОДНЫХ токенах — самопоправка, не «сошлось».** §A.3 шаг 2 держал первичный бюджет в токенах целевого вендора с прогнозом выхода отдельной проверкой; §B1 переворачивает: первичный бюджет = прогноз ru-выхода (fertility-оценка), оффлайн-токенайзеры уходят в одноразовую калибровку. Это движение К 09 §2/`L2-budget-wrong-unit`, фиксирую как явную поправку. **Поправки фактуры §A (вносятся здесь — §A заморожен и не редактируется):** - **[несущая] Провайдер-сет кэша в §A.1.2/§A.4 назван неверно.** «Все четыре провайдера пайплайна» с Anthropic в списке — ошибка: Anthropic в стеке НЕТ (ключей нет, D36.1), а **ZAI/GLM — фактический editor-кандидат и самая дорогая стадия — в списке отсутствует, и его префикс-кэширование НЕ верифицировано**. Верифицированы официальные доки DeepSeek/OpenAI/Gemini (+Anthropic как индустриальный образец breakpoint-механики). Правило двух направлений: ДО опоры warm-then-fan/COGS на editor-стадию — вендор-чек кэша ZAI/GLM (пункт §E.8-бис). Вся кэш-зависимая аргументация (§B3-бис W1, §D-Q2c, §E.1) — условна на этом чеке. - SEGALE: деградация 4k–8k — «у БОЛЬШИНСТВА из семи open-weight моделей», Qwen2.5-72B — явное исключение (стабилен до 4k); §A.1.1 переобобщил. - Разброс chars/token «до ~70%»: несущие числа — КРОСС-вендорные (zh ≈1.0 chars/tok o200k vs ≈1.5–1.7 DeepSeek/Qwen vs 0.8–1.8 Gemini); пара «cl100k 2.08×→o200k 1.34×» — внутри-вендорный генерационный пример (≈55%), в §A.2 они склеены. - Raunak (§A.5): формат «сначала перечисли правки» сохраняет выигрыш над ЧЕРНОВИКОМ, но выигрыш МЕНЬШЕ, чем у прямой полной правки (En-Zh CoT COMET 86.43 vs 87.53); «без потери качества» — сильнее вердикта верификатора. - Метки вердиктов в §A: Voita-клейм помечен CONFIRMED — фактический вердикт верификатора OVERSTATED с коррекцией (8.5%→7%, ошибочная ячейка знаменателя; §A уже цитирует СКОРРЕКТИРОВАННЫЕ числа); SB998-клейм — OVERSTATED (no-break только ВНУТРИ абзаца, SB4 рвёт на ParaSep; §A уже говорит «внутри абзаца»). Метка «CONFIRMED по TR29+UCD» относится только к SB9–SB11/STerm. ### B1. Целевой чанкер (слой 1) — спецификация для Go Инварианты: чистая функция входа (никаких time/rand/map-order — контракт `chunker.go:15-22` цел); общность §0.1 (профиль структуры — вход, не приговор); «никогда не резать предложение»; поведение версионируется `chunkerVersion` + снапшот-folded конфиг по образцу `coverageSnap`. **B1.1 Конфиг (снапшот-folded, вместо const):** ```yaml chunker: strategy: logical # greedy (текущее поведение, байт-совместимый фоллбек) | logical target_output_tokens: 2200 # ЦЕЛЬ в выходных токенах цели (ru), не в символах источника min_output_tokens: 700 # хвост меньше — перебалансировка двух последних чанков hard_max_output_tokens: 3500 # непревышаемый потолок эмиссии (ниже зоны деградации дешёвых моделей) fertility: {cjk_char: 0.75, other_char: 0.25} # src-символ → ru-out-токены; калибруется, см. B1.2 ``` Точечные значения выше — placeholder до кривой §D-Q2 (hard_max=3500 сознательно ВЫШЕ зоны деградации open-weight из §A.1.1 — потолок уточняет Q2, не пресуппозиция); несущее — СХЕМА и единица. Legacy-режим: `strategy: greedy` + бюджет, эквивалентный 1500 src-ток, обязан воспроизводить текущую нарезку байт-в-байт НА УРОВНЕ ЧАНКОВ (golden-инвариант №8 расширить чанкер-фикстурой). Честно про цену: сам ввод chunker-секции в снапшот меняет snapshotID → лендинг = одноразовый `--resnapshot` (полная переоплата in-flight книги, `snapshot.go` это документирует) + сознательный golden re-capture. Примечание по именам: подсекции §B0–§B4 ≠ классы границ B0–B5 (классы — всегда без «§»). **B1.2 Бюджет в выходных токенах — детерминированная оценка.** Упаковщик по-прежнему считает классы символов источника (`tokenClassCounts` реюз), но конвертирует их в ПРОГНОЗ выходных ru-токенов: `est_out = f_cjk·cjk + f_other·other`. Коэффициенты фертильности калибруются ОФФЛАЙН одним eval-скриптом на уже существующих 25-глав rerun-данных (`records.json`: source/final пары): оффлайн-токенайзеры уже ВЕНДОРЕНЫ в репо (`eval/tokenizers/*/tokenizer.json`, HuggingFace-формат, грузятся Python-`tokenizers` — `eval/token_calc.py`; ⚠ `deepseek-v4/` пуст — добрать с оф. сайта); tiktoken — только для OpenAI-энкодингов. «Pure-Go-загрузка» — НЕ обещается до вендор-верификации форматов (правило двух направлений); Go-коду нужны только выкалиброванные КОЭФФИЦИЕНТЫ, не токенайзер. Регрессия out-токенов финалов на (cjk, other) источника; коэффициенты — данные конфига per-language-pair (слой 2), пересчёт = громкий resnapshot. Src-оценка остаётся второй величиной с явным инвариантом: min-бюджет чанкера обязан держать чанки НАД `Gates.Coverage.MinChunkChars` (иначе excision-гейт тихо выключается — документированная граница `chunker.go:42-46`); чанк под флором — телеметрия-линт. (`L2-budget-wrong-unit` требует именно этой развязки двух величин.) **B1.3 Структурный профиль (шаг 0, per-глава + агрегат книги).** Детерминированные счётчики: медиана предложений/абзац (line-per-sentence детект: ≈1), доля диалоговых абзацев (открыватели 「『“«— и т.п.), инвентарь разделителей (строки из орнамент-символов *◇◆■○※*#—═一, ≥2 подряд пустые строки — с поправкой: в ja-вебновелл-конвенции пустые строки = читабельность-шум, сигнал только если их плотность НЕ фоновая), внутриглавные заголовки/номера, отношение размера главы к target. Выход: `StructureProfile{LineSentRatio, DialogueShare, SeparatorLexicon, BlankLineBaseline, …}` — вход детектора границ. Гистерезис: профиль книги = медиана глав; глава отклоняется от книжного режима только при сильном сигнале (анти-флип-флоп, §A.8.5). **B1.4 Кандидаты границ (шаг 1).** Каждой позиции-кандидату — класс силы: - **B0**: граница главы (уже есть через ingest); явный разделитель из профиля (орнамент-строка; пустой блок, если blank-line не фоновый шум по профилю). - **B1**: лексиконы сдвига время/место/POV в первых N символах абзаца (данные слоя 2, per-language: 次日/翌日/三年后/数日后/一方/却说/再说/こうして/翌朝/Наутро/Тем временем/…); переход диалог-ран → нарратив. - **B2**: TextTiling-долина лексической когезии: скользящие окна по w предложений, косинус мешков символьных биграмм (zh/ja; для en/ru — нижний регистр + лёгкий стем), depth-score долины ≥ порога в z-score (μ+kσ по главе). Плюс обрыв цепочки упоминаний сущностей (термы глоссария — Aho-Corasick уже в памяти v2). B2 только РАНЖИРУЕТ кандидатов внутри бюджетного коридора — никогда не «утверждает сцену» (STSS: F1≈37% — на детекцию сцен полагаться нельзя, §A.2). - **B3**: граница абзаца (`splitParagraphs` реюз; в line-per-sentence режиме — границы диалог-ранов, склеенных по профилю). - **B4**: граница предложения (`splitSourceSentences` реюз). - **B5**: внутри предложения — запрещено; предложение > hardMax → аварийный клауза-сплит по ;:,、 с флагом `oversized_sentence` в телеметрию. Диалог-констрейнт: разрез между репликой и её атрибуцией и внутри обмена штрафуется надбавкой (русская типографика делает пару «реплика+слова автора» неделимой — §A.6). **B1.5 Упаковка (шаг 2) — DP вместо жадности.** Стоимость чанка `[i..j)`: `w_size·sizePenalty(est_out; target, min, hardMax — асимметрично, перебор дороже)` + `w_bound·penalty(класс правой границы: B0=0 < B1 < B2 < B3 < B4)` + `w_dialog·(разрез внутри обмена)`. Кратчайший путь по кандидатам (Кнут-Пласс), O(N·W), W = кандидаты в окне hardMax. **Детерминизм всерьёз:** все стоимости — в МАСШТАБИРОВАННЫХ ЦЕЛЫХ (никаких float в путевых суммах — FMA-контракция Go даёт архитектурно-зависимые результаты, а текущий упаковщик чисто целочисленный); B2-скоры (z-score/косинус) квантуются в целые ДО входа в DP; явный tie-break равных путей (раньший разрез, затем сильнейший класс). Недобор хвоста — ЧЕРЕЗ саму DP-стоимость (undersize-штраф последнего чанка), без отдельного пост-пасса ре-баланса (второй код-путь = второй источник недетерминизма). Жадный `strategy: greedy` остаётся отдельной веткой (байт-совместимость + арм Q1). Веса w_* — конфиг, folded. **B1.6 Выход и телеметрия.** `Chunk` расширяется аддитивно (контракт Chapter/ChunkIdx/Text цел): `BoundaryClass` (класс правой границы), `SceneID` (порядковый номер B0/B1-сегмента в главе), `OversizedFlag`. Телеметрия в quality-report (слой 5): распределение классов разрезов (доля B0–B2 vs B3–B4 = наблюдаемое качество нарезки), гистограмма est_out, число аварийных сплитов. ### B2. Фоллбек-лестница — полный веер (реализация §A.3 шаг 3) | Кейс (детектится профилем/размером) | Поведение | Телеметрия | |---|---|---| | глава ≤ target | 1 чанк | — | | глава > target, есть B0/B1 | DP по B0/B1, добор B2/B3 внутри крупных сцен | доля B0/B1-разрезов | | плоский текст (line-per-sentence, сцен-маркеров нет — ранняя арка 蛊真人) | B2-ранжирование у бюджета; долины < порога → DP по B3/B4 (= не хуже жадности) | `weak_boundary` | | мега-абзац > hardMax | B4 внутри абзаца (уже есть: `packSentences`) | — | | мега-предложение > hardMax | клауза-сплит ;:,、 | `oversized_sentence` | | стихи/песни/письма (ран коротких строк без терминаторов, высокая доля B5-невозможных) | блок целиком, не резать; если > hardMax — B3 по строфам | `verse_block` | | эпиграф/авторское примечание/анонс | отдельный класс чанка (не смешивать со сценой) | `paratext` | | смешанные конвенции по главам | профиль per-глава с гистерезисом от книжного | `profile_flip` | | пустые/навигационные главы | как сейчас: не потребляют номер главы (`chunker.go:59-61`) | — | ### B3. Меж-чанковая когезия — оживление `STMDepth`/`OverlapTokens` (слой 1, концерн claim-2) Мёртвые кнобы (`config/pipeline.go:47-48`) замещаются НОВЫМИ явными (`carryover_sentences`, `lookahead_sentences` — не переворачивать единицы старых имён: yaml документирует stm_depth в чанках и overlap_tokens в токенах; старые поля снести — они dead-but-snapshot-live, любая правка и так ре-пинит снапшот): - **Carryover**: хвост предыдущего чанка ГЛАВЫ — последние K предложений ИСТОЧНИКА (реюз `splitSourceSentences`) ∥ последние L предложений его финального ПЕРЕВОДА — **невыровненная** билингвальная пара (⚠ выровненной пары src↔final НЕ существует: редактор легитимно сливает/перестраивает предложения — `chunkrun.go:68-72`; выравнивание появляется только в сегмент-ID-арме §C1). Для L нужен НОВЫЙ версионируемый ru-сегментер (оракульный сплиттер coverage.go — Python-locked, «Do not couple», `chunker.go:24-29`). Target-side важнее src-side (Fernandes/DocRepair, §A.1.3). Прод-значение K=2–3 (DelTA k=3); через B0-границу — 0–1. Деградация: прев-чанк flagged/пуст → src-only carryover (детерминированное правило). **Источник байтов** — сырой текст финального чекпоинта (НЕ `exportNormalize`-проекция: она задекларирована ephemeral/no-wire-touch, `chunkrun.go:224`; потащить её на wire = невент- версионированный трансформ начинает менять request_hash → тихая переоплата класса D5.2). Любой трансформ на carryover-пути (хвосторез, сегментер) версионируется в снапшоте (`carryoverVersion`, дисциплина coverageSnap). - **Lookahead**: первые M предложений СЛЕДУЮЩЕГО чанка ТОЙ ЖЕ ГЛАВЫ (через границу главы M=0 — глава = сцен-ресет, дисциплина sticky), только источник — статически известен чанкеру, не зависит от выходов → параллелизм-безопасен. Закрывает катафору/zh zero-anaphora вперёд (единственный механизм; exp14 A-ref-next не гонялся — Q3-арм). **Гард утечки:** модель может ПЕРЕВЕСТИ lookahead (верхняя граница len_ratio у coverage-гейта не проверяется — `coverage.go` использует только нижнюю) → детерминированный шов-дедуп-детектор в §D-метрики и в прод-телеметрию. - **Структурный стейт сцены (не свободная проза!)**: слоты, собираемые ДЕТЕРМИНИРОВАННО: активные сущности (sticky ids памяти v2 + их dst-формы + пол персонажа — новое поле сида), класс/ID сцены от чанкера, открытый диалог-ран (кто говорил последним, если детектимо по атрибуции). Свободный LLM-running-summary в прод НЕ закладывать: инкрементальный пересказ удваивает omission (BooookScore) и дрейфует без перегрунтовки (§A.4.3); LLM-стейт = Ф2-аннотатор. - **Порядок промта (кэш-закон верифицированных провайдеров — DeepSeek/OpenAI/Gemini; для ZAI/GLM кэш НЕ верифицирован, см. §B0-поправку и §E.8-бис):** [система+мандаты] → [глоссарий, сорт-ключи детерминированы] → [стейт сцены] → [carryover] → [lookahead] → [чанк]. Инъекция — сообщениями: request_hash-довод ВЕРЕН (инъекция = сообщение, хешируется автоматически — resume-детерминизм), но честно про объём работ: реестр `roleInjectionRenderers` сегодня принимает только `[]pickedEntry` и предвычисляется из memSel ДО стадий, `MessagesWithInjection` несёт ОДИН инъекционный слот, а prev-final/next-chunk в `translateChunk` не заводятся — это сигнатурная проводка bookrun→translateChunk→runStage→render (контекст-структура + упорядоченный список блоков), а не «данные + один рендерер». - **Деньги/детерминизм:** в снапшот фолдятся ТОЛЬКО КНОБЫ (K/L/M/веса/версии трансформов — contextSnap-паттерн); БАЙТЫ carryover в снапшот не фолдятся и не могут (снапшот считается ДО цикла, `snapshot.go:190` прямо исключает STM: «пересобирается из чекпоинтов») — байты входят в детерминизм через messages → request_hash и на resume пересобираются из чекпоинтов (`chunk_status.FinalHash → GetCheckpoint`). Ретрай чанка байт-идентичен (постфактум-приписки запрещены — ломают префикс-кэш); ретрай чанка N не меняет вход чанков ≠N+1. - **⚠ Конфликт с параллелизмом (V4-п1/H9), фиксирую явно:** carryover со стороны ПЕРЕВОДА создаёт последовательную цепочку внутри главы. Варианты: (а) параллелить ГЛАВЫ, чанки главы — конвейером (кэш-warm бонус: warm-then-fan); (б) carryover src-only → полный параллелизм, слабее когезия; (в) двухволновый прогон (волна 1 — черновики параллельно, волна 2 — редактура с carryover по цепочке). Решение — владельцу после Q3 (сколько когезии реально покупает target-side carryover). ### B3-бис. Волновая архитектура — параллелизм без потери когезии (вводная владельца, 2026-07-16) Владелец зафиксировал требование (V4-п1/H9 из открытой идеи стало вводной): черновики слать ПАРАЛЛЕЛЬНО чанками; из черновика формировать единый банк памяти; затем редактор чинит термины и точечно поднимает художественность. Разбор «чем жертвуем» показывает, что дихотомия «последовательный vs параллельный» — ложная, как и «крупный vs мелкий чанк» (§A.1): по-настоящему несёт качество последовательность ВОЛН, а не чанков. Ключ — расщепление контекста: - **Source-side контекст параллелизм НЕ ограничивает:** исходник статичен и известен целиком до первого вызова → src-carryover (хвост предыдущего чанка-источника), lookahead (катафора — даже ЛУЧШЕ, чем в последовательном конвейере: вперёд смотреть можно всегда), сцен-стейт от чанкера и глоссарий-сид вкладываются в каждый параллельный запрос волны 1 бесплатно. Анафору/дейксис модель черновика разрешает по ИСХОДНИКУ (якорь в 1–3 предложениях — Voita/CXMI, §A.1.3). - **Target-side контекст нужен РЕДАКТОРУ, не переводчику** (D30.2-сплит: дискурс — работа редактора), а к волне редактуры черновики ВСЕЙ книги уже существуют → редактор получает соседей-черновиков read-only В ОБЕ СТОРОНЫ без какой-либо последовательности. **Волны:** - **W0 (детерминированная, $0):** ingest → чанкер B1 (профиль, DP-границы) → src-контекст-пакеты. - **W1 (черновики, полный параллелизм):** статичный префикс + src-carryover/lookahead + чанк; кэш: warm-then-fan (первый запрос греет префикс, фан-аут после первого токена ответа — иначе параллельные запросы платят full-price input; при DeepSeek-хите ~1–2% цены — копейки, но дисциплина). - **W1.5 (консолидация банка, между волнами = снапшот-граница, НЕ mid-run-append):** глобальный майнинг термин-кандидатов по ВСЕМ черновикам + реконсиляция алиас-кластеров/пола + подпись владельца на спорных (дисциплина сида цела). Глобальная пост-хок консолидация КАЧЕСТВЕННО лучше онлайн-замка первого перевода: замок награждает консистентность-с-первым, даже плохим (LTCR-отравление, §A.4.2), а иерархическая сборка состояния измеренно бьёт инкрементальную (BooookScore, §A.4.3). Это же — V4-п4 glossary-auto-build. - **W2 (редактура, параллельна):** узкие мандаты §C + банк-enforce + draft-соседи как carryover. - **W2.5 (опционально, по Q5):** «швейный» микро-пасс ТОЛЬКО по границам чанков — читает зону стыка двух отредактированных чанков, эмитит диффы (blast-radius = шов); параллелен по швам. - **W3 (reflow-план по сценам §C1.3):** параллелен по главам/сценам. **Цена параллелизма (что реально теряем):** (а) термин-разнобой ВНУТРИ черновиков — чинится W1.5+W2 (в вебновелл-домене сущности/термины = 62.5% document-level ошибок, все банко-адресуемы — BWB); (б) швы между независимо отредактированными чанками — W2.5/Q2c; (в) carryover от уже-ОТРЕДАКТИРОВАННОГО соседа (последовательный конвейер) vs от ЧЕРНОВИКА соседа (волна) — дельта неизвестна и ИЗМЕРИМА: расщеплённый Q3-арм (§D). **Что покупаем:** wall-clock (дни → часы на книгу в тысячи чанков); **ретрай без каскада** — в последовательной схеме с target-carryover ретрай чанка меняет вход всех последующих (каскадная переоплата, боль снапшота), в волновой ретрай изолирован; глобальный банк vs локальный замок. Следствие для B3: carryover проектируется в ТРЁХ режимах (src-only | draft-сосед | final-сосед), режим — конфиг волны; §E.1 снимается, вопрос владельцу переформулирован (§E.1-новый). ### B4. Что сознательно НЕ строить (анти-скоуп, из верифицированной фактуры) 1. **Семантик-чанкинг модель-вызовами / LLM-сегментация (LumberChunker-класс)** — retrieval-only выгоды, цена и недетерминизм; владелец это и запретил, литература подтверждает (§A.2). 2. **ML-классификатор сцен** — F1≈24–37% на самом задокументированном корпусе; хуже честной лестницы с DP (§A.2). 3. **Эмбеддинг-границы** — GraphSeg-урок (хуже рандома на естественных документах) + зависимость от модели в детерминированном контуре. 4. **Свободный LLM-running-summary в прод-контуре** — см. B3; до Ф2 стейт только детерминированный. 5. **Симметричный RAG-оверлап (дублирование текста в двух чанках)** — недетерминированный дедуп на склейке; вместо него carryover/lookahead read-only (перевод каждого предложения принадлежит ровно одному чанку — лосслесс-тайлинг `chunker.go:123-124` цел). --- ## §C — Контракт переводчик/редактор (концерн 1; для эмпирики, не прод-приговор) ### C1. Целевой контракт ролей - **Переводчик = верный СТРУКТУРНЫЙ подстрочник** (формализация текущего поведения, не смена): 1:1 к предложениям источника, зеркалит построчную структуру (это НЕ баг — это выравнивание: делает omission детектируемым кодом и диффы адресуемыми), reflow НЕ делает. Инертный reflow-однострочник из translator.md убрать / заменить явным «подстрочник, НЕ переверстывай» (ледджер `L1-split-intended-not-accident`). Локус «reflow у переводчика» из Q4-вопроса промта закрыт так: слабая форма (однострочник) эмпирически инертна (research/18 §A.2, exp14) — не арм; сильная форма (дискурс-решения в черновике) тестируется Q4a «сильный переводчик». Опция «сегмент-маркеры» (нумерация предложений в черновике) — суб-фактор арма Q4b (Q4b±маркеры), не пресуппозиция: маркеры делают адресацию правок тривиальной, но меняют wire-формат (санитайзеру их снимать). - **Редактор = узкие проходы вместо 4-мандатной full-regen:** 1. **Fidelity-проход (диффы):** src+draft → список операций «якорь→замена» ТОЛЬКО про смысл (полярность/числа/ранги/опущения/термины). Первоклассный выход — «правок нет» (WMT19 en→ru: ни одна APE-система не побила do-nothing на сильном черновике; LLM-редакторы правят даже корректный вход — гейт снаружи обязателен). 2. **Стиль-проход (диффы или full-regen — арм):** де-кальки, живой русский; глоссарий-констрейнты как сейчас. 3. **Reflow-проход = широкое чтение / узкая эмиссия:** видит СЦЕНУ/главу (все чанки read-only), эмитит ПЛАН переверстки — группировку сегментов в абзацы + типографику диалога, применяет КОД. План структурно omission-safe: валидатор требует «каждый сегмент использован ровно один раз» — перестановка/слияние возможны, потеря НЕВОЗМОЖНА (в отличие от full-regen, где полнота держится на честности модели). Это прямой тест развязки §A.1: выгода «крупного чанка» по абзацам должна воспроизводиться крупным ОКНОМ при мелкой эмиссии. - **Гейты между проходами** — уже построенное: coverage (переводчик), RegressionGuard (длина/числа), санитайзер, glossary post-check; диспозиция D2 «первый флаг стопит чанк» цела. ### C2. Дифф-протокол (спека для эмпирики) - **Формат: anchored search/replace-блоки** (самый надёжно эмитируемый: Diff-XYZ EM 0.68–0.95; mid-tier 91–98% комплаенса на aider; оба вендора тренируют на context-anchored форматах). НИКАКИХ номеров строк/сегментов в якоре (если нет сегмент-маркеров арма Q4). - **Go-apply толерантный:** якорь ищется с нормализацией пробелов/пунктуационных вариантов; неоднозначный якорь (≥2 совпадений) → reject операции (не тихое применение первого); якорь не найден → reject; reject-rate — телеметрия. (aider: отключение толерантного apply = 9× ошибок.) - **Петля**: малформед/reject → 1 регенерация → далее операция ОТБРАСЫВАЕТСЯ (черновик остаётся) — blast-radius одной правки, а не чанка. Формат-комплаенс per-model — метрика Q4; модель ниже ~90% комплаенса на русской прозе → full-regen-фоллбек с гардами (весь формат-корпус — код, на прозе НЕ мерен: это гипотеза для эмпирики, не факт). - **Cache-друг**: черновик в промте = стабильный префикс; правки — компактный суффикс-выход (выходные токены — доминанта COGS: дифф-редактор радикально дешевле full-regen по out-токенам). ### C3. Порядок и do-nothing дисциплина Порядок проходов: fidelity → style → reflow (reflow последним: он видит уже верный текст; его план не трогает содержимое сегментов). Каждый редакторский арм в эмпирике меряется ПРОТИВ do-nothing (экспорт черновика как есть). Уточнение: exp12 draft-only арм ($0) ставился и судился — не ставилось другое: КАЖДЫЙ editor-арм против do-nothing на пре-регистрированных метриках (exp14 этого не имел); APE-фактура говорит, что планка нетривиально высокая. «Сначала перечисли правки, потом применяй» (Raunak: −¼–⅓ объёма правок с сохранением выигрыша над черновиком, но меньшим, чем у прямой полной правки — коррекция верификатора) — дисциплина промта fidelity/style-проходов. ### C4. Арм «сильный переводчик» (Q4, чистое поле) Единственная ячейка без датапоинтов (полигон-синк факт 1; ледджер `L1-translator-structure-arm-never-tested`). Гипотеза: черновик, уже несущий дискурс-решения (эксплицитация zh-нулевых местоимений, верная полярность), сжимает мандат редактора до стиля+реflow → меньше инверсий (корень D34.3 — конкуренция мандатов). Кандидаты арма: deepseek-v4-pro / mistral (оба чинят a1-класс как редакторы, exp14b) / gpt-5.4 (диагностика потолка); слаги — live-фактчек `/models` перед прогоном (гардрейл). --- ## §D — ПРЕ-РЕГИСТРИРОВАННЫЙ дизайн полигон-эмпирики (исполняет полигон-сессия, отдельный промт) > Этот §D — дизайн-оф-рекорд; полигон при исполнении фризит его коммитом ДО первого платного вызова > и НЕ меняет пост-фактум. **Фриз пинит НЕ только слаги/цены/капы, но и: коммит-хеш бэкенда, > хеш сида-снапшота, хеши промт-файлов (translator/editor v3), конфиги инъекции** — трек A > параллельно мутирует pipeline-код (грязное дерево на 16.07), и «поплывший» A0 испортил бы все > контрасты; любое изменение после первого платного вызова = новый experiment-ID. Мандат самопроверки > (CLAUDE.md): ревью ИСПОЛНЕНИЕМ своего кода + сформированных запросов + результатов — в каждый скрипт. ### D0. Материал: структурно-разнообразный корпус (инвариант общности §0.1) Срезы (билдеры в репо: `gu_corpus_build.py`, `ja_corpus_build.py`, `en_corpus_build.py`, `jpm_corpus_build.py`, `webnovel_slice.py`): - **S1 плоский CJK** — поздние главы 蛊真人 вне уже-юзанного раннего среза (line-per-sentence, мало маркеров) — точка «фоллбек-режим». - **S2 сцен-маркированный zh-вебновелл** — срез с реальными разделителями/сдвигами сцены (подбор билдером по плотности маркеров; гейт «вне претрейна» — свежие главы) — точка, где Q1 вообще может дифференцировать. - **S3 ja-ранобэ** — line-per-utterance диалоги, безатрибуционные реплики (нагрузка на carryover и пол/говорящего). - **S4 длинно-абзацный европейский (en)** — контроль общности (профиль обязан переключить режим). Объём: 8–12 глав на несущий срез (S1/S2), 3–4 на контрольные (S3/S4). **Скоуп per-срез (честно про слой 2):** платные армы перевода — только S1/S2 (zh→ru — единственные прод-промты; D39: контент слоя 2 = только zh→ru); S3/S4 — ЧАНКЕР-профилирование и нарезка ($0, детерминированная валидация общности §0.1); платить за ja/en-переводы риг-промтами = мерить не прод-контракт, не делаем. Претрейн-каветы: S1 (蛊真人) — широко скрейпленная книга, претрейн-гейт НЕ проходит — S1 валиден для нарезки/структуры и внутрипарных контрастов, «вне претрейна» несёт S2. До прогона: структурный профиль каждого среза печатается в отчёт (проверка, что срез РЕАЛЬНО задействует рычаг — иначе снова неинформативный null, урок полигон-синка). ### D1. Маркированный трап-набор (закрывает §D-1 аудита «locus когезии не размечен») Типы (из верифицированной таксономии Voita + zh-специфика + русская целевая сторона): | Тип | Что ловит | Пример конструкции | Кто должен чинить | |---|---|---|---| | T-ana | анафора назад через границу (zh zero-subject, антецедент в чанке i, реализация в i+1) | 他/она-эксплицитация | carryover (Q3) | | T-cat | катафора вперёд (референт в i+1) | «Это был…» → имя в следующем чанке | lookahead (Q3) | | T-ell | эллипсис/восстановление сказуемого через границу | zh-эллипсис глагола | carryover | | T-ent | сущность-через-границу (термин/титул введён в i, повторён в i+1) | 四代族长-класс | глоссарий+carryover | | T-gen | пол говорящего/деятеля через границу (ru прошедшее время) | «пошёл/пошла» | стейт (пол в сиде) | | T-tense | тенс-консистентность внутри сцены через разрез | нарративное время | сцен-граница (Q1) | | T-reg | смена регистра/голоса на сцене | вежливость/просторечие | стейт+carryover | | T-inv (контроль) | внутри-чанк инверсии a1-класса (двойное отрицание, 没有一个不知道) | exp14b-батарея реюз | editor-модель (НЕ нарезка) | **Дисциплина маркировки:** - Кандидаты добываются LLM-майнингом + ручной отбор; **майнер-модель фиксируется в пре-реге и ИСКЛЮЧАЕТСЯ из судейского пула** (и не совпадает семьёй с арм-моделями) — иначе трапы преднагружены. - **Стратификация по дистанции антецедента** (публикуется per-трап): квота X трапов в пределах K=3 предложений (зона carryover) и Y трапов ДАЛЬШЕ K (зона, которую чинит только окно/Ф2) — без неё майнинг естественно наберёт короткие зависимости, и Q3a «выиграет» по построению, а Q2c-специфичные длинные — недосэмплируются. - **Минимальный N на несущий тип: ≥20** (T-ana/T-ent/T-tense; остальные ≥10); недобор → домайнить главы до квоты, иначе тип помечается «Q недоказуем a priori» ДО платных вызовов (не после). - **Общий знаменатель контраста (анти-null-игра):** трапы определяются как пересекающие границу В ЯКОРЕ A0; в ОБОИХ армах контраста скорится ОДИН И ТОТ ЖЕ набор. Пересёк/не пересёк границу в арме — записываемая КОВАРИАТА (она и раскладывает «починено сдвигом границы» vs «починено механизмом»), НИКОГДА не фильтр включения: иначе Q1/Q2a-арм теряет кредит ровно за те трапы, которые он чинит переносом границы (встроенный ложный null), а армы становятся несравнимы. Исключаются только трапы, не пересекающие границу НИ в одном арме контраста. - Ожидаемое поведение каждого трапа записано до прогона (span + правильный/неправильный исходы). ### D2. Армы — целевые 2-арм контрасты к общему якорю (НЕ факториал) **Якорь A0:** прод-кандидат post-D38.5: flash `v1-reflow` → glm-5 `v3` (P1a-дискурс+чэнъюй), greedy-1500, без когезии; RegressionGuard ON; сид reseed-промоутнутый. **На несущем срезе S2 якорь генерится ДВАЖДЫ** (temp>0): само-расхождение A0↔A0′ = floor шума генерации, и любой Q-эффект меньше этого floor не интерпретируется. **Декларация анти-сходимости:** все контрасты делят один якорь → их «победы» коррелированы и НЕ суммируются в нарратив «N сигналов сходятся» (D32.4); повторы судей давят только судейский шум, НЕ шум генерации якоря. | Q | Контраст (одна переменная) | Первичная метрика (ОДНА; остальное вторично) | Что разрешает | |---|---|---|---| | **Q1** | A0 vs **logical-граница** (§B1.4/B1.5-DP); **size-match:** DP-бюджет подгоняется так, чтобы распределение est_out совпало с фактическим A0 (±10% по среднему; оба распределения — в пре-ран профиль), иначе класс границы конфаундится размером | T-tense+T-ana точность на S2 (общий знаменатель) | чинит ли ЛОГИЧЕСКАЯ граница когезию (претензия-2), или граница ≪ когезии | | **Q2a** | A0 vs **edit=глава**: draft-стадия ПРИКОЛОЧЕНА к A0-нарезке (greedy-1500), крупнеет ТОЛЬКО единица эмиссии редактора (⚠ exp14-sizecurve ресайзил draft+edit+окно вместе — реплицировать нельзя, атрибуция потеряется; суб-арм «draft тоже глава» — опционально при бюджете) | retry-adjusted cost-of-pass при reflow-инвариантном omission (см. §D3) не хуже A0 | сторону exp14: «дешевле и лучше» — выживает ли после omission/retry-поправки | | **Q2b** | реюз sizecurve-артефактов (800/1600/3200/whole, ch17/13) + omission-скоринг существующих выходов ($0 генерации). **Скоуп: ТОЛЬКО ре-атрибуция кривой exp14** («сколько дешевизны = тихие потери») — промт там до-v3, 2 главы, greedy; сегменты с записанными err-фолбэками исключить (`sizecurve_costs.jsonl`). Ратифицировать/опровергать «edit=глава» для v3-пайплайна Q2b НЕ может — только Q2a | reflow-инвариантный omission per size | дешёвая проверка §B0.4 | | **Q2c** | A0 vs **широкое-чтение/узкая-эмиссия** (эмиссия=чанк, окно=сцена/глава read-only). ⚠ Кэш-условность: editor=glm/ZAI, его префикс-кэш НЕ верифицирован (§B0) — пре-рег обязан вендор-чекнуть; стоимость репортить as-billed И cache-normalized, дисциплина вызовов warm-then-sequential | T-ana+T-tense точность (общий знаменатель с Q2a) при out-токенах ≈ A0 | РАЗВЯЗКА §A.1: воспроизводится ли выгода крупного «чанка» одним окном без крупной эмиссии | | **Q3a** | A0 vs **+carryover (K=3)** — ТРИ режима: src-only / **draft-сосед** / final-сосед. Стейт сцены — ОТДЕЛЬНЫЙ суб-арм Q3a′ (carryover+стейт), атрибуция по типам: carryover не чинит T-gen, стейт не чинит T-ell | T-ana+T-ell точность per режим (Q3a′: T-gen/T-reg) | клейм research/18 Ось-4 + **цена параллелизма** (дельта draft↔final = что теряет волновая модель B3-бис; дельта src↔draft = что даёт target-side) | | **Q3b** | A0 vs **+lookahead M=2** (src-only, параллелизм-безопасен; шов-дедуп-гард включён) | T-cat точность (A-ref-next — пустая ячейка exp14) | нужна ли катафора-ветка | | **Q5** | параллельно-отредактированные стыки vs те же стыки после **швейного микро-пасса** (W2.5, диффы по зоне шва) | шов-дефект-рейт (T-tense/T-reg на швах) | нужен ли W2.5 в волновой модели, или Q2c-окно закрывает швы дешевле | | **Q4a** | A0 vs **сильный переводчик** (draft=deepseek-pro или mistral, editor тот же) + **суб-арм strong-draft+do-nothing** (иначе glm-редактор пере-ломает то, что черновик починил — T-inv по D-логу editor-модельное свойство, ложный null по построению) | fidelity-трапы ЧЕРНОВИКА до редактора (span) | чистое поле «структура у переводчика» | | **Q4b** | A0 vs **diff-based fidelity+style редактор** (§C2; суб-фактор ±сегмент-маркеры) | trap-точность (T-inv) fidelity-first при формат-комплаенсе ≥90% (иначе арм признаётся неисполнимым) | жизнеспособность диффов на русской прозе | | **Q4c** | A0 vs **reflow-план отдельным пассом** (§C1.3) | KPI абзацев (mean_spp) при omission-инварианте (=0 структурно — проверить валидатором) | где живёт reflow | | **Q0** | A0 vs **do-nothing** (экспорт черновика) | эквивалентность-тест (TOST-стиль) с пре-рег маржой M на trap-точности и KPI: «A0−do-nothing < M» — НЕ «в пределах шума» (не-значимость ≠ эквивалентность) | нижняя планка редактуры (APE-урок); обязателен | Порядок исполнения: Q2b (бесплатно, ре-атрибуция) → Q1+Q3 (несущие, S2-срез) → Q2a/Q2c → Q4. Каждый Q — стоп-гейт: полигон вправе остановиться при исчерпании бюджета, пре-рег фиксирует приоритет; НО стоп после Q2b НЕ закрывает центральный конфликт (Q2b — ре-атрибуция, не вердикт). ### D3. Метрики и агрегация (methodology-guard D32.4 + внешняя методология) - **Reflow-инвариантный omission (ГЛАВНЫЙ omission-инструмент, пре-регистрируется и валидируется ДО скоринга армов):** длинo-зависимые гарды (`RegressionGuard` длина-коллапс, coverage-соотношения) СМЕЩЕНЫ против крупных чанков — editor.md явно разрешает слияние предложений/абзацев, и объём reflow растёт с размером → они считают легитимный reflow «опущением», фабрикуя гипотезу B0.4. Вместо них: по КАЖДОМУ предложению источника — присутствие его семантических атомов (числа, сущности/глоссарий-хиты, полярность отрицания) ГДЕ УГОДНО в целевом чанке. Метрика один раз валидируется на вручную вычитанном whole-chapter выходе, потом скорит армы. - **Детерминированные (код, $0):** mean_spp / доля 1-предложенческих абзацев / диалог-тире / CJK-утечка / glossary-консистентность (LTCR-стиль по сиду) / доля разрезов по классам границ / шов-дедуп-детектор (lookahead-армы) / **позиционный градиент ВНУТРИ арма**: детерминированные флаги (атом-omission, число-дрейф) по относительной позиции в чанке (кросс-арм сравнение хвостов некорректно — разные абсолютные позиции; «качество» головы/хвоста — судейское, не $0). - **Карта независимости сигналов (пропущенный D32.4-гард — тот самый, на котором горели дважды):** пре-регистрируется граф «метрика→драйвер»; метрики с общим драйвером (длина выхода: out-токены, mean_spp, длино-гарды) считаются ОДНИМ сигналом в любом мульти-сигнальном выводе; вывод «сигналы сходятся» требует ≥1 длинo-независимого сигнала (trap-точность, span-верность). - **Trap-скоринг:** span-цитирующие судьи ≥2 кросс-семейных (не из семьи армовой модели И не семья майнера трапов), temp 0, каждый пейр в ОБОИХ порядках; повторы: 6 голосов, при расколе ≤4:2 — добор до 10 (пре-рег правило эскалации; ослабление против §A.7-нормы «~10» — бюджетная поправка, фиксируется явно), leave-one-judge-out, катастроф-скрин К ПОБЕДИТЕЛЮ тоже; fidelity-first агрегация; никакого pooled-style-взвешивания. - **Стоимость:** cost-of-pass = вся цена арма (ретраи+гейты+кэш-хиты раздельно в usage) / принятые главы; ретраи и кэш-статистика репортятся отдельно; per-call predicted-cost кап ДО каждого вызова. - **Агрегация:** ПАРНЫЕ по-главные разности арм−якорь ВНУТРИ среза; кластер-робастные SE по книге НЕ считаются (несущий срез ≈ одна книга = 1 кластер, оценка не определена) — вместо этого генерализация на «любую книгу» честно декларируется ограничением, закрываемым S1–S4-разнообразием; K>1 судейских повторов = дешёвый множитель мощности (армы родственные); мощность честно: на 8–12 главах разрешимы только средние/крупные эффекты — потому первичны ТРАПЫ (высокосигнальные, размеченные, N≥20 на несущий тип), не holistic-скаляры. Один первичный контраст на Q; остальное — Holm-Bonferroni. - **Слепота владельца:** финалисты — слепые пакеты (как exp14b h2h), метки перемешаны. **Человеческий эндпоинт — гейтящий:** метрики НОМИНИРУЮТ арм в прод-кандидаты, финальное решение — слепое чтение владельца (планка 2 претензий, D35); ни один арм не ратифицируется в дефолт только по метрикам. ### D4. Бюджет и реюз Реюз $0: sizecurve-выходы (`exp14/sizecurve/*`), A-ref-prev/both, `material.json→trap_chunks`, exp14b-батарея a/b/c/d (T-inv), 25-глав rerun (`records.json`) для калибровки фертильности B1.2. Новые траты: генерация армов на S1/S2 (дешёвые модели: ~$0.01–0.03/глава-арм) + судьи (доминанта; бюджет судей ПЕРЕСЧИТЫВАЕТСЯ в пре-реге из trap-N × повторы × 2 порядка × ≥2 судей, не наоборот) — грубая оценка всего пакета **$8–15** в рамках ключей D36.1 (~$9/ключ, **кроме Gemini ~€2.6** — аддитивный thinking-биллинг; судейские семьи выбирать с учётом этого); точные капы полигон фиксирует в пре-реге с live-ценами. DeepSeek: кэш-hit ~1–2% цены miss — последовательный прогон чанков с общим префиксом почти обнуляет input-COGS (проверить live-цены; для ZAI/GLM кэш не верифицирован — §E.8-бис). ### D5. Дерево решений (пре-рег) Правило чтения: у каждого Q — ровно одна первичная метрика (таблица §D2), порог и направление фиксируются в пре-реге числом; ниже — ветвление по первичным метрикам, вторичные только объясняют. - **Q2a/Q2c:** Q2a-первичка (cost-of-pass при omission-инварианте) лучше A0 И Q2c НЕ воспроизводит выгоду окном → edit=глава легитимен (§A.8.1). Q2c воспроизводит (его trap-первичка ≥ Q2a при меньшей эмиссии) → развязка «мелкая эмиссия + широкое окно». Reflow-инвариантный omission растёт с размером → exp14-кривая переатрибутируется, мелкая эмиссия + когезия механизмом. - **Q1:** первичка (T-tense+T-ana на общем знаменателе, S2) сдвиг ≥ пре-рег порога → строить §B1.4/B1.5-DP; null на S2 (не только на плоском S1!) → граница вторична, приоритет когезии (Q3). - **Q3a/Q3b:** знаменатель = кросс-граничные трапы, которые A0 ПРОВАЛИВАЕТ; carryover чинит ≥50% этого знаменателя → оживление carryover ратифицируется (режим — по дельте src/draft/final и решению владельца §E.1); null при верифицированно пересекающих → когезия требует окна (Q2c-форма) или Ф2. - **Q4a:** суб-арм strong-draft+do-nothing судится по fidelity-трапам ЧЕРНОВИКА: сильный черновик чинит ≥ пре-рег доли T-inv, которые flash-draft валит, при COGS ≤ пре-рег потолка → арм «структура у переводчика» в прод-кандидаты (полный Q4a-пайплайн тогда меряет, не ломает ли редактор починенное). - **Q4b:** формат-комплаенс <90% ИЛИ fidelity-first trap-точность хуже full-regen → диффы откладываются (D-лог закрывает NEVER_CLOSED D21.4/D21.10 явно, не молча); ≥90% и атом-omission=0 → дифф-редактор в прод-кандидаты. - **Q4c:** mean_spp ≥ A0 И атом-omission=0 (валидатор плана) при COGS ≤ A0×1.3 → reflow живёт отдельным пассом; иначе reflow остаётся в editor-промпте (v3 как есть). - **Q0:** эквивалентность (TOST, маржа M из пре-рега) A0↔do-nothing на первичках → мандаты редактора на этих осях пересматриваются (APE-урок в действии); НЕ-отвержение без эквивалентности = «данных мало», не «редактор бесполезен». - **Финал любой ветки:** прод-кандидат → слепое чтение владельца (гейтящий эндпоинт, §D3). --- ## §E — Открытые вопросы (владельцу / бэкенду / оркестратору) **Владельцу:** 1. **[переформулирован после вводной 16.07 — волновая модель принята за рабочую]** Волновая архитектура B3-бис отвечает на параллелизм; остаточный вопрос: если Q3a покажет заметную дельту «final-сосед > draft-сосед» (цена параллелизма ненулевая) — готовы ли принять гибрид «чанки главы конвейером, главы параллельно» для финального прохода, или скорость приоритетна безусловно? Плюс: W1.5-консолидация банка предполагает вашу подпись на спорных термах МЕЖДУ волнами — ок ли такой человеческий гейт в середине прогона книги (UX ридер-дерева)? 2. **Пол персонажа в сиде** — новое первоклассное поле схемы глоссария (T-gen-класс дефектов — самый видимый в ru). Расширение схемы = ваша подпись (approved-инвариант). 3. **Транскрипция имён как per-book policy** (Палладий/Поливанов vs фандомные формы) — флаг книги, детерминированно энфорсится; надо ли сейчас или в слой 2 позже? 4. **Бюджет пакета §D** (~$8–15 оценочно) — ок в рамках ключей? **Бэкенду (трек A, к сведению — стройка гейтится §D):** 5. `Chunk` расширяется аддитивно (BoundaryClass/SceneID/OversizedFlag); контракт Chapter/ChunkIdx/Text не трогается; golden — чанкер-фикстура на legacy-эквивалентность greedy. ⚠ Лендинг chunker-конфига в снапшот сам по себе = одноразовый `--resnapshot` (полная переоплата in-flight книги) + сознательный golden re-capture — плановое событие, не сюрприз (§B1.1). 6. Кнобы когезии — НОВЫЕ имена `carryover_sentences`/`lookahead_sentences` (не переворачивать единицы мёртвых `stm_depth`(чанки)/`overlap_tokens`(токены); те снести — они dead-but-snapshot-live). 7. Дифф-apply машинерия (§C2) — та самая парковка D21.4/D21.10; спека здесь, стройка после Q4b. Плюс carryover-путь требует: новый версионируемый ru-сегментер (НЕ оракульный из coverage.go) + `carryoverVersion`-фолд + проводка prev-final/next-chunk через translateChunk (§B3). 8. **Проверить слаги DeepSeek до 2026-07-24:** официальная дока объявила deprecation legacy-имён `deepseek-chat`/`deepseek-reasoner` 24.07 15:59 UTC (маппинг на v4-flash). Конфиг на `deepseek-v4-flash/pro` — вероятно не задет; eval-скрипты проверить грепом (правило двух направлений). 8-бис. **Вендор-чек префикс-кэша ZAI/GLM (до опоры на warm-then-fan/COGS-выводы):** GLM — фактический editor и самая дорогая стадия; его кэш-семантика/скидка НЕ верифицированы (официальная дока z.ai/bigmodel.cn, правило двух направлений). Вся кэш-экономика §B3-бис/Q2c условна на этом чеке. **Оркестратору:** 9. §D исполняется полигоном ПОСЛЕ вашей верификации этого отчёта (author≠reviewer соблюдён: я не гоняю платную эмпирику). Приоритет: Q2b — бесплатный и бьёт прямо в центральный конфликт. 10. Веб-фактура отчёта: 65-агентный workflow; 52 клейма получили явный вердикт верификатора (36 CONFIRMED / 16 OVERSTATED с коррекциями — коррекции внесены в текст или §B0). Полное приложение (клеймы + URL + вердикты) — `docs/research/19-chunking-cohesion-sources.md` (лендить вместе или отдельно — на ваше усмотрение). Пост-хок само-ревью отчёта: 5-линзовый адверсариальный workflow (репо-грунтовка / верность цитат / методология §D / Go-реализуемость / консистентность) — 8 MAJOR-находок исправлены в тексте до сдачи (общий знаменатель трапов, Q2a-конфаунд, reflow-инвариантный omission, двойной якорь A0, карта независимости сигналов, снапшот-механика carryover, невыровненный билингв-хвост, кэш ZAI не верифицирован).