textmachine/docs/research/22-domain-harness-survey.md

347 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# research/22 — Доменные харнессы перевода: конкуренты vs наш бэкенд
> **РЕВЬЮ-ШАПКА ОРКЕСТРАТОРА (лендинг 24.07.2026).** Отчёт прошёл ДВА рубежа самой сессии (19-агентный по чужому коду + 9-агентный адверсариал собственного синтеза, поймавший её же факт-ошибки — ревизия 2 их вшила). Мой спот-чек при лендинге: 5/5 несущих клеймов сошлись байт-в-байт (наши `detectCJKLeak sanitizer.go:188/411` · `cheapgate-v4 cheapgates.go:55` · `ledger Reserve/SettleWithCheckpoint` — существуют; их AiNiee `ProofreadTask` typed-error→адресный proofread и GalTransl `GenDic` greedy set-cover — ровно как заявлено). **Флаг «D39.7-коллизия» разрешён: коллизии нет** — «риг-стандарт D39.7» в промтах/доках означает стандарт, УСТАНОВЛЕННЫЙ решением D39.7 (exp15: per-vote/полные окна/floor), а не отдельный D-номер рига; подпись в `eval/rerun2_judge/judge.py` корректна как ссылка на стандарт. Рекомендации §2 — кандидаты, абсорбция по решениям в PROGRESS/D-логе; оценка важности и маппинг в планы — отчёт оркестратора владельцу 24.07.
> **→ ПОСТРОЕНО (25.07, оркестратор №7):** разрыв Q6 «gating+repair» закрыт паком-16 (D39.24, `2d7f589`) — слой-3 diff-редактор по прецеденту AiNiee ProofreadTask: позиционная детекция `checks.RepairCandidates` (`internal/checks/repair.go`) + read-only скан остатка + машинерия ремонта за `enabled:false`; включение платного пути = решение владельца по замеру остатка; промпты ремонта — `prompts/<пара>/repair/<класс>.md`.
> **Ресёрч-сессия, 2026-07-24. Роль — ресёрч ($0: ни одного вызова моделей, чужие тулзы не
> запускались, ключи не тронуты; `backend/` read-only). НЕ закоммичено — лендит оркестратор.**
> **РЕВИЗИЯ 2 (после второго адверсариального рубежа, см. §0).** Сиквел research/21 (транспорт
> агент-CLI) И **углублённый file:line-разбор конкурентов, УЖЕ обозренных на маркет-уровне в
> `research/02-competitors` и на уровне глоссарий-кода в `research/05-memory-glossary`** (этот
> отчёт — их продолжение, не первичное открытие; ценность = file:line-глубина + Q6-чекер-таксономия
> + новички + датированный Q7-корпус, НЕ вердикт — его 02/05/15 уже вынесли).
## §0. Дисциплина верификации (два рубежа, мандат 12.07)
**Рубеж 1 — атомы (клеймы о чужом коде).** Мульти-агентный воркфлоу (19 агентов, 0 ошибок): по
ридеру на репо → адверсариальный верификатор (author≠reviewer, открыть каждый несущий `file:line`).
Код-верифицированных несущих клеймов **~88** (AiNiee 22 · GalTransl 15 · Luna 14 · TransAgents 14 ·
bbm 12 · translation-agent 12): **CONFIRMED все кроме 4 IMPRECISE** (сдвиг строки-якоря, клейм верен),
**0 REFUTED**. README≠код поймал 2 вендор-овер-клейма (bbm «summary», TransAgents «beyond human»).
**Рубеж 2 — синтез (сам этот отчёт).** 9 агентов сквозняком по всей архитектуре (0111), всему
research (0121), всем backend-пакетам, eval + критик полноты. **28 MAJOR / 23 MINOR находки —
ревизия 2 их впитала.** Крупнейшие правки (все сверены мной по HEAD `b8a7863`):
- **Факт-ошибка (была):** пак-13 и пак-12 **ЗАЛЕНДЕНЫ** (`2f91b04`, `7fe0a5b`), пак-14 в работе.
Первая версия писала «пак-13 строит/UNBUILT/закрывает разрыв» — неверно. Чекеры percent/latin/
broken-word ПОСТРОЕНЫ (`cheapgates.go:55` `cheapgate-v4-percent-latin-brokenword`), но
**observability-only** — разрыв с их gating+repair НЕ закрыт (см. Q6).
- **Ложный негатив (был):** у нас ЕСТЬ residual-CJK-детектор на выходе — `detectCJKLeak`/
`isCJKLeakRune` с gloss/ruby-whitelist (`sanitizer.go:188,411,83`) = аналог AiNiee. Первая версия
писала «нет / пак-13 строит».
- **Пропущенная ось:** COGS-телеметрия (`store/ledger.go` Reserve/Settle + потолки BookUSD/DayUSD;
`ledger/pricing.go` CacheWrite-премия) — мы лидируем **безоговорочно vs все 7**; prompt-cache
вшит (`render.go:223`, `provider_anthropic.go`). NovelTrans-Stripe = биллинг клиентов, не COGS.
- **Кредит прайор-арта:** база нашего глоссария (src→dst/#info, matched-only, sticky, токен-бюджет)
сознательно взята у GalTransl/SakuraLLM/SillyTavern (`research/05:66-84,146,152`); уникальна —
только КОМПОЗИЦИЯ (род+склонение+скоуп+trust+priority-eviction). SakuraLLM (следование глоссарию
через ДООБУЧЕНИЕ) — пропущенный Q1-механизм.
## Лицензии материала (сверены 2324.07)
| Репо | Лицензия | Код в клоне | Метод |
|---|---|---|---|
| AiNiee | **AGPL-3.0** | 45.7k Py LOC | читать+описывать; копировать НЕЛЬЗЯ |
| GalTransl | **GPL-3.0** | 32.9k Py LOC | читать+описывать; копировать НЕЛЬЗЯ |
| LunaTranslator | **GPL-3.0** | 71.6k Py (в скоупе ~перевод/глоссарий) | читать+описывать; копировать НЕЛЬЗЯ |
| TransAgents | Apache-2.0 (⚠ README-бейдж CC BY 4.0) | **НЕТ кода** — README+outputs | README/артефакты only |
| bilingual_book_maker | MIT | 9.0k Py LOC | описание паттернов |
| translation-agent | MIT | 1.8k Py LOC | описание паттернов |
| KeywordGacha | **БЕЗ лицензии** | клон удалён | ТОЛЬКО онлайн README/DeepWiki/issues |
**Ни строки чужого кода в textmachine. Все клеймы о коде — `repo/file:line`, README помечен «(README)».**
---
## §1. Вердикт: кто впереди по осям (и по планам/подходам)
**Кратко: мы впереди на защищаемом ЯДРЕ (память-банк-КОМПОЗИЦИЯ Q1, экономика/детерминизм майнинга
Q2, строгость связности Q3 [предварительно], доказательность ролей Q5) + на трёх осях, которых нет
у конкурентов вовсе (деньги, 18+, общность языка/структуры). Позади на ВЫПУСКЕ (Q4). Q6 — детекция
теперь построена (паки залендены), но GATING+REPAIR-петля у них есть, у нас нет.**
| Ось | Кто впереди | Почему (с поправками ревизии 2) |
|---|---|---|
| **Q1 глоссарий** | **МЫ — но на заимствованной базе** | База (src→dst/#info, matched-only, sticky, токен-бюджет) взята у GalTransl/SakuraLLM/SillyTavern-WorldInfo (`05:77,94,152`); **уникальна только КОМПОЗИЦИЯ** — per-терм род+склонение+`since/until`-скоуп+trust-диспозиция+priority-eviction (`15:16` прайор-арт-скрин подтверждает уникальность этой формулы, и что matched-инъекция НЕ уникальна). SakuraLLM — 4-й Q1-подход (дообучение). ⚠ Композиция НЕ измерена на вебновеллах; авто-DST-рендер = «главный продуктовый гэп» (`07:148`). |
| **Q2 автодобыча** | **Раскол** | Мы: $0-детерм-код, verified-канон, компактная подпись, **измеренный recall** (0.932 held-out / 0.965 full-slice, `eval/design11/ws3`). Они: LLM-NER ловит редкое (dst неверифицирован) + **одноклик-автопопуляция без подписи** — скорость, которую фабрика-юзер может предпочесть (наш verified-dst = осознанный correctness-trade). Set-cover GalTransl — техника для LLM-тира, которого у нас НЕТ. |
| **Q3 связность** | **МЫ по строгости (предварительно)** | Единственные среди ХАРНЕССОВ с эмпирикой (exp15). НО: (а) exp15 на PD-классике/претрейне = **предварительно** (`ourmap:115`, дисциплина CLAUDE.md); (б) наш банк закрывает лишь **~14%** ru-дискурс-ошибок, СТРУКТУРНО мимо дейксиса ~37% / эллипсиса ~29% (`08:113-114`) → «обходим провал» → «частично замещаем»; (в) **DelTA** (академ., измерил +4.58пп LTCR-1, +15.5…32.7пп на вебновеллах, `03:11`,`05:110`) — не «никто не мерил память». Наш чанкер «никогда не режет предложение» нейтрализует класс `chunk-boundary-split`, на который жалуются юзеры bbm/TA. |
| **Q4 выпуск/форматы** | **ОНИ (явно)** | bbm/AiNiee — зрелый epub-билингв (in-place tag-rewrite, TOC/сноски/CSS), PDF; **Immersive Translate (18097★, `02:26`) — крупнейший Q4-конкурент**, book-mode параллель-текст. У нас — JSON-export, ридер-IDE только в research/16. Наш крупнейший гэп; отложен планом (Ф3). Авторинг сносок/колонки — ни у кого. |
| **Q5 мульти-агент** | **МЫ по доказательности** | Единственные с ИЗМЕРЕННЫМ вкладом ролей (D39.20 ×3; + внешняя опора, которую мы недокредитовали: WMT24 zh→ru метрика-инверсия — Google-NMT обошёл ВСЕ мультиагент по d-BLEU, `18:161`; TransAgents = наш ближайший аналог, `18:118`). Их роли — театр (часть — single-call CoT). TransAgents-omission: 7 ролей **не починили** omission (базовый gpt-4 тоже омитит) — датапоинт ЗА нас. Живой судья у нас = eval-side, в проде НЕ подключён (честно). |
| **Q6 выпускной QA** | **Раскол: детекция ~вровень, GATING+REPAIR — они** | Пак-12/13 **ЗАЛЕНДЕНЫ** (`2f91b04`): percent/latin/broken-word/юнит/число-чекеры + `detectCJKLeak` = детекция теперь широкая. НО все — **observability-only** (флаг, не диспозиция; промт-пак-13 пп.3/10). У AiNiee/GalTransl чекеры **ГЕЙТЯТ + драйвят ре-перевод** — этой петли у нас нет (= рек №1). Плюс: часть классов $0-детерминизмом не берётся вовсе (DC5 стих 4274% FP, `eval/design11/ws5`). Мы впереди по семантик-сигналу (план слой-5) + числам/единицам. |
| **Деньги/COGS** ⭐НОВОЕ | **МЫ безоговорочно** | `store/ledger.go` reserve→settle (kill-9-атомарно) + потолки BookUSD/DayUSD; `pricing.go` пер-модель с CacheWrite-премией; prompt-cache вшит; ~$0.85/ранобэ (D30.4). **Ни один из 7 не публикует замера COGS.** NovelTrans = Stripe-биллинг (продуктизация, не телеметрия). Owner-north-star `07:32`. |
| **18+/канал B** ⭐НОВОЕ | **МЫ** | Роутер Mistral+grok+abliterated (D14/D19.1/D22). DazedMTL/OpenNovel/Sakura-local делают NSFW, но **не в паре с качество+консистентность+ru** (`02:110` §6.6). |
| **Общность языка/структуры** ⭐НОВОЕ | **МЫ** | Все 7 + новички — zh/ja→EN или структуро-специфичны (VN-hook/galgame/RPG-JSON). Наш адаптивный чанкер + pair-keyed langpack (§0.1 `09:29-31`, D39.16) обобщают ДАННЫМИ. ⚠ ja→ru сеам-построен, но НЕ протестирован (честный гэп). |
### Стратегический слой (планы/подходы)
1. **Рынок сходится к НАШЕЙ архитектуре, но без нашей эмпирики.** `NovelTrans` (новичок, MIT,
04.2026; **⚠ имя коллизирует с WMT24-статьёй NovelTrans `11-gap-3:173` — разные проекты**) —
зеркал: мульти-агент + RAG-память (Redis HNSW) + Stripe-биллинг + Chrome-ext. НО 33★, 0 измерений →
референс архитектуры. Аналогично prior-art: `Nuanxed` (B2B AI+human-post-edit, HarperCollins,
`02:51`/`09:155`) — продуктизация, которую мы не строим.
2. **Bolt-on глоссарий-тул проигрывает fused-майнингу.** Автор `KeywordGacha` (neavo) сам
soft-депрекейтил свой майнер (#150) в пользу встроенного в `LinguaGacha`. Подтверждает наш
W1.5-курс (майнинг ВНУТРИ волнового цикла).
3. **Ближайший конкурент по НАШЕЙ паре — `LinguaGacha`** (zh/ja→русский; **уже обозрен 04.07,
`02:33`,`05:82`НЕ новичок**; его one-click-глоссарий + retranslation-by-keyword мы уже пометили
«must-have»). Single-pass + неверифицированный dst → упрётся в консистентность, которую мы
механизируем. Бенчмарк-кандидат №1.
4. **Форвард-роадмапы конкурентов** мы разобрали ТОНКО (только сигнал #150) — честный остаточный
гэп: открытые milestones AiNiee/GalTransl/LinguaGacha не свипнуты. Наш план — стадийный
(паки-12/13 залендены → масштаб книги · канал B · Ф2 · ja→ru).
---
## §2. Топ-рекомендации по импакту (пересмотрены ревизией 2)
Приоритет = импакт на north-star (верность) × дешевизна × вписанность в план. **Многие «взять»
оказались УЖЕ В ПЛАНЕ** — переформулированы как «расконсервировать/подтверждает», не «новое».
1. **[ВЫСОКИЙ] Замкнуть петлю «чекер→типизированная-ошибка→адресный ремонт спана».** Наши чекеры
(пак-13 залендён, но observability-only) флагают, НЕ чинят. AiNiee: флаг С типом → single-line
proofread (`ProofreadTask.py:250`); LinguaGacha — retranslation-by-keyword. **Уже в плане:**
целевой слой-3 = diff-редактор (search/replace-спаны + детерм. Go-apply, ограниченный
blast-radius, omission-safe, `09:107-111`) → **расконсервировать Q4b-diff-редактор с прецедентом
AiNiee/LinguaGacha**, не «новая кража». *Метрика: defect-residual.*
2. **[СРЕДНИЙ, был ВЫСОКИЙ] Только offline language-ID mismatch.** Residual-source-script у нас УЖЕ
есть (`detectCJKLeak`, `sanitizer.go:188/411`); language-ID-на-абзацах тоже **уже план**
(`04-unhappy-paths:54`). Net-new = лишь mediapipe/ONNX-реализация (`LanguageChecker.py:309`) — и
она **конфликтует с default-B** («код≥локаль», пак-13 отверг даже pymorphy, `11-plan:31`) →
флажить как policy-исключение, НЕ «$0/offline». *Метрика: wrong-language rate.*
3. **[НИЗКИЙ, был СРЕД-ВЫСОКИЙ] Set-cover бюджет-кап — условно/отложено.** GalTransl `GenDic.py:591`.
Контингентно на LLM-тир майнера, которого НЕТ и нет в near-term-роадмапе; текущий COGS майнинга =
$0. Держать как опцию ЕСЛИ строим LLM-тир слепых зон §B4. *Метрика: 0 сейчас.*
4. **[СРЕДНИЙ] In-place epub tag-rewrite (bbm/AiNiee) — БЕЗ resume.** `helper.py:19` insert_trans +
exclude-tag + TOC-uid-fix. **Resume ВЫЧЕРКНУТ из кражи:** у нас УЖЕ сильнее — checkpoint-keyed,
kill-9-атомарный, cross-run, $0-резюм ×3 доказан (`store/ledger.go:117-123`, D39.20); их
pickled-resume = process-crash in-memory. *Метрика: publishable-robustness (не верность).*
5. **[СРЕДНИЙ, с оговоркой] 12-класс Problem.py как чек-лист — но reflow-aware.** GalTransl
`Problem.py`. ⚠ punctuation add/drop + line-parity **воюют с нашим editor-reflow** (их VN =
line-by-line без reflow; наш редактор легитимно сливает пунктуацию/абзацы) — брать нельзя вслепую;
у нас уже есть alignment-protected repetition-детектор + dialogue-linter в плане (`04:77,95`).
Брать: char-freq-degeneration, control-code-loss. *Метрика: детекция.*
6. **[НИЗК-СРЕД, A/B] Явный critique-артефакт — УЖЕ обозрен.** translation-agent `utils.py:100`; но
TEaR/Trilateral Collaboration уже в `03-academic:51,113` и в нашем дизайне (`07:32`). Открыт лишь
ЭМПИРИЧЕСКИЙ фит на вебновелл-срезе, не новизна. НЕ веровать (issue #10 «negative optimization»).
7. **[НИЗКИЙ] Halve-chunk-on-retry (AiNiee `TaskExecutor.py:393`)** для волнового ретрая.
8. **[НИЗК-СРЕД] Q7-леджер: детекция многого УЖЕ в плане.** Omission/inversion-ДЕТЕКЦИЯ = слой-5
reflow-бэкстоп (`11-plan:683-689`, пак-4) — не «неосвоенная идея», только REPAIR-половина открыта.
**Добавить в леджер-кандидаты** (из `12-*`-таксономий, north-star-класс): консистентность
времени/вида глагола (BlonDe 38.7%, ru-вид `12-error-taxonomies:8`), addition/фабрикация,
voice-flattening; + `chunk-boundary-split` (мы нейтрализуем конструкцией — усиливает Q3).
---
## §3. Таблицы «есть у них / нет у нас» (Q1, Q2, Q6)
### Q1 — глоссарий-системы
Ось асимметрична в нашу пользу, НО база заимствована (`02`/`05`). «Есть у них / нет у нас»:
| Механизм | У кого | У нас |
|---|---|---|
| Следование глоссарию через **ДООБУЧЕНИЕ модели** | SakuraLLM (`05:77`) | НЕТ (мы — промпт-инъекция; фронтир достигает того же промптом) |
| Одна колонка src = литерал ИЛИ regex | AiNiee `GlossaryHelper.py:90` | НЕТ (мелочь) |
| Богатый персона-профиль в промпт | AiNiee `PromptBuilder.py:690` | Частично (Speech/FirstPerson, не полный) |
| **Одноклик авто-DST-рендер без подписи** | AiNiee/GalTransl/KeywordGacha/LinguaGacha | НЕТ — осознанный correctness-trade (майнер не пишет dst); наш «главный продуктовый гэп» `07:148` |
Наш перевес (уникальна КОМПОЗИЦИЯ, не части — `15:16`): per-терм Gender/Decl(JSON-формы)/Speech/
FirstPerson/Nickname (`glossary.go:19-48`) · спойлер-скоуп since/until (`memory.go:454-464`) ·
trust-диспозиция confirmed/ambiguous/reject + trustGateEvent (`memory.go:89-93,718-793`) ·
токен-бюджет priority-eviction (**паттерн SillyTavern World Info `05:94,152`, заимствован+расширен**,
`memory.go:437-451`) · role-рендер (`memory.go:539-600`). *matched-only инъекция СОВПАДАЕТ (не наш
эксклюзив, `15:16`): у нас `memory.go:358-452`, у них `GlossaryHelper.py:212`/`noundict.py:82`.*
### Q2 — автодобыча термов
| Механизм | У кого | У нас |
|---|---|---|
| Set-cover бюджет-кап LLM-NER | GalTransl `GenDic.py:591-684` | НЕТ (LLM-тира нет; см. рек №3) |
| Map-reduce 2-й LLM-пасс dedup/тип | AiNiee `AnalysisTask.py:362,514` | Частично (алиас-кластеризация ДЕТЕРМ PROP-слой `miner_alias.go:71`; NOM-слой в LLM не построен) |
| LLM-NER recall редкого/полисемии | AiNiee/KeywordGacha | Частично (V-C паттерны + banknote; floor=3 слеп к редкому by construction) |
| **Одноклик авто-популяция без подписи** | AiNiee/GalTransl/KeywordGacha/LinguaGacha | НЕТ — verified-dst-дисциплина (осознанно) |
| Gender при экстракции | KeywordGacha 角色性别 | Частично (evidence-счётчики + подпись владельца) |
| Cross-chunk voting: один dst | GalTransl/KeywordGacha `find_best` | Есть сильнее — canon-по-ВСЕМ-вхождениям (research/20 §C2) |
| Verbatim-occurrence guard | KeywordGacha `search_for_context` | Есть BY CONSTRUCTION (майнер читает source) |
**Наш перевес:** $0/детерминизм, **ИЗМЕРЕННЫЙ recall** (0.932 held-out / 0.965 full-slice,
`eval/design11/ws3_miner_verify.py:8`; competitors 0 замеров), verified-канон. **Острие: наш майнер
на полной книге gu-zhenren = 13618 кандидатов** (паритет-тест D39.16), capped `emitRankCap=200` +
precision30 (`miner_emit.go:23-207`). У AiNiee юзер видит каждого выжившего (unbounded); у KeywordGacha
sign-off-UI НЕТ; наша подпись per-КЛАСТЕР — впереди по UX, но авто-DST мы отдаём владельцу.
### Q6 — выпускной QA
⚠ Пак-12/13 **ЗАЛЕНДЕНЫ** (`2f91b04`) — детекция построена, но **observability-only** (флаг, не гейт).
| Дефект-класс | У кого gating+repair | У нас (после паков) |
|---|---|---|
| Checker→typed-error→scoped repair | AiNiee `ProofreadTask.py:250`; LinguaGacha retrans-by-keyword | **НЕТ** (флагаем, не чиним) — рек №1 / план слой-3 |
| Residual-source-script на ВЫХОДЕ | AiNiee `AdvancedChecks.py:173` (гейт) | **ЕСТЬ детекция** `detectCJKLeak` gloss/ruby-whitelist (`sanitizer.go:188,411`) — но observ-only |
| Offline language-ID (модель) | AiNiee `LanguageChecker.py:309` | НЕТ (план `04:54`; модель конфликтует с default-B) |
| Degeneration char-freq | GalTransl `Problem.py:69` | Есть loop-detect (не char-freq) |
| Punctuation add/drop, line-parity | GalTransl `Problem.py:74` | Осознанно НЕТ (воюет с editor-reflow, `04:95`) |
| Control-code/placeholder-preservation | AiNiee `check_regex.json` | Частично (sanitizer-классы) |
| Number/unit-magnitude equality | — (у них НЕТ) | **ЕСТЬ** DC1/DC2 + percent (`cheapgates.go:92`, залендено) — наш эксклюзив |
| Стих/аллюзия | — | Не берётся $0-детерм (4274% FP `eval/design11/ws5`) → owner-curation |
Наш перевес (helper-фиксы ревизии 2): echo-детектор — `disposition.go:210,263-266` (не `:281-298`);
AiNiee Jaccard — kanji-exclusion гейтит line-skip, НЕ сам Jaccard (не «kanji-excl»). Двухъярусный
sanitizer + семантик-сигнал (план слой-5 `09:122` — ось, которой у них нет).
---
## §4. Per-question разборы (сжато; полные «их спектр» — в ревизии 1, здесь дельты ревизии 2)
**Q1.** Их спектр: AiNiee (двойная система, gender в character-табл, matched-only, БЕЗ бюджета/
скоупа/склонения) · GalTransl (src\tdst\tnote, gender free-text) · Luna (GptDict+info, VNDB-gender) ·
bbm (нет; только Qwen-MT vendor `terms`) · **SakuraLLM (ДООБУЧЕНИЕ под глоссарий, `05:77`)** ·
KeywordGacha (онлайн). Наш механизм — `glossary.go:19-48` + `memseed.go` + `memory.go`. **Вердикт:
мы впереди по КОМПОЗИЦИИ, база заимствована (02/05), уникальность формулы = `15:16`.** Взять:
SakuraLLM-подход (для локального канала B?); soft>hard-constraint (`05:14,156`) подтверждает наш
no-hard-constraint выбор.
**Q2.** Разобрано §3. Дельта: авто-популяция = их продуктовое преимущество (наш `07:148`-гэп);
recall у нас ИЗМЕРЕН (0.932 held-out); KeywordGacha #150→LinguaGacha = fused-майнинг > bolt-on.
**Q3.** Их: rolling-src (AiNiee) / rolling-dst (GalTransl contextNum=8, Luna, bbm N=3, все OFF/
переврано) / весь-source (translation-agent, катастрофа на масштабе). Наш: волны + edit-единицы +
sticky, carryover ОТВЕРГНУТ (exp15). **Дельты ревизии 2:** (а) exp15 = PD-классика = предварительно;
(б) банк ≈14% ru-дискурс-ошибок, дейксис ~37%/эллипсис ~29% СТРУКТУРНО открыты (`08:113`); (в)
**DelTA/DocMTAgent** (Apache-2.0, измерил память +4.58пп/+15.5-32.7пп на вебновеллах, `03:11`,`05:110`)
= ближайший академ-аналог, «никто не мерил память» — неверно, сузить до ДЕПЛОЙ-харнессов; DelTA
ПОДТВЕРЖДАЕТ нашу ставку структурная-память>длинный-контекст. Наш чанкер нейтрализует
`chunk-boundary-split` (`chunker.go:286` never-split-sentence).
**Q4.** Их: bbm (epub sibling-insert, PDF, `helper.py:19`) · AiNiee (in-place `EpubWriter.py:46`) ·
**Immersive Translate (18097★, `02:26`) — крупнейший** · Ebook-Translator-Calibre-Plugin (2538★,
`02:31`). Наш: `tmctl export` JSON + `--pairs`; banknote срезает сноски но НЕ ре-аттачит; ридер-IDE =
research/16 only. **Они впереди явно** (наш крупнейший гэп, отложен Ф3). Взять: epub tag-rewrite
(БЕЗ resume — наш сильнее). Авторинг сносок/колонки — ни у кого → banknote-в-сноску = дифференциатор.
**Q5.** Их: TransAgents (7 ролей, код-less, персона-театр; **omission — роли НЕ починили, базовый
gpt-4 тоже омитит** `verify__TransAgents`, не «роли ВЫЗВАЛИ») · translation-agent reflect→improve
(README «BLEU sometimes worse») · bbm/AiNiee single-call CoT · GalTransl same-model proofread ·
NovelTrans (33★, 0 замеров). Наш: линейный translator→БИЛИНГВ-editor; **судья Ф2 НЕ подключён в
проде** (`pipeline.go:285`), живой судья = eval-side (⚠ D39.7 — коллизия нумерации: ратиф. D39.7 =
exp15-floor, rerun2-риг помечен D39.7 лишь в eval-коммите `cd107e1` → флаг оркестратору). **Мы
впереди по доказательности** — недокредитованная внешняя опора: WMT24 zh→ru инверсия (`18:161`),
TransAgents-аналог (`18:118`). Взять: рек №1 (=план слой-3), critique-артефакт (=`03:51,113`+`07:32`).
**Q6.** Разобрано §3. Ключ: паки залендены → детекция широкая, но observability-only; GATING+REPAIR
(их сила) = наш открытый гэп = рек №1; часть классов $0-недостижима (стих).
**Q7.** Датированный корпус (полная таблица — ревизия 1) + **пропущенные классы из `12-*`
(north-star, не только issue-трекеры):** консистентность времени/вида глагола (`12-error-taxonomies:8`),
addition/фабрикация, voice-flattening, `chunk-boundary-split` (мы нейтрализуем). **Уже в плане
(не «неосвоено»):** omission/inversion-детекция = слой-5 (`11-plan:683`). Три кандидата ревизии 1
(omission-имя, кросс-глава-контекст #967, export-revert #1044) остаются, но omission-детекция — уже
план; открыт лишь repair.
---
## §5. Фаза-0: новички vs прайор-арт (ревизия 2: половина — НЕ новички)
| Проект | Лицензия | Статус | Примечание |
|---|---|---|---|
| **Glossarion** (Shirochi-stack) | MIT | **Новичок** (94★, 8224 коммита) | mine→translate→rebuild + QA-scan; single-pass |
| **NovelTrans** (YuBing-link) | MIT | **Новичок** (33★, 04.2026) | мульти-агент+RAG+Stripe+ext; 0 замеров; ⚠ имя ≠ WMT24-NovelTrans (`11-gap-3:173`) |
| LinguaGacha (neavo) | НЕТ | **НЕ новичок** — обозрен 04.07 (`02:33`,`05:82`) | zh/ja→ru; бенчмарк-кандидат №1; features уже «must-have»-помечены |
| DocuTranslate (xunbu) | MPL-2.0 | **НЕ новичок**`02:34` (1165★→1218★) | тот же проект +50★ |
**Крупные прайор-арт-конкуренты, которые отчёт-ревизия-1 пропустил (все в `02-competitors`):**
Immersive Translate (18097★, крупнейший Q4) · Ebook-Translator-Calibre (2538★) · SakuraLLM (4635★,
дообученная модель, Q1-подход + backend для GalTransl/AiNiee/Luna) · DazedMTL (18+ pipeline, `02:36`) ·
Nuanxed (B2B human-post-edit, `02:51`) · DelTA/DocMTAgent (академ., Apache-2.0, измеренная память,
`03`/`05:110`). **Вывод свипа держится:** measured-литкачество не опубликовано ни одним ДЕПЛОЙ-
харнессом (DelTA — академ-исключение, мерил консистентность памяти, не худож. качество).
---
## §6. Appendix per-repo
(Без изменений от ревизии 1 — верификация рубежа-1: AiNiee 21/22 CONFIRMED · GalTransl 15/15 ·
Luna 13/14 · TransAgents 13/14 · bbm 12/12 · translation-agent 11/12; 4 IMPRECISE, 0 REFUTED.
KeywordGacha/новички — онлайн, confidence=low.) Полные разборы «их спектр» — в git-истории ревизии 1.
---
## §7. Форвард-роадмапы конкурентов vs наш план (веб-свип 24.07, $0)
Метод: 3 агента, 13 проектов — GitHub Milestones + ROADMAP.md + pinned/enhancement-issues + README
«планы/计划» + траектория релиз-ноутов. **Ключевой факт: формального роадмапа НЕТ почти ни у кого**
(11 из 13 без Milestones и ROADMAP → «планы» = инференс из релизов, confidence low). Формальный
роадмап только у: SakuraLLM (TODO #42), NovelTrans (README-таблица), translation-agent (README TODO,
но заморожен), TransAgents/DelTA (paper future-work).
### §7.1 Куда они идут (вектор)
| Проект | Роадмап | Вектор движения | Релевантно нам |
|---|---|---|---|
| AiNiee | нет (low) | больше форматов/плагинов, ASR (FunASR); neavo УШЁЛ на v5.2 | — (breadth) |
| GalTransl | нет (low) | ещё движки/провайдеры/языки (qwen-mt, 302.AI, тай/хинди/вьет), GUI-зрелость | — |
| LunaTranslator | нет (low) | rolling-инкремент: игры/OCR/TTS/оверлей (релиз каждые 13 дня) | — |
| **SakuraLLM** | **TODO #42 (med)** | Qwen3+RL/GRPO, **двунаправленный zh↔ja↔ko**, квантизация, ~6GB VRAM | ⚠ канал B / локаль-ассист / ja→ru — следить |
| LinguaGacha | нет (low) | нативная консистентность имён, ARM, CLI; **явно НЕ в мульти-агент/редактор** | ⭐ наш редактор-слой — НЕ на их пути |
| KeywordGacha | **заморожен** (v0.20.2, ~13 мес) | поглощён LinguaGacha (Name Field v0.102.0, 2026-06) | ⭐ fused>bolt-on подтверждён живьём |
| Glossarion | нет (low) | ширь: форматы/провайдеры/**манга**/QA-глубина (quotation/header-чекеры) | QA растёт |
| NovelTrans | **README-таблица (med)** | **100% инфра/скейл/observability** (Nginx HA, Resilience4j, RabbitMQ, Jaeger, Milvus) — НОЛЬ про качество/редактора | зеркал архитектуры, но роадмап = продакшн, не верность |
| DocuTranslate | нет (low) | format-fidelity (DOCX/EPUB) + провайдер-ширь (DeepSeek-V4) | — |
| bilingual_book_maker | нет (low) | **PDF-layouts, structure-aware MD, EPUB-tag-safety** (коммиты 0719.07.2026) | ⚠ Q4-разрыв растёт |
| translation-agent | README TODO (заморожен, ~29 коммитов) | глоссарий-создание/инъекция + doc-level human-eval | «те же задачи, что мы» — но мёртв |
| TransAgents | paper (заморожен, апр-2025) | лучше human-eval длинных текстов; **omission = главная нерешённая слабость** | ⭐ назвали нашу D39.20-проблему, не решили |
| **Immersive Translate** | нет (med, closed) | **мультимодал (манга/картинки/видео), мобайл (Babel Browser), документ (BabelDOC), AI-Expert (роль-ассайн)** | ⚠ Q4/формат-лидер (18.3k★) уходит вперёд; AI-Expert ~ prompt-роли |
| DelTA/DocMTAgent | paper (заморожен, янв-2025) | **удешевить память-агента: детерм-NER вместо LLM, dense-retrieval, меньше вызовов** | ⭐ их «будущее» = то, что мы УЖЕ построили ($0-майнер) |
### §7.2 Их вектор vs наш план
Наш план (паки-12/13 залендены, пак-14 в работе): **масштаб целой книги · канал B (18+) ·
Ф2-механизмы (голос/состояние D21, native-Gemini судья) · ja→ru §B5 → пилот Ф2.5**; target-arch
слой-3 diff-редактор, слой-5 семантик-сигнал.
- **Нашей north-star (верность/translationese через ИЗМЕРЕННУЮ редакторскую глубину) НЕТ ни на одном
роадмапе.** Фан-тулзы идут в ширь; LinguaGacha ЯВНО отказывается от мульти-агента; NovelTrans-роадмап
= чистая инфра; Immersive = потребительский мультимодал. → **окно «первого с памятью серии +
измеренной редактурой» остаётся открытым.**
- **Два подтверждения нашего курса ЧУЖИМИ роадмапами:**
-**fused-майнинг > bolt-on — доказан событием:** neavo ушёл из AiNiee (v5.2) строить LinguaGacha;
KeywordGacha ЗАМОРОЖЕН ~13 мес, а LinguaGacha ПОГЛОТИЛ его экстракцию терминов нативно (Name Field
v0.102.0). Отдельный тул умер, встроенный живёт — ровно наш W1.5.
-**Роадмап DelTA = наш пройденный путь:** их future-work (заменить LLM-NER детерм-выравниванием/
скриптами, dense-retrieval вместо LLM, срезать вызовы) — направление, которое мы УЖЕ реализовали
($0-детерм-майнер, recall 0.932 held-out). Мы впереди заявленного шага академ-фронтира.
- **TransAgents назвали нашу проблему, но не решили:** их paper-flag «content-omission — главная
нерешённая слабость» + «почему LLM-судьи любят flair» = наша D39.20 анти-корреляция
гладкость↔верность. Мы механизируем против того, что они только диагностировали.
- **Где ИХ роадмапы уводят вперёд (честно):**
-**Q4/форматы разрыв РАСТЁТ:** bbm (PDF-layouts), Immersive (BabelDOC/мультимодал), DocuTranslate
(format-fidelity) активно куют выпуск, пока наш Q4 отложен. Аргумент за то, чтобы epub-tag-rewrite
(рек №4) не откладывать до Ф3 бесконечно.
-**SakuraLLM** (Qwen3+RL, двунаправленный CJK, 6GB VRAM) — релевантен каналу B / локаль-ассисту /
ja→ru; готовая специализированная модель, мониторить.
### §7.3 Итог «по планам»
Мы **впереди по НАПРАВЛЕНИЮ** (единственные строим измеренную редакторскую глубину + композитную
память + канал B + деньги — рынок это НЕ роадмапит), **и наш путь дважды подтверждён чужими
роадмапами** (fused-майнинг живёт/bolt-on мёртв; академ-DelTA хочет прийти туда, где мы уже стоим).
**Позади — только выпуск (Q4), и там конкуренты активно двигаются** — единственная ось, где
промедление стоит позиции.
---
## Самопроверка сессии (мандат 12.07)
- **Два рубежа исполнением** (§0): рубеж-1 верифицировал ЧУЖОЙ код (~88 клеймов, 4 IMPRECISE, 0
REFUTED); **рубеж-2 (9 агентов сквозняком по всему репо) верифицировал МОЙ СИНТЕЗ** и поймал: факт-
ошибку (пак-13 залендён, не unbuilt), ложные негативы (detectCJKLeak/cost-ledger/prompt-cache/
resume — у нас ЕСТЬ), непрокредитованный прайор-арт (02/05/15/18), 3 пропущенные оси (деньги/18+/
общность), overstated-вердикты (Q1-независимость, Q3-абсолютизм, «пак-13 закрывает»). **Все
несущие правки сверены мной по HEAD `b8a7863` (git log, cheapgates.go, sanitizer.go, ledger.go).**
- **README≠код**, лицензионная дисциплина, $0 — соблюдены; refusal_corpus не тронут.
- **Что ДЕРЖИТСЯ (22 CONFIRM):** ядровые вердикты — мы впереди по Q1-композиции/Q2-экономике/Q3-
строгости[предв.]/Q5-доказательности + 3 новые оси; позади по Q4; Q6 = детекция построена,
gate+repair открыт. Анти-корреляция гладкость↔верность, fused>bolt-on, verified-dst-trade — все
подтверждены прайор-артом.
- **Форвард-роадмапы конкурентов свипнуты (§7, 3-агентный веб-свип 24.07):** 11 из 13 без формального
роадмапа; каждый planned-item несёт source-url + дату; инференс из релизов помечен confidence=low
(фичи не выдуманы). Итог усилил вердикт «по планам»: наш курс дважды подтверждён чужими роадмапами.
- **Остаточные честные гэпы сессии:** D39.7-коллизия нумерации — оркестратору; отчёт НЕ закоммичен.