72 lines
15 KiB
Markdown
72 lines
15 KiB
Markdown
# План MVP (v3, 2026-07-09)
|
||
|
||
Цель MVP (бриф, п. 24): **бэкенд переводит целую книгу целиком** — консистентно, дёшево, с учётом стоимости. Интерфейс — CLI; HTTP API закладываем как тонкий слой (Фаза 3), IDE-фронт — после бэкенда.
|
||
v2 (04.07) — после адверсариального ревью синтеза. **v3 (09.07) — синхронизация с контрактом [`05-decisions-log.md`](05-decisions-log.md) (D1–D17) после стратегического ревью [`07-strategic-review.md`](07-strategic-review.md)**: сняты мёртвые приёмочные пороги, переписан интерим-18+, фазовые списки приведены к фактам. При конфликте этого плана с D-логом — **источник истины D-лог**.
|
||
|
||
## Дорожка данных (параллельно всем фазам, владелец + сессия «Полигон»)
|
||
|
||
Лицензионные издания для золотого набора, выравнивание, глоссарии, отбор 25–35 глав пилота, refusal-корпус (вкл. explicit-фрагменты — гейтят 18+ руку), замеры токенизации.
|
||
**Чекпоинт (новый, гейтит валидность эмпирики): 3–5 глав реальных вебновелл zh/ja вне претрейна** — довалидация r-коэффициентов (exp01/08), precision гейтов на терсных репликах (exp07), частота эха вне классики. Вся текущая эмпирика снята на PD-классике из претрейна — до вебновелл-среза пороги считаются предварительными.
|
||
|
||
## Фаза 0 — Каркас. ✅ ЗАВЕРШЕНА (04.07, приёмка на живых ключах)
|
||
|
||
Порт ядра vojo (llm/ledger/obs/store), SQLite + идемпотентные миграции, durable jobs + чанк-чекпоинты, translation brief + brief_hash, YAML-конфиги C1/C2 (граница «конфиг vs код» Р2). Приёмка выполнена исполняемо: `tmctl translate` гоняет чанк draft→edit с полным учётом $, повторный запуск из чекпоинтов за $0, kill -9 теряет максимум один вызов, `committed == SUM(checkpoints)`. Anthropic-адаптер остался DEPRECATED-референсом (Р1) — не «к написанию».
|
||
|
||
## Фаза 1 — Перевод целой книги (текущая; машинерия в основном построена)
|
||
|
||
**Построено** (журнал: PROGRESS, вехи 1–2.5, шаги 3a–4): capability-слой (D3.1) + эхо-мина-гейт DeepSeek; runner-цикл по главам/чанкам + disposition skip/flag/continue (D2, 12 flag_reasons); coverage-гейт (порт Python-оракула, opt-in, precision 0/57 — exp07); single-hop эскалация с ре-гейтом и бюджетом (D12); чанкер v4 + импорт txt/epub + ruby-захват (D9); **банк памяти v2** (нормализация, Aho-Corasick, спойлер-окна, трёхсторонний disposition, decl-aware post-check-флаггер, ruby-сид); монолингвальный редактор с dst-констрейнтами глоссария (D1); snapshotID покрывает память/context-assembly/capability (F1/D5.2/D8).
|
||
|
||
**Осталось до приёмки Фазы 1:**
|
||
- Фиксы границ доверия памяти (D16: полисемия, sticky-disposition, source-граница фонетики, ruby-alias) + лгущие комментарии resume + бамп edit `prompt_version` (D15.3).
|
||
- `tmctl status` (read-only проекция + book manifest) и redrive флагнутых чанков (D12/D15.3).
|
||
- Дешёвые детерминированные гейты из 04-unhappy §6/§9: линтер тире-диалогов, ёфикатор, блок-лист транслит-междометий, число-гейт 万/億 (в D-логе «missed»-скоуп Фазы 1 — в план внесены v3).
|
||
- Автопопуляция глоссария G1 (спот=локаль 8b / рендер=облако — дизайн из exp06) — минимум в объёме, достаточном для приёмочной книги; иначе сид руками + **чек-лист ja-книги: kana-написания сид-имён вносить aliases руками (D16.4)**.
|
||
- Реальный **ja→ru прогон end-to-end** (приёмочная книга D9, ~150k токенов) с резюмируемостью.
|
||
- Режим онгоинга (`add-chapters`) — **сдвинут в Фазу 1.5**: гейтится resume-экономикой (D15.2 — content-addressed reuse чекпоинтов или селективный redrive; спека в Фазе 1, реализация Ф1.5). До этого онгоинг не продаётся.
|
||
- Экспорт txt/epub + отчёт (стоимость по стадиям, паспорт качества главы, журнал вклада, флаги).
|
||
|
||
**Интерим-правило 18+ (v3, до NSFW-роутера Фазы 2):** приёмочный корпус — только SFW. При `18+: да` в brief: канал B в интеримном составе **Grok 4.3 + локальная abliterated** (DeepSeek для explicit ЗАПРЕЩЁН его ToS — D14.1; Mistral — кандидат после пробы, D14.2); OpenAI/Gemini в explicit-роутинг не включать; refusal-blacklist-гейт перед коммитом в TM обязателен (ветка `content_filter` эмпирически мертва — exp07).
|
||
|
||
**Приёмка Фазы 1 (v3, по D11/D10/D1.1):**
|
||
1. SFW-том ранобэ ja→ru (~150k токенов) end-to-end за один запуск с резюмируемостью; kill -9 → потеря максимум одного вызова.
|
||
2. **Деньги:** телеметрия точна (ledger корректно биллит grok reasoning=0 / cache-поля), эскалация уважает конфигурируемый `budget_usd`; мягкий sanity-якорь **~$0.7/ранобэ, ~$11/вебновелла-500** (exp08). Жёсткие пороги $0.6/$5 **сняты** (D11).
|
||
3. Глоссарная консистентность **всех approved-терминов** ≥98% по процедуре Р7/D10 (names-only — под-метрика). ⚠ Гейт меряет самосогласованность, НЕ конформность Палладию/Поливанову (B6 — Фаза 2; ruby-reading уже даёт ground-truth для ja — валидатор желателен раньше, см. 07-ревью).
|
||
4. Coverage-гейт ловит ≥90% искусственных пропусков на мини-наборе; ноль молчаливых потерь глав (spine-reconciliation).
|
||
5. **Честная оговорка (D1.1): приёмка Фазы 1 НЕ содержит критерия верности** — same-length mistranslation до билингвального судьи Фазы 2 не контролирует ничто. Не маскировать coverage-гейтом.
|
||
|
||
## Фаза 2 — Качество: судья, NSFW, гейты второй очереди
|
||
|
||
⚠ v3: фаза перегружена (~25 механизмов из 04-unhappy + net-new) — при старте пересмотреть горизонт и порезать на вехи; ниже состав по приоритету.
|
||
|
||
- **Judge-роль** (билингвальный, судья-анкета узких вопросов с MQM-весами — паттерн LiTransProQA/DITING, НЕ холистический скор; словарь тегов ошибок в request_log с первого дня фазы), C2/C3 как конфиги (C2 — только гетерогенные кандидаты, D13.2); second-opinion судья чужого семейства на Gemini-эскалированных чанках (self-preference).
|
||
- **Пре-пасс Annotator** (04-unhappy «Следствия» п.1: speaker-ID, регистровый трекер, чэнъюй-маски — питает 8+ режимов отказа; в v2-плане отсутствовал — внесён).
|
||
- NSFW-роутер: локальный классификатор 0–3 (**требует спеки и метрики приёмки** — false-negative уровня 3 = юридическая экспозиция; сейчас классификатор не специфицирован — 07-ревью), каналы A/B (состав D14), channel-aware эскалация типом, детектор молчаливых вырезаний, refusal-мониторинг.
|
||
- Интеграция llama-server (скрининг, abliterated канала B, эмбеддинги bge-m3 — второй эшелон, low-trust A7).
|
||
- Python-сайдкар качества: CometKiwi (валидировать на ru-литературе до доверия) + **морфо-гейт рода** (жалоба №1 читателей; pymorphy, вкл. глагол прош. вр. — C3 реестра) + гейт ты/вы по series-bible-lite + канцелярит-чеклист Галь; кандидат: T-index как офлайн-метрика translationese (готовое решение, 0.5B — влезает в стенд).
|
||
- **B6: валидатор Палладия/Поливанова** на коммите dst-имён (ruby-reading как ground-truth для ja) — желательно ДО ja-приёмки, обязательно до масштабирования.
|
||
- Резюме глава→арка→книга + гейт фактичности резюме (D1 реестра — у резюме нет post-check-аналога); series-bible ты/вы-журнал.
|
||
- Batch API (−50% только Gemini-судье/QA — exp08), нативный Gemini-адаптер (safety-контроль судьи, rf-замер), стриминг keep-alive.
|
||
- Eval-харнесс (golden-set реплей, свип порогов); регрессионный сьют из чек-листа «особо опасных ошибок» (12-common-failures §16: отрицание, перепутанный субъект, внутренняя речь→прямая).
|
||
|
||
Приёмка: 18+ книга проходит пайплайн без молчаливых потерь (детектор + refusal-бенчмарк на explicit-корпусе); гейт рода/ты-вы работает; C2/C3 запускаются конфигом; классификатор 0–3 имеет измеренную точность на уровне 3.
|
||
|
||
## Фаза 2.5 — Пилот 4 рук (решающая точка)
|
||
|
||
Протокол: `experiments/09-pilot-protocol.md` **+ обязательные поправки D13** (арм «моно vs билингв редактор same-model»; C2 на гетерогенных кандидатах; панель 2–3 семейства × 11+ повторов со свапом позиций, Bradley-Terry/медиана, grok не судит grok-выходы; пре-регистрация MDE и N≥3; харнесс чинится до прогона — эхо-стрип memory_eval, полные выходы, fidelity-ось; имена M0–M3 для memory-режимов). Решения пилота: ядро C0–C3, go/no-go ставки памяти (банк vs длинный контекст + adversarial-рука), валидность LLM-судьи (κ vs IAA, s*), think-ON/OFF (вкл. grok после reasoning-буфера в EstimateUSD), D1 моно-vs-билингв, Annotator A/B, flag-rate G2 (первый замер человеческой ёмкости). 2–3 главы 18+ в корпусе — замер отказов по ролям (вкл. пробу Mistral, D14.2).
|
||
Побочная ценность: человеческие BWS-данные zh/ja→ru — уникальный актив (академия пары не покрывает, WMT-лит. трек мёртв с 2024).
|
||
|
||
## Фаза 3 — Продуктовизация (после MVP)
|
||
|
||
HTTP API + SSE для IDE-фронта; выравнивание Bertalign (параллельное чтение, полноценный импорт reference-переводов прошлых томов); TMX/TBX; биллинг **Stripe/Paddle (EU-SaaS, $/€; BYOK/ЮKassa отменены — Р5/Р8)**; batch-планировщик внепиковых окон DeepSeek; кандидаты из Р2: консультант поп-культуры, tool-calling, webfetch культурного контекста; «судья-над-судьёй» — редкий фронтир-аудит отчёта книги (идея владельца V3.3, ратифицирована как кандидат).
|
||
|
||
## Вне скоупа MVP
|
||
|
||
IDE-фронтенд (закладываем только API), B2B white-label, дистилляция своей 7–14B модели (логируем long-CoT синтетику — рецепт DRT/LitMT; в 2026 линия дозрела до «14B ≈ Sonnet на литпереводе» — стратегический бэклог снижения editor-затрат), ru→en направление, автоматическая публикация куда-либо (Р8). **Переписывание бэкенда на другой язык — закрыто до пост-пилота** (решение владельца 09.07; нужен конкретный триггер, где Go упирается).
|
||
|
||
## Метрики успеха MVP (v3)
|
||
|
||
1. COGS: телеметрия денег точна; эскалация уважает `budget_usd`; sanity-якоря ~$0.7/ранобэ стандарт, ~$11/вебновелла-500, селективный премиум ≤$25 (exp08; жёсткие $-гейты сняты D11).
|
||
2. Глоссарная консистентность approved-терминов ≥98% (процедура Р7/D10); ноль молчаливых потерь (coverage + spine-reconciliation).
|
||
3. Качество: **статистически значимый win rate >50%** (биномиальный тест, α=0.05, ≥150 человеческих попарных сравнений, пре-регистрация MDE — D13.4) против baseline «DeepSeek+селективный глоссарий» (уровень VseGPT).
|
||
4. Резюмируемость: kill -9 в середине главы → продолжение с потерей максимум одного LLM-вызова.
|
||
5. 18+: канал B (Grok + abliterated, интерим D14) переводит explicit-корпус без молчаливых вырезаний, подтверждено детектором.
|