# 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 '/<!-- SECTION-A-FROZEN-BEGIN[ ]-->/,/<!-- SECTION-A-FROZEN-END[ ]-->/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-контракт, методология, русские нормы).

<!-- SECTION-A-FROZEN-BEGIN -->
## §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. Профиль-детектор структуры нестабилен между главами одной книги (флип-флоп режимов) →
   профилирование поднять с главы на книгу/арку с гистерезисом.
<!-- SECTION-A-FROZEN-END -->

> **Заморозка §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 не верифицирован).
