From 458b0ea8d6cc3313f88a1d7ad69b01f7d1894997 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 11 Jul 2026 03:31:08 +0300 Subject: [PATCH] Land research/16 reader-IDE alignment with orchestrator review banner and journal entries: probe numbers corrected to DB truth, contract overclaims fixed --- docs/PROGRESS.md | 39 +++ docs/research/16-reader-ide-alignment.md | 321 +++++++++++++++++++++++ 2 files changed, 360 insertions(+) create mode 100644 docs/research/16-reader-ide-alignment.md diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index bf7a7c8..fa00df6 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -804,6 +804,25 @@ keep-alive (Ф1–2), инъекция глоссария (`selective`), пор ## Полигон (секция параллельной сессии — записи добавлять сюда) +### 2026-07-11 — exp12 «диагностика качества 25 глав» (D26, приоритет №1) — армы+судьи+root-cause СДЕЛАНЫ, чтение владельца ждём + +Мандат `POLYGON_QUALITY_DIAG_SESSION_PROMPT.md` + аддендум оркестратора (D27: единый xAI-ключ, grok-армы без ограничений; backend/ — живая сессия №5, ничего там не гонял/не читал WIP; пакеты чтения → `diag/reading/`). **Ничего не закоммичено.** Отчёт: `docs/experiments/12-quality-diagnosis.md`. Артефакты/тексты — `/home/ubuntu/books/gu-zhenren/diag/` (ВНЕ git). Скрипты `eval/exp12_*.py`. **Потрачено ≈$2.22 из капа $5** (армы $0.78 / судьи $1.31 / демо $0.13; 0 ошибок). + +**Дизайн (пре-регистрация §1 заморожена ДО платных вызовов):** 3 чистые главы выбраны формулой (диалого-плотность на исходнике, high/mid/low = гл.7/5/14, не черри-пик); армы A0 черновик · A1 glm-моно(=этап A, store $0) · A2 glm-билингв · A3 grok-моно · A4 grok-билингв · A5 gemini-билингв · A6 grok-моно-без-констрейнтов; +A1′ контроль рига. Инъекция глоссария реконструирована из `retrieval_state.injected_ids` (воспроизводит боевой блок; rig-фиделити A1′≈A1 sim 0.984–1.0). + +**Находки (мех. + судьи вторично; чтение владельца — главный, ещё не пришло):** +1. **Ядро: моно-редактор ПАССИВЕН.** Активность (1−sim к черновику): glm-моно **0.013**, grok-моно **0.001** (3/6 чанков char-identical!), grok-моно-без-констр 0.004, **grok-билингв тоже 0.006** (reasoning-off инертен в ОБОИХ режимах). Реально правят только glm-билингв 0.14 и gemini-билингв 0.34. На всех 54 чистых чанках этапа A медиана draft→final sim **0.978**, канцелярит-маркеров снято **0**. «Нечитаемо, слабейшее редактура» = **редактор почти не редактирует**; нечитаемость унаследована от черновика. +2. **Монолингвальный режим (D1/D17) — корень.** Моно-редактор и пассивен, и структурно СЛЕП к искажениям черновика (без исходника не знает, что «ударил головой»=磕头 земной поклон). Фикс = **билингв** (флип D1 — ратификация оркестратора). +3. **grok-4.3 reasoning-off непригоден как редактор** (no-op; худший у судей). exp04-ранг-1 был на дефолт-reasoning+билингв; боевой off = инертен (quality-transfer риск exp08/D26 подтверждён числами). Грок-редактор — только reasoning-ON (D6.2-резерв). +4. **Судьи (gemini+grok+gpt5-mini, кросс-семейно, self-family excl, 26/27 парс):** билингв ≫ моно; **A2 glm-билингв единогласный #1 по стилю И верность 5.0** — **fidelity-гейт «гладко-неверное» пройден** (билингв не купил гладкость ценой смысла — страх кальки D1 на срезе не подтвердился). Оговорка: судьи держат вёрстку константной → недооценивают структурный дефект; валидируют модель×режим, не фикс вёрстки. +5. **Root-cause (кейсы владельца, гл.1 сцена смерти, сверено с zh):** структурный дефект №1 = **построчные абзацы** (оба промпта велят «Сохраняй разбивку на абзацы» → пайплайн копирует кит. «предложение=строка», для ru деструктивно; бьёт по всем главам). Остальные кейсы — ошибки ЧЕРНОВИКА deepseek (时辰 не переведён, 派→«фракции» вместо секты, 磕头→«ударил головой», 练成→«совершенствование»), НЕ спасённые пассивным моно-редактором; 1 «smooth-wrong»-подозрение (清白之身→«невинность») проверено — верно. Демо §2.6 (gemini-билингв + разрешение реверстать абзацы + жанр-правила) чинит ПРАКТИЧЕСКИ ВСЕ кейсы одним прогоном (абзацы 49→25, «фракции»→«школы», «обесчестил»). + +**Рекомендация конфига (provisional, §3; смену дефолта НЕ делаю — ратифицирует оркестратор):** три ортогональных фикса — (а) убрать «Сохраняй разбивку на абзацы» из брифа zh→ru + разрешить реверстку (дешевле всего, заметнее всего); (б) **редактор билингв, не моно** (флип D1); (в) модель — **glm-5 билингв** (судейский #1, верность 5.0, **$0.42/25 гл**), премиум-потолок gemini-билингв ($5.6/25 гл, селективно); grok-off снять. Плюс курация глоссария (моя зона): 春秋蝉 «Цикада Весны и Осени»? · 派→секта · 时辰→глосса. Дорожка: ратификация (флип D1+вёрстка = D-блок) → пере-прогон 25 глав кандидатом → чтение владельца → этап B. + +**Раунд 2 (чтение владельца состоялось, §4 отчёта):** вердикт — **ни один из 7 не дотягивает до чтения** («машинный, модели не следят за сюжетом»). Новое: (1) **⚠ gemini (A5) ТЕЧЁТ преамбулой** в выход («Вот отредактированный перевод…», wire-verified 4 чанка) → дефект продакшн-редактора + раздул мою метрику активности A5; glm/grok чисто → **gemini понижен**. (2) **Глоссарий — сквозная первоклассная проблема** (владелец прав): все армы делят один сид; 修炼/人祖 — GAP (не в сиде, «совершенствование»/«Первопредок» = выбор модели → засидить культивация/Рен-Зу?), 蛊师/蛊虫/甲乙丙丁/花酒行者 — lock (гу-мастер/гу-тварь/разряд-Г/Винный-Странник → переголосовать с владельцем); таблица current→pref в §4.2, пере-курация = моя зона после утверждения. (3) **Идея «модель гуглит термины» (владелец) — в доках НЕТ**; ближайшее D25.5 (веб=недоверенные данные, webfetch=Ф3-блокер) → автолукап = Ф3+, near-term = засид глоссария из фан-конвенций; **пинг оркестратору** зафиксировать owner-proposal в архитектуру. (4) **Кандидат-фикс** (glm-билингв+реверстка+конвенции, `diag/arms/CAND/`) — конвенции ставит, БЕЗ утечки, но реверстку абзацев делает нестабильно → layout надёжнее отдельным reflow-пассом/сильной моделью. (5) **Монитор** `diag/reading/monitor.html` (локальный, вне хостинга — копирайт) — оригинал+варианты+кандидат, кнопки копировать для флагман-сверки владельца. Рекомендация §3 дополнена: **4-й равноправный фикс — пере-курация глоссария**; gemini понижен. + +**Ждём:** (1) **флагман-сверка владельца** через `diag/reading/monitor.html` (Fable 5/5.6 + любительский перевод) — арбитр конфига. (2) **Пере-курация глоссария** — утверждение владельцем терминов (§4.2) → засид GAP + переголос lock → resnapshot. (3) **Оркестратору:** ратификация флипа D1 (моно→билингв) + бриф вёрстки + фиксация owner-proposal «автолукап терминов = Ф3» — D-блоком; дефолт сам не трогаю. Полигон №4 (сид мн.ч.) — второй приоритет, не начат. + ### 2026-07-10 — Сессия «erotica-срез 18+ + fix-лист + финализация сида» (закрытие D14.4) ЗАВЕРШЕНА Мандат `POLYGON_SESSION_PROMPT_EROTICA.md`. Всё с провенансом (model id, UTC, usage, ПОЛНЫЕ сырые выходы; results не перезаписаны). Книги/корпуса — ВНЕ git (Р8). **18+ мандат владельца исполнен; жёсткая линия level-3 (минори) удержана.** @@ -1059,3 +1078,23 @@ keep-alive (Ф1–2), инъекция глоссария (`selective`), пор > **[ОРКЕСТРАТОРУ — к D19.2]** (1) **Рекомендую в боевые промпты канала A/B**: микро-few-shot в кэшируемый префикс (≈$0) + дубль инструкции после чанка (~10 ток. хвоста) — суммарно **0/29 эха против базовых 30–67% по армам (пул ~44%)** на обоих провайдерах (счёт испр. оркестратором); понижает частоту эскалаций (COGS); echo-гейт не трогаем (рамка D19.2 соблюдена). (2) **Анти-находка для ратификации: явный языковой констрейнт в system на grok-none ИНВЕРТИРУЕТ эхо 3/10→9/10** — запретить «пиши по-русски»-строки в промптах reasoning-off путей без per-model замера; предостережение к любым будущим анти-эхо правкам. (3) Префилл DeepSeek — кандидат для драфт-канала только после fidelity-проверки (обходит thinking → возможен налог на реалии); каналу B нерелевантен (Mistral чист, grok-эскалация reasoning-ON — D19.1). > **[ПОЛИГОНУ]** (1) В обобщающую строку quirks (поручение D19.2) добавить инверсию: «языковой констрейнт в system у reasoning-off моделей может УСИЛИВАТЬ эхо (grok-none 3/10→9/10, P4 research/15; проверена одна формулировка — чувствительность неизвестна)». (2) Fidelity-хвост P4: отсудить митигированные переводы против базы (35 пар, копейки) — если fidelity не падает, митигции готовы к wiring через оркестратора. (3) Эхо стохастично per-fragment (gu-009 эхнул у нас, не у вас; gu-001/006 — наоборот) → echo-rate мерить с повторами, не одним прогоном. > **[БЭКЕНДУ]** НЕ вносить языковые констрейнты в промпты reasoning-off путей (P4-инверсия). Микро-few-shot пары zh→ru — кандидат в стабильный префикс шаблонов draft/канала B (кэшируется; 0/26 эха) — только через оркестратора при следующей правке промптов (prompt_version-бамп, снапшот-дисциплина). + +## Ридер-IDE +(секция ресёрч-сессии «Ридер-IDE: выравнивание, статусы, HITL-редактура» — записи добавлять сюда) + +### 2026-07-11 — Сессия «Ридер-IDE» ЗАВЕРШЕНА → [research/16-reader-ide-alignment.md](research/16-reader-ide-alignment.md) + +Метод (research/13–15): мультиагентный веб-ресёрч (13 сборщиков по 5 кластерам) → адверсариальная верификация refute-by-default (13 верификаторов; вендор-клейм ≠ замер; доки/скриншоты CAT — источник поведения) → 26 агентов, 0 ошибок, ~1.23M ток., 652 веб-обращения; вердикты CONFIRMED/PLAUSIBLE/REFUTED. **+ $0-проба парности абзацев** на боевом прогоне этапа A (read-only `acceptance/guzhenren-25ch-parallel.txt` + `guzhenren-acc-a.db`). Живых LLM-вызовов: **$0**. Зоны чужие не тронуты, ничего не закоммичено. + +**Вердикт (кратко):** +- **$0-проба парности абзацев (этап A, deepseek→glm-5, 25 гл):** src↔финал **58% точно / 72% в ±1**, агрегат абзацев 0.987; **расхождение рождается на ДРАФТЕ (редактор сохранил число абзацев в 93% чанков), и это ЛЕГИТИМНОЕ слияние/дробление, не тихое вырезание** (границы двух худших чанков целы, объём нормален); объём ru/zh ≈3.0× (в символах; «1.9×» промта — токены). Внешне валидировано: CJK-литература 60.2% 1:1 на предложениях (Bertalign/MAC), структурный текст 85% абзацев (JRC) — наши 58% = норма жанра. +- **Гипотеза оркестратора «страница=артефакт, якорить узлы» — CONFIRMED** (все инструменты якорят узел/сегмент, никогда страницу; атом = «бед» Gale-Church = наш чанк). Но расщепляется: потребительские ридеры пар­ят 1:1 по узлу; N:M split-diff + «флаг не-1:1 первыми» — из выравнивателей/InterText. **Синк — КО-ЛОКАЦИЕЙ спаренных якорей (интерлив/общий грид), НЕ свободным скролл-синком двух панелей** (дрейфует на N:M). +- **Самое консеквентное — калибровка YELLOW, не якорь.** QE4PE (TACL 2025, 42 профредактора): подсветка ошибок НЕ ускоряет PE и мешает при неточности; **точность флага важнее покрытия.** Google Tricorder (<10% ложных/чекер), alert-fatigue (49–96% игнора) → преимущественно-жёлтая полоса бросается целиком. Замер precision каждого флага — ГЕЙТ перед показом цветов. +- **Контракт под фронт целиком выводится из read-model** (`status.go`): цвета = проекция disposition/passport/retrieval_state ($0). Net-new: `annotations.json`-схема, политика красных (editor-facing плейсхолдер / reader-facing fail-closed — D25.1), **human_override** (в D15.2 НЕ спроектирован; аналог CAT lock + PerfectMatch/X-Translate content-keyed carry-over), chat-edit фрагмента. +- **Форсировать структуру промптом — НЕТ** (инструкция ненадёжна: gpt-4o-mini сливает вопреки «do not merge»; жёсткость деградирует качество — Karpinska); индустрия конвергировала на **detect-and-recover ФЛАГГЕР** (GalTransl 8 категорий + retranslKey redrive ≈ наш per-flag redrive). Bertalign (MAC F1 0.909, $0 на GTX 1070) — для GOLD-пар канона в eval, НЕ в прод. + +> **[ОРКЕСТРАТОРУ — что ратифицировать]** (1) **Иерархия якорей** глава→чанк(нативный,точный)→абзац(best-effort ~58%)→предложение; **чанк = несущий якорь** (src_range↔dst_range), абзац — мягкий оверлей; синк ко-локацией, не скролл-синком. (2) **Контракт `annotations.json`** (§4.1: per-chunk state/color/reasons/src_range/dst_range/paragraph_anchors + version-хеши snapshot/chunker/source) как экспорт-артефакт пакета №4. (3) **Политика красных:** editor-facing — помеченный плейсхолдер (текущее, честно); **reader-facing fail-closed на красных = якорь release-state D25.1** (structurally_complete требует 0 красных) — ратифицировать при постройке reader-экспорта. (4) **human_override — скоуп в контракт (не полный дизайн):** 2 слоя — provenance LOCK safe-by-default (иммутабелен на redrive/resume) + content/context-keyed carry-over через --resnapshot с ТРЕТЬИМ состоянием «override needs re-review» (YELLOW-конфликт при смене src/контекста, никогда тихо-хранить/тихо-клоббить); НЕ авто-кормить override в TM; полный дизайн — с реализацией D15.2 v3.1 (wire/verdict-split = та же машинерия — синергия D26.4). (5) **Конвенция цвета:** добавить GREY=pending (CAT-конвенция: непереведённое=серое, красное=жёсткий провал); passport-rollup расширить до 3-тир (done+escalated/glossary_miss/style → YELLOW; сегодня «attention» триггерит только на RED). (6) Reader-embedded книго-полоса из детерминированных вердиктов + ru + серия — при скрининге аналогов не найдено (новый синтез; сузить как в research/15, не «аналогов нет»). + +> **[БЭКЕНДУ — требования к экспорту, НЕ код сейчас]** (1) Экспорт `annotations.json` — проекция `chunk_status`+`retrieval_state`+`request_log` ($0, как `status --json`; `tmctl` сегодня не имеет export-команды — параллельный экспорт этапа A был ad-hoc). Поля §4.1; `src_range/dst_range` в нормализованный источник/собранный перевод — чанкер lossless даёт точно. (2) **Цвет-мап детерминирован из УЖЕ существующих полей** (§3.1): RED=flagged-без-dst; YELLOW=done+escalated ∨ glossary_miss ∨ postcheck_misses>0 ∨ style_flags>0; GREEN=чисто; GREY=pending. `flagReasonSeverity()` уже даёт приоритет. (3) **Диалог-аварный флаггер парности абзацев** — класс style-флага (наблюдаемость/YELLOW, НЕ hard-fail: 1:N на диалоге — норма Розенталь §52; описательное слияние — слабее вес); пере-инжектить правки через span-map, не LLM-apply. (4) **passport несёт arity-распределение абзацев** (1:1/1:N/N:1 vs полоса ~60% CJK…85% структурный) — чтобы 58% читалось как норма. (5) **human_override — provenance-слой вне RequestHash** (как post-check: live-recomputed, verdict-нейтрален), ключ по content_hash чанка; проектировать вместе с D15.2 v3.1. Реализация — не сейчас; армит фронт Ф3. + +> **[ПОЛИГОНУ — ТЗ]** (1) **Диалог-аварная пере-нарезка $0-пробы парности** (фальсифицируемо, §5-🧪): классифицировать 53 чанка этапа A на диалог/описание, проверить — концентрируется ли расхождение в (i) легитимно-развернувшихся диалогах и (ii) слияниях; если равномерно — норма-гипотеза неверна. Скрипт-затравка: `scratchpad/parity_probe.py` (переиспользуем; /tmp волатилен — забрать). (2) **Замер precision флаггеров** для калибровки YELLOW (гейт §3.2): per-flag-reason точность против blind-чтения владельца/редактора на срезе; демоут флага <10% истинных в «слабые сигналы». Совместить с exp12 (диагностика уже читает те же главы). (3) **Bertalign zh→ru spot-check** до доверия (нет измеренных zh→ru; всё внешнее — zh→en): ручная сверка на held-out срезе перед использованием для GOLD-пар пилота. Свежие прогоны НЕ требуются — проба сделана на сохранённых выходах этапа A. diff --git a/docs/research/16-reader-ide-alignment.md b/docs/research/16-reader-ide-alignment.md new file mode 100644 index 0000000..e6c767b --- /dev/null +++ b/docs/research/16-reader-ide-alignment.md @@ -0,0 +1,321 @@ +# 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; сама проба напечатала `< 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-`

`; 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-узел после `

`, [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": "", + "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.*