# research/16 — Ридер-IDE: выравнивание, статусы доверия, HITL-редактура (2026-07-11)

> **⚠ Ревью-шапка оркестратора (12.07, D29; тело ниже не редактировалось).** Вердикт адверсариального ревью (4 оси: 2 источник-батча по первоисточникам, независимая реплика $0-пробы, red-team контракта против кода/D15.2-спеки): **ACCEPT_WITH_FIXES — абсорбция через D29**. Ядро выводов (чанк=несущий якорь; калибровка YELLOW важнее покрытия; детект-флаггер вместо форс-структуры; «не вырезание» — подтверждено и усилено) — выживает. Поправки чтения:
> 1. **Числа §0 — верхний край метрик-диапазона, база устарела.** Проба считана по stale-экспорту (ch1/4 показан красным при redriven-OK в store; сама проба напечатала `<<MISMATCH`-варнинг — проигнорирован) и с багом выбора draft-попытки («самый длинный ответ» вместо `final_hash` — length-обрезок бывает длиннее). По DB-истине: **57.4% точно / 70.4% ±1 / агрегат 0.9695; редактор 49/54=90.7%** (не 93%); чистый драфт 59.3%. Хуже: адаптивная метрика абзаца схлопывает смешанную вёрстку 13/54 финалов — line-based определение даёт **44.4%**, т.е. «58%» = верх диапазона **44–58%, зависящего от определения абзаца**; сравнение с внешними 60.2% (предложения!) — только направление. Полоса arity-паспорта обязана пиновать определение. Из «двух худших» чанков только ch14/1 — настоящее слияние; ch19/1/ch1/4 — артефакты вёрстки.
> 2. **Новое требование к экспорту (находка реплики): 8/54 финалов содержат markdown-заголовки `###`** — финалы пайплайна не чистый plain text; нормализация выхода — в экспорт-контракт.
> 3. **«Контракт полностью из read-model» — оверклейм.** Существует/деривабельно $0: state, flag_reason, escalated+model, postcheck [{src,dst}], cost, цвет. **Net-new машинерия**: `src_range/dst_range` (у Chunk нет офсетов; канонического ассемблера/экспорт-команды в tmctl нет), `source_file_hash` (нигде не считается), спаны style-флагов (не персистятся), `paragraph_anchors`. Для annot-v1: paragraph_anchors — ТОЛЬКО детерминированная позиционная пара при равном числе абзацев (иначе absent); aligner-based — Ф3 после zh→ru spot-check (§4.1 противоречил собственному §2.4 «выравниватели не прод»). dst_range — nullable/эфемерный (сдвигается на redrive/экспорте).
> 4. **Passport-клейм неверен при gate-on**: glossary_miss УЖЕ катится в attention/fail через ChunksFlagged (status.go:238-282) — 3-тир rollup = явный амендмент вердикт-правила D12/exp07 (ратифицировать, сохранив консистентность с exit-кодом translate), не «доделка». RED определять ДОПОЛНЕНИЕМ (flagged && reason≠glossary_miss), не перечислением (в перечне §3.1 нет coverage_fail; энум — 13, не 12).
> 5. **human_override: две ловушки пингов.** «Ключ по content_hash чанка» — в кодовой базе content_hash = хеш ОТРЕНДЕРЕННЫХ msgs (с инъекцией/STM) → ложные re-review при любой правке глоссария; ключ = **хеш сырого src-текста** (нового поля сегодня нет). «Verdict-нейтрален как post-check» — неверно: override обязан подавлять redrive и менять эффективный цвет = новое provenance-состояние, консультируемое redrive/status/export. Четыре interaction-клейма (redrive-клоббер/resume-безопасность/resnapshot-переоплата/отсутствие override в D15.2-спеке) — подтверждены кодом/grep. «Не кормить в TM» — верный вывод через несуществующий механизм: чекпоинт-кэш ключится bookID+chapter+chunk (утечь в другие чанки НЕ может по построению); реальный вектор утечки — глоссарий/память книги.
> 6. **Диалог-аварный флаггер — не «$0 сейчас»**: новый cheap-gate класс = bump cheapGateVersion → снапшот/golden (до D15.2); заводить с пакетом D15.2 (verdict-side) и калибровать на конфиге-победителе exp12 — stage-A вёрстка (построчные абзацы от промптов, exp12 §2.5-S) будет снесена reflow-фиксом, её парность-числа устареют by design.
> 7. **exp12-совмещение precision-замера — только post-hoc** против УЖЕ существующих заметок владельца (пре-регистрация exp12 заморожена; фрейм из 3 чистых глав не мерит RED и мал для <10%-гейта — тот требует отдельного прохода по 25 главам и гейтит только показ цветов Ф3).
> 8. Источник-ниты: QE4PE «>2× редактор-уровень» — только en→it (en→nl −33%), спан-диапазон 1.8–4.6×; VS Code rollup «worst-child+счёт» — наш синтез (у VS Code бейдж только на файлах, 9+); Liu&Dai N=31 — студенты MTI, preliminary; **Bertalign — GPL-3.0, не «MIT-ish»**; 89% Gale-Church — корпус UBS, не Hansard; нумерация «пакет №4» устарела → целевой пакет = D15.2.

**Мандат:** `docs/READER_IDE_RESEARCH_SESSION_PROMPT.md` (владелец 10.07). Спроектировать бэкенд-выхлоп под фронт Ф3 (VS Code-подобный ридер: дерево глав слева · оригинал|перевод в центре · панель команд справа · цветная полоса статуса книги снизу с ползунком). Рамка: **выхлоп = экспорт-артефакты (annotations/anchors/сборка), НЕ веб-сервер** (API/SSE — Ф3). Цвета — из ДЕТЕРМИНИРОВАННЫХ вердиктов пайплайна, не из LLM-самооценки (logprobs недоступны у половины стека — research/14).

**Метод** (research/13–15): мультиагентный веб-ресёрч (13 сборщиков по 5 кластерам) → адверсариальная верификация несущих клеймов по первоисточникам (13 refute-by-default верификаторов; вендор-клейм ≠ замер; доки/скриншоты CAT-тулзов — источник поведения) → completeness-критик. 26 агентов, 0 ошибок, ~1.23M токенов, 652 веб-обращения. Плюс **$0-проба парности абзацев** на реальном прогоне этапа A (read-only). Живых LLM/перевод-вызовов: **$0** (только чтение веба и сохранённых выходов). Каждый несущий факт — URL+дата, вердикт CONFIRMED / PLAUSIBLE / REFUTED.

**Зона записи:** этот файл + секция `## Ридер-IDE` в `PROGRESS.md`. `architecture/*`, `backend/`, `eval/` — read-only; расхождения — пингами. Ничего не коммичено (примет оркестратор).

---

## TL;DR — вердикт

1. **Гипотеза оркестратора подтверждена, но расщепляется на две линии доказательств.** «Страница — артефакт рендера; якорить узлы/абзацы, не страницы» — **CONFIRMED** всеми серьёзными инструментами (Gale-Church «беды», InterText, bilingual_book_maker, Immersive Translate — ни один не якорит страницу). Но «синхронизация двух панелей скроллом по ближайшему якорю с N:M split-diff» и «якорь-абзац» — из РАЗНЫХ источников: потребительские ридеры якорят строго 1:1 по узлу (без N:M), а N:M-беды и «флагать не-1:1 первыми» — из выравнивателей/редакторов (InterText). Ни один shipped-ридер не делает оба сразу. **Правильный паттерн — не свободный скролл-синк двух панелей (он дрейфует на N:M), а КО-ЛОКАЦИЯ спаренных якорей** (интерлив ИЛИ общая строка-грид, как InterText).

2. **Наш козырь реален: атом соответствия рождается в пайплайне.** Академический атом выравнивания — «бед» (минимальный N:M-сегмент Gale-Church), а не предложение и не страница; наш **чанк = именно бед** (src_range↔dst_range по построению, чанкер lossless, версионирован). Пост-хок выравниватели (bertalign) нужны только для КАНОНИЧЕСКИХ переводов в eval/пилоте, не в проде.

3. **$0-проба (наш прогон этапа A): парность абзацев src↔перевод = 58% точно / 72% в ±1**, агрегатное отношение абзацев 0.987 (структура сохранена в объёме). **Расхождение рождается на ДРАФТЕ (редактор glm-5 сохранил число абзацев в 93% чанков), и это ЛЕГИТИМНОЕ слияние/дробление абзацев, не тихое вырезание** (границы двух худших чанков целы, объём нормальный). Внешняя литература это ровно предсказывает: китайско-английский литературный перевод — **60.2% 1:1 на уровне предложений** (Bertalign/MAC), структурный текст — 85% абзацев 1:1 (JRC-Acquis). Наши 58% для CJK-литературы — норма жанра, не поломка.

4. **Самая консеквентная находка для продукта — не про якорь, а про КАЛИБРОВКУ жёлтого.** Лучший замер (QE4PE, TACL 2025, 42 профредактора): подсветка ошибок — даже точная модельная QE — НЕ ускоряет пост-редактуру и раздражает, когда «часто это не настоящие ошибки». Подсветка **якорит усилие**: подсвеченные места правят в 2–4.6× чаще независимо от точности подсветки. Индустрия (Google Tricorder <10% ложных на чекер; alert-fatigue: клиницисты игнорят 49–96% алертов, а потом и критические) сходится в один закон: **преимущественно-жёлтая полоса бросается целиком, утягивая красное.** ⟹ Для нашей полосы **точность (precision) каждого флага важнее покрытия**; калибровка YELLOW — гейт перед показом цветов, не косметика.

5. **Контракт под фронт полностью выводится из УЖЕ существующего read-model** (`status.go`): цвета = проекция полей disposition/passport/retrieval_state ($0, как `status --json`, который D12 строил «для CI/IDE»). Единственные net-new вещи — `annotations.json`-схема, политика красных, **human_override** (в D15.2 не спроектирован — самый контрактно-опасный кусок; аналог CAT «locked segment» + PerfectMatch/X-Translate content-keyed carry-over) и chat-edit фрагмента.

---

## 0. $0-проба парности абзацев (главный технический вопрос владельца, направление 2а)

**Данные (read-only):** `acceptance/guzhenren-25ch-parallel.txt` (src↔ФИНАЛ-пары по чанкам с флагами) + `acceptance/guzhenren-acc-a.db` checkpoints (draft vs edit по стадиям). Это **боевой прогон этапа A** — 蛊真人 zh→ru, 25 глав, draft `deepseek-v4-flash` → моно-редактор `glm-5` — тот самый конфиг, который владелец прочитал и назвал нечитаемым (D26). Метрика абзаца адаптивная (пустая строка, иначе одиночный \n). Скрипт: `scratchpad/parity_probe.py`; полный вывод: `scratchpad/parity_results.txt`.

**57 чанков: 53 переведённых (ОК) + 4 красных (2 cjk_artifact, 2 length).**

| Метрика | Значение |
|---|---|
| Парность абзацев src↔финал: **точно (Δ=0)** | **31/53 = 58%** |
| в пределах **±1 абзаца** | 38/53 = 72% |
| dst БОЛЬШЕ абзацев (Δ>0, дробление) | 10/53 = 19% |
| dst МЕНЬШЕ абзацев (Δ<0, слияние) | 12/53 = 23% |
| агрегатное число абзацев src / dst | 1823 / 1799 = **0.987** |
| худшие: Δ=−18 (гл14/1, 42→24), Δ=−10 (гл19/1), Δ=+8 (гл12/0) | |
| объём ru/zh (видимые символы) mean/med | **3.00 / 2.99** (диапазон 2.56–3.62) |

**Где ломается парность:** редактор glm-5 **сохранил число абзацев в 50/54 = 93% чанков** (Δ med 0, mean −0.19); драфт deepseek vs источник — 56% точно. ⟹ **расхождение рождается на стадии ДРАФТА/переводчика, не редактора.**

**Слияние vs вырезание (адверсариальная проверка):** ни один чанк с потерей абзацев не имел аномально низкого объёма (гл14/1 объём 2.73, гл19/1 — 3.13, выше среднего). Ручной осмотр двух худших: открывающая и закрывающая фразы ЦЕЛЫ, слиты внутренние короткие описательные/диалоговые строки в плавные русские абзацы. ⟹ **это легитимная репараграфизация (слияние/дробление), а не тихое вырезание.** Гейт покрытия (отношение длин) и дельта абзацев согласны — контента не потеряно.

**Оговорки пробы:** (а) 58% — уровень абзацев, внешние 60.2% — уровень предложений; направление совпадает, но это НЕ эквивалентность (кросс-гранулярность); (б) одна книга / 25 глав / один конфиг — предварительно до вебновелл-среза других книг; (в) «draft==src 56%» включает 4 эхо/length-чанка (их драфт — китайский эхо), так что чуть занижает истинную парность драфта. **Робастные заголовки: editor-93%, end-to-end 58%/72%, объём 3.0×.** (NB: «~1.9×» из промта — в ТОКЕНАХ; в символах zh→ru ~3× из-за плотности ханьцев. Оба верны.)

**Интерпретация → иерархия якорей.** Чанк — единственный lossless, пайплайн-нативный якорь (всегда точный). Абзац — best-effort (58% точно). Предложение — самое N:M. **Иерархия деградации: глава → чанк (нативный, точный) → абзац (~58% точно) → предложение.** Панели скроллятся по границе ЧАНКА; парность абзацев внутри чанка — мягкий оверлей (подсветка при наведении), никогда не «страница=страница».

---

## 1. Прайор-арт HITL-редактуры машинного перевода (направление 1, центр мандата)

### 1.1 CAT-инструменты: единица, статусы, цвета — два ОРТОГОНАЛЬНЫХ канала

Единица выравнивания у всех — **сегмент (≈предложение), одна строка грида: src-ячейка | dst-ячейка | статус**; но каждый явно моделирует не-1:1 абзацную структуру (Trados «paragraph unit» + кросс-абзацный merge выкл. по умолчанию; Align даёт Split/Merge/Insert). CONFIRMED: memoQ ([the-grid](https://docs.memoq.com/current/en/Workspace/the-grid.html), accessed 2026-07-11), Phrase ([Segments-TMS](https://support.phrase.com/hc/en-us/articles/5709678012828-Segments-TMS)), MateCat ([segment-status](https://guides.matecat.com/segment-status)).

Ключ: **статус (workflow: not-started/draft/translated/reviewed/approved/rejected) и MATCH-RATE/провенанс (TM/MT/термбаза/fuzzy%) — ДВА отдельных цветовых канала; match-rate ИНФОРМИРУЕТ, но НИКОГДА не гейтит сегмент** (CONFIRMED across memoQ [translation-results-list](https://docs.memoq.com/current/en/Workspace/translation-results-list.html), Phrase [CAT-Pane](https://support.phrase.com/hc/en-us/articles/5709683926812-CAT-Pane-TMS), Trados). Конкретные оттенки НЕ канон (memoQ Help Center сам расходится: Edited=pink vs brown; всё перекрашиваемо) — **переносим МАППИНГ цвет→смысл, не оттенок.**

⚠ **Конвенция, которую надо решить осознанно (weak-spot верификатора):** во всех CAT **непереведённое = серый/белый (memoQ «Not started»=grey, MateCat NEW=white), а RED = человеком ОТКЛОНЁННОЕ** (memoQ Rejected, Trados Rejected, Phrase unconfirmed red-X). Владельческая схема «RED=провал/не переведено» СТАЛКИВАЕТСЯ с этой конвенцией. И: **ни один CAT не использует «жёлтый=редактировать-первым» как СТАТУС** — машинно-заполненное-но-непроверенное получает СВОЙ цвет (memoQ blue/orange, Trados blue Draft, MateCat blue), отличный от красного «проблема». → см. §3 калибровку и рекомендацию по grey/4-му тиру.

### 1.2 QE/confidence-подсветка — на чём основана

**Любой продукт, показывающий ЧИСЛОВОЙ per-segment score, берёт его из ОБУЧЕННОЙ reference-free QE-модели, а не из агрегата детерминированных правил** (CONFIRMED: Phrase QPS = обученный MQM-предиктор 0–100, [QPS-Overview](https://support.phrase.com/hc/en-us/articles/5709672289180-Phrase-QPS-Overview); Custom.MT «0–100 из learned QE моделей», [custom.mt](https://custom.mt/machine-translation-quality-estimation/); ModelFront/ModernMT). QE по определению reference-free ([WMT QE task](https://www.statmt.org/wmt19/qe-task.html)). Trados/Language Weaver **MTQE = per-segment светофор green/amber/red из обученной QE** (CONFIRMED, [Studio-2024 docs](https://docs.rws.com/en-US/trados-studio-2024-1145319/support-for-machine-translation-quality-estimation-mtqe--1147923); прямой fetch 403, подтверждено сниппетами). **Книго-широкая цветная СТАТУС-ПОЛОСА из QE-score — реальный UX** (Custom.MT над Trados: зелёная при score≥порог; [custom.mt](https://custom.mt/machine-translation-quality-estimation/)) — валидирует концепт нижней полосы владельца.

**Следствие для нас (жёсткое):** у нас нет ни QE-модели, ни logprobs на половине стека → **любое число было бы выдумкой**, ложно намекающей на существование оценщика. ⟹ **НЕ показывать числовой confidence. Показывать НАЗВАННЫЕ детерминированные флаги** (наши ~12 flag_reasons — доменный экземпляр стандартной QA-таксономии: числа/теги/терминология/длина/непереведённость, как memoQ QA / Xbench / Verifika). Опционально: offline-прогон COMETKiwi как ОТДЕЛЬНАЯ метка (eval-tool, не $0-гейт) для проверки, коррелирует ли детерминированный YELLOW с низким learned-QE.

### 1.3 Post-editing исследования: подсветка ПОМОГАЕТ или МЕШАЕТ? (несущий вопрос)

Refute-by-default; замеры, не вендор-клеймы:

- **QE4PE (TACL 2025, 42 профессиональных пост-редактора) — CONFIRMED, сильнейший источник:** пословная подсветка ошибок — даже точная модельная QE — **НЕ ускоряет пост-редактуру систематически** и не даёт разницы в качестве; supervised (XCOMET-XXL) vs unsupervised (MC-dropout) — без значимой разницы; редакторы: подсветки «часто не были настоящими ошибками», «раздражают». Подсветка **ЯКОРИТ усилие**: подсвеченные места правят в 2–4.6× чаще, подсвеченные редакторы правят >2× независимо от точности подсветки, а точность автоматической QE — только ~0.20–0.28. ([arxiv 2503.03044v2](https://arxiv.org/html/2503.03044v2), 2025-03).
- **Shenoy et al. (EMNLP 2021) — CONFIRMED (N=17 finder-reported):** QE должна достичь **>80% F1, прежде чем вообще помогать**; градиентная/uncertainty-визуализация предпочтительнее жёсткого бинарного red/green.
- **Liu, Dai & Li (MT Summit 2025, N=31) — CONFIRMED:** СЕГМЕНТ-уровневая (грубая, приоритизирующая) QE значимо снизила время PE (p=0.02), но интервью: неточная QE МЕШАЕТ. ([2025.mtsummit-1.38](https://aclanthology.org/2025.mtsummit-1.38/)).
- **Green et al. (UIST 2014) — CONFIRMED:** интерактивный MT на 19–22% МЕДЛЕННЕЕ, но чуть выше качества; Lilt «substantial productivity gains» — маркетинг без контролируемого замера (REFUTED как измерение).

**Вывод (курс-задающий):** план владельца — цвета из ДЕТЕРМИНИРОВАННЫХ вердиктов + YELLOW=«редактировать первым» — согласуется с данными. НО та же литература — предупреждение: **неточный флаггер пере-якорит редактора на ложные срабатывания и читается как помеха. Precision/калибровка YELLOW важнее покрытия; предпочтителен градуированный, а не жёсткий бинарный цвет.**

### 1.4 Издательские MT-пайплайны с UI

- **Mantra Engine (ближайший аналог) — CONFIRMED:** редактор **страница-оригинал СЛЕВА / AI-перевод СПРАВА + правая панель управления**, атом = речевой пузырь, правки в edit-box отражаются в баллоне в реальном времени ([pixivision](https://www.pixivision.net/en/a/7427)) — ровно центральная раскладка владельца в shipped-инструменте. Engine классифицирует пузырь (standard/thought/scream/narration), детерминированно ПРЕДЛАГАЕТ шрифт/размер → человек валидирует ([mantra.co.jp](https://mantra.co.jp/en/news/mantra-an-ai-manga-translation-startup-jointly-develops-manga-typesetting-specification-engine); бета 1516 стр., 73% удовл. — self-reported). Модель выравнивания опубликована (AAAI 2021, «Towards Fully Automated Manga Translation»); коммерческий confidence/flag-слой — НЕ опубликован.
- **XL8 MediaCAT — PLAUSIBLE (маркетинг):** флагает сегменты **warning-иконками** для ревью + «детектирует неопределённости выше порога» (механизм не раскрыт) — концептуально наш YELLOW, но на уровне сегмента, не книго-полосы.
- **НОВИЗНА (PLAUSIBLE, absence-of-evidence):** ни один найденный продукт (Mantra/XL8/Nuanxed/CAT/дашборды) не показывает **книго-широкую цветную полосу с ползунком ВНУТРИ ридера, из детерминированных per-chunk вердиктов**. Прецеденты покрывают куски (per-segment цвета, warning-иконки, %-прогресс, QE-хитмапы), не эту сборку. Наш синтез — новый (при скрининге, не FTO).

### 1.5 Фан-стек — прайор-арт «alignment born in pipeline» + forced structure

- **GalTransl — CONFIRMED:** атом = name-message JSON (одна реплика на объект), src↔dst держится строгим 1:1 index-мэппингом кэша (`pre_jp/post_jp/pre_zh/proofread_zh`); ships детерминированный (no-LLM) **error-finder из 8 категорий, почти 1:1 совпадающих с нашими flag_reasons** (残留日文≈cjk_artifact, 丢失/多加换行≈парность строк, 词频过高≈loop_degenerate, 比日文长≈length, 字典使用≈glossary_miss) + per-категорийный redrive через `retranslKey` ([README](https://github.com/GalTransl/GalTransl/blob/main/README.md?plain=1)). Прямой аналог нашего per-flag redrive.
- **SakuraLLM — CONFIRMED:** дрейф числа строк — first-class задокументированный режим отказа: системный промпт запрещает менять `\n`, цель обучения — «понизить вероятность расхождения числа строк», а `translate_epub.py` СЛЕПО падит `''`/усекает выход под число групп ([translate_epub.py](https://github.com/SakuraLLM/SakuraLLM/blob/main/translate_epub.py)). Даже спец-модель под сохранение строк не устраняет дрейф.
- **Синтез (CONFIRMED):** каждый LLM-batch-инструмент ФОРСИРУЕТ фикс-число строк и потом компенсирует поломку (sentinel-замена \n в AiNiee — «не 100% сохраняется»; pad/truncate в SakuraLLM/bilingual_book_maker; post-hoc флаги в LinguaGacha/GalTransl). **Никто не заявляет надёжного сохранения.** Валидирует наш выбор lossless-чанкера над forced line-by-line и рамкует 58%/72% как согласованное с прайор-артом, не дефект чанкера.
- Коррекция верификатора: не заявлять output-side CJK-детект как наш дифференциатор (GalTransl/LinguaGacha его делают); дифференциатор — chunk-disposition/passport-поверхность. LinguaGacha 3-классный ResponseChecker — только deepwiki (AI-gen), НЕ primary-sourced.

---

## 2. Якорение оригинал↔перевод (направление 2)

### 2.1 Атом соответствия — «бед», не страница и не предложение

- **Gale-Church «беды» (Moore, AMTA 2002; Brown) — CONFIRMED:** любой параллельный корпус выравнивается последовательностью МИНИМАЛЬНЫХ сегментов-«бедов», где предложения идут 1:1, 1:2, 2:1, 1:0, 0:1 (изредка 2:2/3:1). **Бед — не предложение и не страница — атом выравнивания, и он явно N:M** ([sent-align2](https://www.microsoft.com/en-us/research/wp-content/uploads/2002/10/sent-align2-amta-final.pdf)). ⟹ наш **чанк = бед**.
- **Все серьёзные инструменты якорят текстовый УЗЕЛ/сегмент, никогда рендер-страницу — CONFIRMED** (InterText строки=сегменты; bilingual_book_maker вставляет per-`<p>`; Immersive Translate «абзац — минимальная единица»; практики зовут page-alignment «page-aligned, if that» — грубым полом). Прямо подтверждает «страницы — артефакт рендера».
- **InterText (LREC 2014) — CONFIRMED:** параллельный редактор = **двухколоночная таблица, строка = бед, ячейка держит ЛЮБОЕ число предложений** (N:M в одной строке); колонки залочены на общий строка-грид — не могут дрейфовать; **подсвечивает не-1:1 строки как «содержащие большинство ошибок» — для ревью первыми** ([LREC-2014-Vondricka](https://mt-archive.net/10/LREC-2014-Vondricka.pdf)). Точный прецедент YELLOW=«редактировать первым» и ко-локации спаренных якорей.

**Уточнение гипотезы (PLAUSIBLE, частичный refute):** гипотеза расщепляется. (а) «якорить узлы, страницы=артефакт» — из потребительских ридеров (bilingual_book_maker вставляет перевод как sibling-узел после `<p>`, [epub_loader.py](https://raw.githubusercontent.com/yihong0618/bilingual_book_maker/main/book_maker/loader/epub_loader.py); Immersive Translate — абзац по умолчанию, [old-docs](https://github.com/immersive-translate/old-docs/blob/main/README_english.md)); НО они пар­ят строго 1:1 по узлу, N:M-подвыравнивания НЕ делают. (б) «N:M split-diff, флаг не-1:1» — из выравнивателей/InterText. **Не-дрейфующий синк достигается КО-ЛОКАЦИЕЙ спаренных якорей (интерлив или общий строка-грид), НЕ скролл-синком двух свободных панелей** (Word/Acrobat sync привязан к offset/странице, дрейфует на N:M — [try67](https://www.try67.com/tool/acrobat-reader-synchronized-scrolling-two-or-more-pdf-documents)).

### 2.2 Парность LLM-перевода — что известно (валидирует пробу)

- **Bertalign/MAC — CONFIRMED:** китайско-английский ЛИТЕРАТУРНЫЙ перевод — **60.2% 1:1 на уровне предложений** (vs web-crawled 83.1%, biomedical 94.6%); MAC-корпус 59.8% 1:1 ([DSH 38(2):621](https://academic.oup.com/dsh/article-abstract/38/2/621/6965034); [aligner-eval](https://github.com/bfsujason/aligner-eval)). Ближайший внешний аналог нашей пробы.
- **CJK-механизм (Xue & Yang, ACL 2011) — CONFIRMED:** китайский — comma-chained «run-on» предложения → 1:N в цель; только **~16.6% китайских запятых — границы предложений** (даже обученная модель ~70% F1); необратимая исходная неоднозначность, не дефект пайплайна ([P11-2111](https://aclanthology.org/P11-2111.pdf)).
- **Пол не-1:1 даже в структурном тексте:** Gale-Church ~89% 1:1 (Hansard), ~11% non-1:1 — пол; **JRC-Acquis 85% АБЗАЦЕВ 1:1** ([cs/0609058](https://arxiv.org/pdf/cs/0609058)). Наши 58% для CJK-литературы — ниже 85%-потолка структурного текста, ровно как предсказывает жанровый разрыв.
- **Karpinska & Iyyer (WMT2023) — CONFIRMED, важнейший ограничитель:** абзац-уровневый LLM-перевод БЬЁТ пофразовый (меньше ошибок), НО «критические ошибки остаются, включая эпизодические content omissions» ([2023.wmt-1.41](https://aclanthology.org/2023.wmt-1.41/)). ⟹ **парность абзацев НИКОГДА не должна быть зелёным сигналом сама по себе; excision_suspect/length-флаги сохранять обязательно.**

**Оговорка верификатора:** 58% (абзац) ≠ 60.2% (предложение) — кросс-гранулярность, направление а не эквивалентность; ни один источник не мерит zh→РУССКИЙ или вебновелл-регистр — всё внешнее подкрепление, не прямая валидация.

### 2.3 Русская репараграфизация — когда N:M легитимно ОБЯЗАТЕЛЬНА (2б)

Кодифицированная норма (Лопатин ПАС §138 [orthographia](http://orthographia.ru/punctuatio.php?sid=137); Розенталь §52–53 [old-rozental](http://old-rozental.ru/punctuatio.php?sid=160); Правила-1956 §51 [orfogrammka](https://orfogrammka.ru/OGL05/71827535.html)) — стабильна 1956→2006, все **CONFIRMED**:

- **Реплики диалога с абзаца — каждая с тире.** ⟹ китайская строка, паковавшая несколько реплик, ДОЛЖНА стать несколькими тире-абзацами (1:N).
- **Реплика + слова автора — остаётся 1:1** (одним абзацем). Давление 1:N — именно «несколько реплик на одной исходной строке», не диалог вообще.
- **Нет кодифицированного МАКСИМУМА длины абзаца** ([Мильчин]) → дробление длинного описательного абзаца — дискреционный стиль, НЕ норма-форсированное N:M.
- **Нюанс (upgraded CONFIRMED):** «в подбор» (run-in, в кавычках) — кодифицированная альтернатива → 1:N-дробление СИЛЬНО-конвенционально, но не типографски неизбежно. ⟹ **флаггер парности должен трактовать mismatch на диалоге как ОЖИДАЕМЫЙ, не считать пайплайн неправым.**

Асимметрия (weak-spot): нормы подкрепляют ДРОБЛЕНИЕ (1:N) сильно, СЛИЯНИЕ (N:1) — только редакторской дискрецией. Проба нашла оба. ⟹ диалог-аварный флаггер: 1:N на диалоге = ожидаемо (не флагать); описательное слияние — слабее вес. (Все источники — русско-монолингвальная типографика; мэппинг zh→ru — прикладное рассуждение, не sourced-факт.)

### 2.4 Пост-хок выравниватели — инструмент eval/пилота (2в), НЕ прод

**BERTALIGN — рекомендация для сборки zh↔канонический-русский GOLD-пар пилота** (CONFIRMED): LaBSE-эмбеддинги + двухшаговый DP (top-k 1:1 якоря → N:M внутри якорной полосы), поддерживает zh И ru, MIT-ish, крутится на GTX 1070 8GB/CPU = $0. Лучший на CJK-литературе (MAC strict-F1 **0.909** > Vecalign 0.873 > Bleualign 0.676 > Hunalign 0.607 > Gale-Church 0.455 [aligner-eval](https://github.com/bfsujason/aligner-eval)); ранг независимо подтверждён (Nature 2023, EN-SK, [s41598-023-47479-w](https://www.nature.com/articles/s41598-023-47479-w)). **Алгоритм = ровно паттерн оркестратора: найти 1:1 якоря, затем N:M между ними.**

Оговорки: (1) провенанс single-author (Liu&Zhu = и MAC-корпус, и бенчмарк, и статья) — нет независимой репликации ранга на литературе; (2) **НОЛЬ измеренных zh→ru** (всё zh→en) — трактовать выход как SILVER, не-1:1 верить руками; (3) **REFUTED: не цитировать «0.936»** — это German-French Text+Berg, не CJK; верное CJK-число = 0.909. Fallback: Vecalign (без MT). Избегать: Bleualign (нужен MT одной стороны = $, непригоден для $0), Gale-Church/Hunalign (валятся на литературе). Align на уровне предложений → агрегировать к абзацам/чанкам.

### 2.5 Форсировать структуру промптом? (2г) — НЕТ, флаггер лучше

**Вердикт: предпочесть (б) дешёвый детерминированный флаггер парности над (а) жёстким констрейнтом на переводчика.** Основания (все CONFIRMED):

- Инструкция сохранять структуру НЕ работает: даже явное «do not merge/split» — gpt-4o-mini всё равно сливает ([subtitleedit#8868](https://github.com/SubtitleEdit/subtitleedit/discussions/8868)); лучшие тулзы лишь «reduce» десинки, не устраняют ([llm-subtrans](https://github.com/machinewrapped/llm-subtrans)).
- Индустрия конвергировала на **detect-and-recover/флаг слой** (GalTransl, SakuraLLM, рекурсивная ре-сегментация [chatgpt-subtitle-translator](https://github.com/Cerlancism/chatgpt-subtitle-translator)).
- Более мелкая жёсткая единица ДЕГРАДИРУЕТ литкачество: пофразово vs абзац — +29.5% mistranslations, +65.4% грам-ошибок, ×12 inconsistency, ×3 register (Karpinska). Жёсткая парность дралась бы с корректным переводческим поведением.
- «Format-constraints-hurt-reasoning» (Let Me Speak Freely, EMNLP24) существует, но оспорено (dottxt rebuttal — структура ≥ неструктура при matched-промптах) и без MT-задачи → **не решает вопрос**. Мягкий nudge допустим; жёсткий гейт — нет.

---

## 3. Визуализация доверия — цветная полоса (направление 3)

### 3.1 Детерминированный цвет-мап — проекция УЖЕ существующего read-model ($0)

`status.go` уже считает всё сырьё: `ChunkState` (done/flagged/in_progress/pending), per-chunk `escalated`, `postcheck_misses`, `style_flags`, 12-энумный `FlagReason`, `GlossaryMissFlagged` (post-check гейт пометил ИНАЧЕ-готовый чанк — перевод ЕСТЬ, термин отсутствует; подмножество flagged, НЕ re-drivable), passport-вердикт (0/1/≥2 flagged = pass/attention/fail). Критично: под skip+flag (D2) флагнутый чанк НЕ коммитит перевод → в экспорте zh-плейсхолдер.

| Цвет | Условие (детерминированное, из полей status.go) | Смысл |
|---|---|---|
| **RED** | flagged без годного dst: cjk_artifact / excision_suspect / hard·soft_refusal / content_filter / length / empty / loop_degenerate / decode_error / hard_block / upstream_not_ok (и эскалация НЕ починила ре-гейтом) | НЕ переведено — читатель видит помеченный плейсхолдер |
| **YELLOW** | переведено (done), но сработало сомнение: `escalated=true` (починено фолбэком) ИЛИ glossary_miss ИЛИ postcheck_misses>0 (наблюдаемость, гейт off) ИЛИ style_flags>0 (тире-диалог / ё / транслит-междометие / 万億) | «редактировать первым» — переведено, но под сомнением |
| **GREEN** | done, escalated=false, postcheck_misses=0, style_flags=0 | чисто |

Приоритет YELLOW уже есть: `flagReasonSeverity()` ранжирует refusal(0) > cjk/excision/coverage(1) > loop(2) > decode(3) > glossary_miss(4) > length/empty(5); style-флаги — мягчайший YELLOW. Никакой LLM-самооценки.

**Рекомендации по конвенции (§1.1 + §3.2):** (1) **добавить GREY = pending/не-прогнано** (CAT-конвенция: непереведённое=серое, красное — жёсткий ПРОВАЛ; наш «flagged без перевода после эскалации» — истинный провал, ок как красный, но «ещё не дошли руки» ≠ красный); (2) 3-х-тир для читателя (green/yellow/red = готово/проверь/сломано) хорош, но **бэкенд-требование: расширить passport-rollup до 3-тир, считающий done+escalated / glossary_miss / style как YELLOW** — сегодня passport «attention» триггерит только на RED-чанк, YELLOW не катится наверх.

### 3.2 Калибровка «не всё жёлтое» — самый консеквентный раздел (CONFIRMED)

Индустрия и наука сходятся в один закон: **преимущественно-жёлтый сигнал бросается ЦЕЛИКОМ, утягивая красный.**

- **Google Tricorder — CONFIRMED:** жёсткий кап **<10% ложных на чекер** (находка — реальная проблема ≥90%), реализованный агрегат <5%; чекеры выше бара УДАЛЯЮТСЯ; низкий FP-rate (не FN) — критичный драйвер принятия; per-finding кнопка «Not useful» → демоут чекера ([SWE-book ch20](https://abseil.io/resources/swe-book/html/ch20.html)).
- **Alert fatigue — CONFIRMED:** клиницисты игнорят 49–96% drug-safety алертов из-за шума ([JAMIA](https://pmc.ncbi.nlm.nih.gov/articles/PMC1447540/)); утомлённые игнорят И шум, И критику; фикс — тир по severity, только высшие — interruptive ([AHRQ](https://psnet.ahrq.gov/primer/alert-fatigue)). SRE (Ewaschuk): каждый page обязан быть actionable, «err toward removing noisy alerts». Cry-wolf: ложные тревоги вредят доверию БОЛЬШЕ пропусков → YELLOW тюнить на высокий PPV.
- **SonarQube Clean-as-You-Code — CONFIRMED:** гейт только на НОВОМ/изменённом коде (whole-corpus-гейты «fail forever and get disabled»), condition-set маленький.
- **VS Code — CONFIRMED:** 4-уровневая severity (Error/Warning/Info/Hint), но вес только у Error+Warning; **overview ruler = whole-file полоса** (= наша книго-полоса) с задокументированным отказом «too crowded by warnings to see errors» (жёлтое топит красное); file-tree rollup = worst-descendant цвет + count-badge (плотность сохранена).

**Дизайн-закон для полосы:** конфигурируемая таблица severity per-flag-reason (тюнимость — общий паттерн VS Code/Trados/memoQ/MQM minor·major·critical); **гейт YELLOW на бюджет ложных <10% per flag reason** (демоут/скрытие превышающих); rollup **worst-child + СЧЁТ** (1 red ≠ 50 red); флагать по дельтам ТЕКУЩЕГО прогона. **Калибровочный инструмент (замер precision каждого флага) — ГЕЙТ перед тем как цветам можно верить.** Цвет пара­ить с иконой/формой (colorblind, coverage-gutters #330).

---

## 4. Контракт бэкенд→фронт (направление 4, выход в пакет №4)

Рамка: `tmctl` сегодня имеет translate/report/status/redrive; параллельный экспорт этапа A был ad-hoc. Всё ниже — экспорт-артефакты (проекция read-model), НЕ веб-сервер.

### 4.1 Схема `annotations.json` (4а) — версионированный контракт

Per-chunk проекция из `chunk_status`+`retrieval_state`+`request_log` ($0, как `status --json`). Поля:
```jsonc
{
  "schema_version": "annot-v1",
  "book_id": "...", "snapshot_id": "<wire-снапшот строк>",
  "source_file_hash": "...", "chunker_version": "...",   // FE детектит устаревшие якоря (дисциплина ConfigDrift/SnapshotDrift status.go)
  "chunks": [{
    "chapter": 14, "chunk_idx": 1,
    "src_range": {"char_start": .., "char_end": ..},      // в нормализованный источник — точно (чанкер lossless)
    "dst_range": {"char_start": .., "char_end": ..},      // в собранный перевод
    "state": "done|flagged|in_progress|pending",
    "color": "green|yellow|red|grey",                     // производное (§3.1)
    "reasons": ["escalated","glossary_miss","style:dialogue_dash"],  // причины yellow/red, человекочитаемо
    "flag_reason": "cjk_artifact|...",
    "escalated": true, "escalation_model": "deepseek-v4-pro",
    "postcheck_misses": [{"src":"古月","dst":"Гуюэ"}],
    "style_flags": [{"kind":"dialogue_dash","span":[..]}],
    "cost_usd": 0.0123,
    "paragraph_anchors": [{"src_para":[s,e],"dst_para":[s,e]}]  // BEST-EFFORT мягкий оверлей, может быть N:M/отсутствовать
  }]
}
```
`src_range/dst_range` — несущий якорь (чанк-уровень, точный). `paragraph_anchors` — мягкий оверлей, вычисляется дешёвым выравнивателем на экспорте, явно допускается N:M/частичный. Версионирование (`schema_version` + хеши) — FE знает, когда якоря устарели.

### 4.2 Политика красных чанков (4б) — сборка перевода

Экспорт этапа A уже демонстрирует ответ: флагнутый чанк = помеченный zh-плейсхолдер (`[ФЛАГ: cjk_artifact]` + источник). Варианты:
- **(A) Помеченный плейсхолдер «[не переведено: reason]» + источник встык** (текущее). PRO: редактор видит что и почему отсутствует; якорь цел; честно (D25.1 «run complete ≠ publishable» демонстрировано). CON: нечитаемо для читателя (но экспорт editor-facing).
- (B) Пропуск. CON: тихая дыра, ломает якорь.
- (C) Источник встык без маркера. CON: смесь языков (жалоба F6 — худшее для читателя, выглядит багом).
- **РЕК: (A) для editor-facing экспорта; reader-facing (D25.1 release-state лестница) обязан fail-closed на красных** (structurally_complete требует 0 красных). `color=red`+`flag_reason` в annotations.json позволяет FE рендерить плейсхолдер как угодно (свёрнуто, «перевести сейчас»-кнопкой). Прямая привязка к **D25.1**: красные блокируют `structurally_complete` — детерминированный fail-closed экспорт структурных дыр.

### 4.3 human_override (4в) — скоуп и риски (самый контрактно-опасный; думать с D15.2)

**В D15.2 human_override НЕ спроектирован** (спека — про content-addressed resume: wire/verdict/guard-хеши). Это net-new. Прайор-арт (CAT/codegen) даёт готовые механизмы:

- **memoQ — safe-by-default (CONFIRMED):** pre-translate НЕ меняет edited/confirmed сегменты; Lock = жёсткая иммутабельность, не авто-пропагируется ([lock-segments](https://docs.memoq.com/current/en/Workspace/lock-segments.html)).
- **Trados — статус НЕ гарантия (PLAUSIBLE):** дефолт overwrite-if-better на API-уровне НЕ защищает по статусу; задокументирован случай перезаписи confirmed-сегмента NMT-ом → **жёсткая гарантия только явный LOCK / context-keyed carry-over**, статус — advisory.
- **ICE/101%-матч (Phrase) — CONFIRMED:** переиспользование, не перезапись, требует КОНТЕКСТНОГО ключа (src-идентичность + контекст = пред/след сегменты или segment-ID). 100%=src совпал, контекст иной.
- **Trados PerfectMatch / memoQ X-Translate — CONFIRMED:** content/context-addressed carry-over ПРЕДЫДУЩЕГО человеческого выхода на обновлённый источник (против прошлых bilingual-файлов, не TM); PerfectMatch терпит сегментационный дрейф, сливая до 3 сегментов, юниты залочены; X-Translate требует version history, выбор provenance-тира.
- **Codegen (Copier 3-way merge, protected regions) — CONFIRMED:** protected-regions → любая непомеченная правка тихо перезаписывается; merge → конфликты руками; Copier хранит provenance (`.copier-answers.yml`), конфликты — маркерами, не тихой потерей ([1509.04498](https://arxiv.org/pdf/1509.04498)).

**Пересечения с нашим пайплайном (опасная часть):** пайплайн content-addressed по `RequestHash` (складывает wireSnapshotID); override — НЕ-модельный текст без RequestHash.
1. **redrive** переrun-ит модель на флагнутых → КЛОББЕР override, если override не ПИНИТ чанк (как CAT locked segment).
2. **resume** — безопасно (заполняет только не-прогнанные).
3. **--resnapshot** (смена конфига) переоплачивает книгу вкл. override-чанк: (а) не-пиннутый → потерян; (б) пиннутый → человеческий текст поверх ИНОГО окружающего перевода (override писался под старый драфт) → дрейф консистентности. Показать стоимость + WARN.
4. **TM/глоссарий:** override — чанк-локальная формулировка, НЕ терминное решение. Авто-запись в TM утекла бы формулировку в другие чанки (и TM ключится src-чанк+model_id+prompt_version — у override нет model_id). ⟹ **НЕ авто-кормить override в TM;** термин-везде = правка глоссария (отдельно, осознанно, --resnapshot).

**РЕК-скоуп (не дизайн) — два слоя:**
- **Слой 1 — provenance LOCK safe-by-default** (memoQ-модель): per-chunk `human_override` флаг; redrive/resume/re-pre-translate трактуют override как ИММУТАБЕЛЬНЫЙ по умолчанию (никогда Trados-дефолт «overwrite-if-better»). Тест: redrive НЕ мутирует ни один override-чанк. Ложится сейчас как passport/export-contract-добавка.
- **Слой 2 — content/context-keyed carry-over** через переоплаченный re-run (PerfectMatch/X-Translate/Copier-модель): ключить override к (content_hash src-чанка + соседний контекст), пере-инжектить на совпавший чанк нового прогона; терпеть измеренный дрейф парности (58%/72%) окном merge ≤N чанков; **когда src/контекст ИЗМЕНИЛИСЬ — НЕ тихо хранить и НЕ тихо клоббить, а поднять ТРЕТЬЕ состояние «override needs re-review» (YELLOW-конфликт)**. Предусловие (честный гэп): хранить прошлый override-текст+контекст durable-снапшотом. Метрика на 25-гл: overrides {сохранён / re-review / тихо-потерян}, цель тихо-потерян=0. Полный дизайн — с реализацией D15.2 v3.1 (wire/verdict-split — та же машинерия, что нужна override-слою; синергия D26.4).

### 4.4 Chat-edit фрагмента через провайдера (4г) — скоуп/цена/риск

Канонический UX (CONFIRMED): **выделить спан → NL-инструкция → ДИФФ-превью → явный accept/reject** (Cursor Cmd+K [cursor.com/docs](https://cursor.com/docs/inline-edit/overview); Copilot inline chat [code.visualstudio.com](https://code.visualstudio.com/docs/copilot/chat/inline-chat)); сложное — из inline-полосы в agent-режим. CAT-аналог: Trados AI / memoQ AGT ре-генерят сегмент по инструкции с обязательным человеческим accept (никогда авто-коммит), AGT грунтует RAG-ом по TM/термбазе.

Задокументированные риски (все CONFIRMED):
1. **«apply»-шаг — главный слабый узел:** Cursor построил спец-apply-модель, т.к. LLM плохи в диффах (репорты удалённых функций). ⟹ **пере-вставлять правку через НАШ детерминированный chunk/sentence span-map, НЕ LLM-apply.**
2. **Потеря окружающей консистентности:** ре-генерация изолированного фрагмента без документного контекста → противоречия глоссарию/сущностям (Herold&Ney [2306.05183](https://arxiv.org/abs/2306.05183)). Митигация: передавать соседние чанки + глоссарий/passport read-only контекстом.
3. **Overcorrection (APE):** правка уже-хорошего текста ДЕГРАДИРУЕТ его ([2020.emnlp-main.217](https://aclanthology.org/2020.emnlp-main.217/)). ⟹ **предлагать chat-edit только на YELLOW/RED, не на GREEN** — цвет-статус драйвит доступность фичи (синергия с «редактировать первым»).
4. **Галлюцинации:** LLM-MT выше риск; митигация — detect-then-retranslate ([2501.17295](https://arxiv.org/abs/2501.17295)) = **прогнать ре-генерённый фрагмент через ТОТ ЖЕ флаггер, не доверять**.
5. **Цена:** каждый edit — метрируемый draft/editor-вызов; вендоры не публикуют per-edit цену → мерить самим, в per-chapter COGS (vs ~$0.69/новелла).

---

## 5. Креатив (🧪 гипотезы, каждая — со слотом)

- 🧪 **Диалог-аварный флаггер парности** (слот: флаггер/style-класс, $0). Классифицировать чанк как диалоговый (regex по CJK-кавычкам 「」『』“”《》 / несколько реплик на строке) vs описательный; на dst детектить тире-абзацы. Правило: 1:N на диалоге = ОЖИДАЕМО (не флагать, §2.3 норма); описательное слияние = слабее вес; диалог, НЕ раскрывшийся в тире-абзацы = кандидат YELLOW. **Фальсифицируемо:** пере-нарезать 58%/72% пробы по диалог-vs-описание; если расхождение концентрируется в (i) легитимно-развернувшихся диалогах и (ii) легит-слияниях — норма-гипотеза верна и «расхождение БЕЗ диалог-маркера И без компенсирующего слияния» — малая high-value популяция флагов. Полигону (eval-tool refine пробы).
- 🧪 **Passport несёт arity-распределение абзацев** (слот: passport/export, $0): per-глава доля 1:1/1:N/N:1 против ожидаемой полосы (~60% CJK-литература … 85% структурный) — чтобы 58% читалось как норма жанра, а не урон. GREEN если в полосе; ревью только если ДАЛЕКО ниже ~60% ИЛИ слияния коррелируют с excision/length.
- 🧪 **«Not useful»-петля обратной связи на флаг** (слот: passport/eval-tool, Tricorder-модель): редактор в ридере жмёт «не полезно» на YELLOW → накапливается precision per-flag-reason → авто-демоут флага ниже порога в свёрнутый «слабые сигналы». Превращает калибровку §3.2 в живой контур.
- 🧪 **Cost-of-fix ранжирование «что править первым»** (слот: F3-brief): сортировать YELLOW не только severity, но и (severity × стоимость-починки): glossary_miss = 1 правка терма чинит N чанков (дёшево, высокий эффект); style-флаг = локальная косметика. Показывать редактору порядок.
- 🧪 **Bertalign-мост «прошлый том»** (слот: eval-tool/пилот): выровнять канонический русский перевод прошлого тома к его zh-источнику bertalign-ом → извлечь термины/имена как seed-кандидаты (AMBIGUOUS, ждут approve) для нового тома — закрывает START_PROMT п.14 (референсы прошлых томов) дёшево, БЕЗ прод-выравнивания. Гейт: zh→ru spot-check bertalign до доверия (нет измеренных zh→ru).

Идеи «перестроить бэкенд под фронт» — нет: экспорт-артефактов из read-model хватает (§4.1 доказывает).

---

## Таблица: вопрос владельца → ответ → рекомендация → слот → фаза

| Вопрос | Ответ (вердикт) | Рекомендация | Слот | Фаза |
|---|---|---|---|---|
| «Страница в страницу»? | НЕТ — страница = артефакт рендера (CONFIRMED все инструменты) | Якорить ЧАНК (=бед); абзац — мягкий оверлей; ко-локация спаренных якорей, не свободный скролл-синк | F3-brief | 3 |
| Как якорить оригинал↔перевод при расхождении объёма? | Иерархия: глава→чанк(точно)→абзац(58%)→предложение; наш чанк рождается атомом в пайплайне | src_range/dst_range в annotations.json (несущий); paragraph_anchors best-effort | export-contract | 1 (контракт), 3 (UI) |
| Парность абзацев — сколько? | 58% точно / 72% ±1 (наша проба); норма CJK-литературы (внешн. 60.2% предл.) | Не гнать к 100%; флаггер парности как YELLOW-наблюдаемость, не hard-fail | флаггер | 1 |
| Форсировать структуру промптом? | НЕТ — инструкция ненадёжна (CONFIRMED), жёсткость деградирует качество | Дешёвый детерминированный флаггер; мягкий nudge макс, не гейт | флаггер | 1 |
| Удобно ли редакторам? Что доказанно помогает? | Подсветка НЕ ускоряет и мешает при неточности (QE4PE); **precision > покрытие** | Калибровать YELLOW (<10% ложных/флаг), градуировать, не бинар | флаггер/eval-tool | 1 (замер), 3 (UI) |
| Как красить green/yellow/red? | Проекция существующего read-model; NO числовой confidence (нет QE/logprobs) | Цвет-мап §3.1 + GREY pending; passport-rollup до 3-тир | export-contract/passport | 1 |
| «Не всё жёлтое»? | Преимущественно-жёлтое бросается целиком (Tricorder/alert-fatigue) | severity-таблица per-flag, гейт на FP-бюджет, worst-child+счёт, дельты | флаггер/passport | 1 |
| Красные чанки в сборке? | Помеченный плейсхолдер (текущее) — честно (D25.1) | (A) editor-facing; reader-facing fail-closed на красных (structurally_complete) | export-contract | 1 |
| human_override vs redrive/resume/TM? | Не спроектирован (net-new); аналог CAT lock + PerfectMatch | 2 слоя: provenance LOCK safe-by-default + context-keyed carry-over с YELLOW-конфликтом; НЕ авто-TM | export-contract (с D15.2) | 1.5 |
| Chat-edit фрагмента? | UX select→instruct→diff→accept; риски: apply/консистентность/overcorrect/галлюц/цена | Re-insert через наш span-map; только на YELLOW/RED; re-flag выход; метрить COGS | F3-brief | 3 |
| Как это делают конкуренты? | Никто не сочетает reader-embedded книго-полосу из детерм. вердиктов + ru + серия | Наш синтез — новый (скрининг); ко UX: Mantra layout, InterText flag-non-1:1 | — | — |
| Выравниватели для канона (eval)? | Bertalign (MAC F1 0.909), $0 на стенде; НЕТ измеренных zh→ru | Bertalign для GOLD-пар пилота (SILVER→ручная сверка); не в прод | eval-tool | 2.5 (пилот-подготовка) |

---

## Честные слабые места

1. **Внешняя валидность:** НИ ОДИН источник не мерит zh→РУССКИЙ или вебновелл-регистр. Парность-литература (Bertalign 60.2%, JRC 85%, Gale-Church) — zh→en / европейские; русские нормы — монолингвальны; PE-исследования — en-центричны. Всё — внешнее подкрепление, не прямая валидация (совпадает с оговоркой CLAUDE.md «претрейн-классика = предварительно до вебновелл-среза»).
2. **Проба — один конфиг/книга/25 глав.** 58%/72% — на этапе A (deepseek+glm-5); выигравший конфиг exp12/этапа B может дать иную парность. Кросс-гранулярность: 58% (абзац) ≠ 60.2% (предложение) — направление, не эквивалентность. «draft==src 56%» включает 4 эхо-чанка (занижает).
3. **Bertalign — single-author провенанс** (Liu&Zhu = корпус MAC + бенчмарк + статья); нет независимой репликации ранга на CJK-литературе; zh→ru не мерено — до доверия нужен in-house spot-check.
4. **CAT/вендор-источники — описание ПОВЕДЕНИЯ, не замеры.** Mantra 73%-числа self-reported; XL8 «uncertainty threshold» — нераскрытый маркетинг; Lilt «productivity gains» — REFUTED как измерение. Несколько цитат верификаторы пометили как требующие переуказания URL (memoQ warnings-цвета, Translated heatmap, Cursor design.dev-шорткаты, «40% apply-fail» — вторичный): факты верны, точные URL/квоты — переуказать перед публикацией (детали в `scratchpad/digest.txt`).
5. **Trados-докам не удался чистый fetch** (403 на docs.rws.com/gateway.rws.com throughout) — MTQE-светофор, PerfectMatch, семь статусов, overwrite-случай подтверждены сниппетами + корроборацией, не verbatim-первоисточником.
6. **QE4PE — сильнейший, но это ПРЕДУПРЕЖДЕНИЕ, не одобрение флаггера:** доказывает, что польза подсветки НЕ гарантирована и решает precision; наш детерминированный флаг оправдан ЛИШЬ при высокой точности — которую надо ЗАМЕРИТЬ (гейт §3.2), а не предположить.
7. **Reader-embedded книго-полоса — без внешнего прецедента как целого** (компоненты есть, сборка новая — PLAUSIBLE absence). Нельзя доказать универсальное отсутствие.
8. **Русские нормы подкрепляют ДРОБЛЕНИЕ (1:N) сильнее СЛИЯНИЯ (N:1)** — слияние опирается только на редакторскую дискрецию «нет макс-длины»; проба нашла оба. Мэппинг zh→ru-норм — прикладное рассуждение, не sourced-факт. Claim о «нет макс длины» мис-атрибутирован (Издательский словарь-справочник, не Справочник издателя) — суть верна.
9. **LinguaGacha 3-классный ResponseChecker — только deepwiki (AI-gen)**; живой код подтверждает лишь 1 из 3 + glossary-miss. Не цитировать как primary. Output-side CJK-детект — НЕ наш дифференциатор (GalTransl/LinguaGacha делают).
10. **«format-constraints-hurt-reasoning» не решён** — оспорен (dottxt), без MT-задачи; обе стороны с ограничениями. Не опирать на него.

---

## БАР-рекомендации (сводка: механизм → слот → цена → как мерить → фаза)

Все COGS ≈ $0 (read-only проекция + фронт/дизайн).
1. **Цвет-мап из read-model + GREY-тир + 3-тир passport-rollup** → export-contract/passport → $0 → аудит: каждый цвет трассируется к flag_reason → **Ф1 (контракт), Ф3 (UI)**.
2. **Калибровка YELLOW: severity-таблица per-flag, FP-бюджет <10%/флаг, «Not useful»-петля** → флаггер/eval-tool → $0 → precision каждого флага против blind-чтения владельца/редактора; ГЕЙТ перед показом цветов → **exp12/полигон СЕЙЧАС** (go/no-go цветной полосы = «достаточно ли точны флаги, чтобы редактор доверял»).
3. **annotations.json (src_range/dst_range несущий, paragraph_anchors best-effort) + version-хеши** → export-contract → $0 → FE детектит устаревшие якоря → **Ф1**.
4. **Политика красных: (A) editor-facing плейсхолдер, reader-facing fail-closed** (D25.1 structurally_complete) → export-contract → $0 → **Ф1**.
5. **human_override 2 слоя (LOCK safe-by-default + context-keyed carry-over с YELLOW-конфликтом, НЕ авто-TM)** → export-contract с D15.2 v3.1 → $0 → метрика «тихо-потерян=0» на 25-гл → **Ф1.5**.
6. **Диалог-аварный флаггер парности (наблюдаемость, не hard-fail)** → флаггер → $0 → пере-нарезка пробы диалог/описание → **Ф1/Ф2**.
7. **Chat-edit: span-map re-insert (не LLM-apply), только YELLOW/RED, re-flag выход, метрить COGS** → F3-brief → метрируемый draft/editor-вызов → accept-rate/re-flag-rate/$-per-edit → **Ф3**.
8. **Bertalign для GOLD-пар канона (eval), SILVER→ручная сверка не-1:1** → eval-tool → $0 (GTX 1070/CPU) → strict-F1 против held-out zh→ru → **Ф2.5 (пилот-подготовка)**.

---

## Источники (несущие)

**CAT/HITL:** memoQ [grid](https://docs.memoq.com/current/en/Workspace/the-grid.html)/[results](https://docs.memoq.com/current/en/Workspace/translation-results-list.html)/[lock](https://docs.memoq.com/current/en/Workspace/lock-segments.html)/[x-translate](https://docs.memoq.com/current/en/Workspace/x-translate.html)/[pre-translate](https://docs.memoq.com/current/en/Workspace/pre-translate-and-statistics.html)/[AGT](https://www.memoq.com/product/memoq-agt/) · Phrase [segments](https://support.phrase.com/hc/en-us/articles/5709678012828-Segments-TMS)/[QPS](https://support.phrase.com/hc/en-us/articles/5709672289180-Phrase-QPS-Overview)/[context](https://support.phrase.com/hc/en-us/articles/9386879839900-Translation-Memory-Match-Context-TMS) · Trados [MTQE](https://docs.rws.com/en-US/trados-studio-2024-1145319/support-for-machine-translation-quality-estimation-mtqe--1147923)/[PerfectMatch](https://docs.rws.com/en-US/sdl-trados-studio-783545/perfectmatch-341156)/[pre-translate-API](https://developers.rws.com/studio-api-docs/apiconcepts/projectautomation/pre_translate_settings.html)/[AI](https://www.trados.com/blog/new-generative-translation-capabilities-in-trados-studio/) · MateCat [status](https://guides.matecat.com/segment-status) · Custom.MT [QE](https://custom.mt/machine-translation-quality-estimation/).
**PE-исследования:** QE4PE [2503.03044](https://arxiv.org/html/2503.03044v2) · Shenoy EMNLP2021 · Liu&Dai [MTSummit2025](https://aclanthology.org/2025.mtsummit-1.38/) · Green UIST2014.
**Издательские/фан:** Mantra [pixivision](https://www.pixivision.net/en/a/7427)/[typeset](https://mantra.co.jp/en/news/mantra-an-ai-manga-translation-startup-jointly-develops-manga-typesetting-specification-engine)/[AAAI2021](https://aaai.org/papers/12998-towards-fully-automated-manga-translation/) · XL8 [MediaCAT](https://www.xl8.ai/blog/boost-your-localization-qc-productivity-5-key-mediacat-features) · GalTransl [README](https://github.com/GalTransl/GalTransl/blob/main/README.md?plain=1)/[Prompts](https://github.com/GalTransl/GalTransl/blob/main/GalTransl/Backend/Prompts.py) · SakuraLLM [epub](https://github.com/SakuraLLM/SakuraLLM/blob/main/translate_epub.py) · AiNiee.
**Якорение/парность:** Moore beads [AMTA2002](https://www.microsoft.com/en-us/research/wp-content/uploads/2002/10/sent-align2-amta-final.pdf) · InterText [LREC2014](https://mt-archive.net/10/LREC-2014-Vondricka.pdf) · bilingual_book_maker [epub_loader](https://raw.githubusercontent.com/yihong0618/bilingual_book_maker/main/book_maker/loader/epub_loader.py) · Immersive Translate [docs](https://github.com/immersive-translate/old-docs/blob/main/README_english.md) · Bertalign [DSH](https://academic.oup.com/dsh/article-abstract/38/2/621/6965034)/[repo](https://github.com/bfsujason/bertalign)/[eval](https://github.com/bfsujason/aligner-eval) · Xue&Yang [ACL2011](https://aclanthology.org/P11-2111.pdf) · Gale-Church [CL1993](https://aclanthology.org/J93-1004.pdf) · JRC-Acquis [cs/0609058](https://arxiv.org/pdf/cs/0609058) · Karpinska [WMT2023](https://aclanthology.org/2023.wmt-1.41/) · Nature EN-SK [2023](https://www.nature.com/articles/s41598-023-47479-w) · LaBSE [2007.01852](https://arxiv.org/abs/2007.01852).
**Русские нормы:** Лопатин ПАС §138 [orthographia](http://orthographia.ru/punctuatio.php?sid=137) · Розенталь §52-53 [old-rozental](http://old-rozental.ru/punctuatio.php?sid=160) · Правила-1956 §51 [orfogrammka](https://orfogrammka.ru/OGL05/71827535.html).
**Forced-structure:** SubtitleEdit [#8868](https://github.com/SubtitleEdit/subtitleedit/discussions/8868) · llm-subtrans · Cerlancism · Karpinska WMT2023 · Let-Me-Speak-Freely [2408.02442](https://arxiv.org/html/2408.02442v1)/dottxt rebuttal.
**Trust-viz:** Google Tricorder [SWE-book ch20](https://abseil.io/resources/swe-book/html/ch20.html) · JAMIA alert-fatigue [PMC1447540](https://pmc.ncbi.nlm.nih.gov/articles/PMC1447540/) · AHRQ [alert-fatigue](https://psnet.ahrq.gov/primer/alert-fatigue) · SonarQube [quality-gates](https://docs.sonarsource.com/sonarqube-server/quality-standards-administration/managing-quality-gates/introduction-to-quality-gates) · VS Code [#46999](https://github.com/microsoft/vscode/issues/46999)/[UI](https://code.visualstudio.com/docs/getstarted/userinterface).
**Inline-edit/override:** Cursor [inline-edit](https://cursor.com/docs/inline-edit/overview)/[apply-forum](https://forum.cursor.com/t/thoughts-on-the-apply-model/61511) · Copilot [inline-chat](https://code.visualstudio.com/docs/copilot/chat/inline-chat) · Herold&Ney [2306.05183](https://arxiv.org/abs/2306.05183) · APE overcorrection [EMNLP2020](https://aclanthology.org/2020.emnlp-main.217/) · hallucination [2501.17295](https://arxiv.org/abs/2501.17295) · Copier [docs](https://copier.readthedocs.io/en/stable/updating/) · codegen [1509.04498](https://arxiv.org/pdf/1509.04498).

*Полный дайджест находок + верификаций (13 тем, 8 верифицированных клеймов/тему, weak-spots) — рабочий артефакт сессии, не в git.*
