Ratify post-review decisions D13-D17 and sync MVP plan, PlantUML diagrams, journal, and superseded banners with the strategic review

This commit is contained in:
Claude (backend session) 2026-07-09 16:16:11 +03:00
parent f14eff45dc
commit b01218bdca
14 changed files with 297 additions and 184 deletions

View file

@ -1,9 +1,10 @@
# Журнал прогресса
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (обновляемый блок; на 2026-07-05). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1D12); этот файл — ЖУРНАЛ, не спека.**
> - **Фаза:** 0 (каркас) завершена; машинерия Фазы 1 в основном построена — банк памяти v2, чанкер + txt/epub импорт, disposition/coverage-гейт/эскалация, durable resume, глоссарий→редактор. Следующее: реальный ja→ru прогон end-to-end + пилот Ф2.5.
> - **Стек (2026-07-05):** черновик DeepSeek V4 Flash · редактор **grok-4.3** (thinking-OFF через ЯВНЫЙ `reasoning_effort:none` — дефолт grok = `low`) · судья/апекс Gemini 3.1 Pro (mandatory thinking) · эскалация A: DeepSeek V4 Pro → GLM-5.1 → Gemini · канал B (18+): Grok. **Anthropic выброшен (за дороговизну), OpenAI оставлен.** 6 ключей.
> - **Экономика:** `experiments/08-cost-model-v2.md` (~$0.69 ранобэ / ~$10.94 вебновелла-500) — заменяет старые пороги $0.6 / $5 / $30.
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (обновляемый блок; на 2026-07-09). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1D17); этот файл — ЖУРНАЛ, не спека.**
> - **Фаза:** 0 (каркас) завершена; машинерия Фазы 1 в основном построена — банк памяти v2, чанкер + txt/epub импорт, disposition/coverage-гейт/эскалация, durable resume, глоссарий→редактор. **Проведено стратегическое ревью (`architecture/07-strategic-review.md`, 09.07): архитектура end-to-end цела; ратифицирован пакет пост-ревью решений D13D17.** Следующее: пакет фиксов D15/D16 (бэкенд) + починка пилот-харнесса D13 (полигон) → реальный ja→ru прогон end-to-end → пилот Ф2.5.
> - **Стек (2026-07-05, подтверждён ревью):** черновик DeepSeek V4 Flash · редактор **grok-4.3** (thinking-OFF через ЯВНЫЙ `reasoning_effort:none` — дефолт grok = `low`; D1-монолингв оспорен внешним замером — решает пилот-арм D13.1/D17) · судья/апекс Gemini 3.1 Pro (mandatory thinking) · эскалация A: DeepSeek V4 Pro → GLM-5.1 → Gemini · канал B (18+): Grok + локальная abliterated (**DeepSeek для explicit ЗАПРЕЩЁН его ToS — D14.1; Mistral — кандидат-фолбэк после пробы, D14.2**). Anthropic выброшен, OpenAI оставлен. 6 ключей.
> - **Экономика:** `experiments/08-cost-model-v2.md` (~$0.69 ранобэ / ~$10.94 вебновелла-500) — заменяет старые пороги $0.6 / $5 / $30. ⚠ Resume: любой `--resnapshot` = переоплата книги — онгоинг гейтится D15.2.
> - **Ждём от владельца:** 35 глав реальных вебновелл (вся текущая эмпирика — классика из претрейна) + explicit-фрагменты для 18+ руки (единственный critical ревью) + провенанс двух внешних 12-*-доков.
> - Записи ниже — хронология; РАННИЕ (день-0, 04.07) содержат устаревшие цифры/решения (COGS $24, BYOK, Anthropic-Sonnet), переопределённые позже — см. блок выше и 05-decisions-log.
## 2026-07-04 — Старт проекта (MVP-сессия)
@ -47,7 +48,7 @@
- в план добавлены режим онгоинга и series-bible-lite (сегмент «ИИ-фабрик» и проверка рода/ты-вы).
### Следующие шаги
- [~] Фаза 0 (каркас) ЗАВЕРШЕНА; машинерия Фазы 1 в основном построена — сессия «Бэкенд» (промт: `prompts/done/BACKEND_SESSION_PROMPT.md`; шаг 0 — перевалидация решений, финал фаз — агентное селфревью). Осталось: полный стек-wiring, автопопуляция глоссария, реальный ja→ru прогон. Оркестратор делает внешнее ревью её кода.
- [~] Фаза 0 (каркас) ЗАВЕРШЕНА; машинерия Фазы 1 в основном построена — сессия «Бэкенд» (промт: `archive/prompts/BACKEND_SESSION_PROMPT.md`; шаг 0 — перевалидация решений, финал фаз — агентное селфревью). Осталось: полный стек-wiring, автопопуляция глоссария, реальный ja→ru прогон. Оркестратор делает внешнее ревью её кода.
- [x] Параллельная сессия «Полигон» запущена (эксперименты 0103 идут).
- [ ] Сессия «Редакция» (промпты ролей) — после фиксации формата конфига в Фазе 0.
- [x] Сессия «Валидация банка памяти» — завершена (вердикт GO на схему+гейты; реестр `architecture/06`; ставка гейтится in-house eval'ом в пилоте Ф2.5).
@ -55,6 +56,14 @@
- Роли сессий: «Бэкенд» → `backend/`; «Полигон» → `eval/` + `docs/experiments/`; оркестратор → доки, ревью, синхронизация, дозаправки ресёрча.
- [x] **Дозаправка ресёрча выполнена (04.07, оркестратор)**: 5 документов `research/12-*.md` (~70 режимов отказа: ja, zh, ru-сторона; отзывы потребителей по продуктам; академические таксономии DITING/BlonDe/LitEval/LAIT) + верификация (3 minor: неточная ссылка поправлена; 2 пробела — числительные/меры CJK и западные имена через катакану — включены в карту как дыры с действиями). Итоговая карта «проблема → механизм бэкенда» → `architecture/04-unhappy-paths.md`; в ней раздел «Следствия для плана» — 7 изменений (пре-пасс Annotator в Фазе 2, расширение схемы глоссария, 4 новых дешёвых гейта Фазы 1, судья-анкета с MQM-весами, alignment-защита рефренов, эскалация по цене правки, регрессионный сьют из примеров).
## 2026-07-09 — Стратегическое ревью + консолидация доков (оркестратор)
- **Стратегическое ревью выполнено** → [`architecture/07-strategic-review.md`](architecture/07-strategic-review.md) (коммит b1d54b6). Метод: 14 сборщиков (8 репо-аудиторов + 6 SOTA-веб) → 9 адверсариальных верификаторов (8 CONFIRMED / 1 PARTIAL; 6 находок воспроизведены исполнением временных Go-тестов). Вердикт: **архитектура end-to-end цела**, наука-2026 подтверждает C1-схему/чанки+гейты/терминологию/DeepSeek-draft; детерминированному пути памяти аналогов не найдено. Топ-находки: D1-моноредактор получил внешне измеренный налог верности (2605.13368, вкл. en→ru); `--resnapshot` = переоплата книги (блокер онгоинга); 4 дыры границ доверия памяти (одна — ложно отсеяна 44-агенткой 0/3); слепота exp04 структурно сломана (ключ в артефакте при оценке); memory_eval контаминирован эхом глоссария; 18+ — ноль замеров (critical); DeepSeek выбыл из explicit-канала B по ToS 27.03.2026.
- **Роль оркестратора передана этой сессии (решение владельца 09.07).** Владелец подтвердил курс: Rust-переписывание — НЕТ до пост-пилота (Р1/Go остаётся); архив + онбординг-доки — одобрены.
- **Ратифицированы D13D17** ([05-decisions-log](architecture/05-decisions-log.md)): D13 поправки пилота (арм моно-vs-билингв, гетерогенные кандидаты C2, панель 23 семейства × 11+ повторов, починка харнесса ДО прогона); D14 канал B (минус DeepSeek-explicit, плюс проба Mistral, xAI-опора = AUP); D15 resume/онгоинг (комментарии-фиксы + status/redrive сейчас, content-addressed reuse — гейт онгоинга); D16 фиксы границ памяти; D17 D1 понижен до «дефолт Ф1, оспорен — решает пилот».
- **Консолидация доков:** `02-mvp-plan` → v3 (мёртвые пороги сняты, интерим-18+ переписан, фазы синхронизированы); обе `*.puml` → v3 (минус Opus/BYOK/«≤2×», плюс ре-гейт эскалации, три класса отказов D12, человек в петле, фазовые пометки); superseded-баннеры на `research/01/02/03/04/09`; провенанс-шапки на два внешних `12-*`-дока; закрытые промты → `docs/archive/prompts/`; онбординг: корневой `CLAUDE.md` + `backend/README.md` + `eval/README.md` + обновлённый `docs/README.md`.
- **Следующее (оркестратор):** хендофф-промты сессиям «Бэкенд» (пакет D15.3/D16 + выборочная перепроверка отсевов) и «Полигон» (харнесс D13.5 + проба Mistral + kana-precision) — по запросу владельца.
## Бэкенд
### 2026-07-04 — Сессия 1: шаг 0 (перевалидация) завершён
@ -235,7 +244,7 @@ keep-alive (Ф12), инъекция глоссария (`selective`), пор
> 4. ⚠ **DeepSeek-черновик «эхал» оригинал** на высоко-CJK фрагменте (эксп.04, 3/3) — тихий отказ = оригинал вместо перевода. CJK-гейт Фазы 1 обязан это ловить (уже в плане); плюс фолбэк-черновик как у полигона.
> **Ещё две вводные бэкенду (04.07):**
> 5. **Схему памяти v2 (твой шаг 4) держи до реестра рисков от сессии «Валидация банка памяти».** Владелец выделил банк памяти (главная точка отказа пайплайна) в отдельную адверсариальную сессию (промт `docs/MEMORY_RESEARCH_SESSION_PROMPT.md`, финализирован); её выход — `architecture/06-memory-risk-registry.md` — вход, по которому ты фиксируешь схему store/глоссария. Шаги 13 (runner-loop / snapshotID / чанкер) от схемы памяти не зависят — иди по ним, шаг 4 гейтит валидация. snapshotID под память (D5.2) проектируй с запасом, но финальную схему полей не морозь.
> 5. **Схему памяти v2 (твой шаг 4) держи до реестра рисков от сессии «Валидация банка памяти».** Владелец выделил банк памяти (главная точка отказа пайплайна) в отдельную адверсариальную сессию (промт `docs/archive/prompts/MEMORY_RESEARCH_SESSION_PROMPT.md`, финализирован); её выход — `architecture/06-memory-risk-registry.md` — вход, по которому ты фиксируешь схему store/глоссария. Шаги 13 (runner-loop / snapshotID / чанкер) от схемы памяти не зависят — иди по ним, шаг 4 гейтит валидация. snapshotID под память (D5.2) проектируй с запасом, но финальную схему полей не морозь.
> 6. **Коррекция контура (владелец): EU-SaaS, прямые ключи, BYOK отменён** — в коде это НИЧЕГО не меняет (бэкенд всегда был на прямых ключах; BYOK был продуктовым концептом Р8/Р9, не кодом). Обновлены только Р5/Р8/Р9/Р10 в `01-decisions.md`. Дефолт редактора Фазы 1 — `grok-4.3` (эксп.04) — в `pipeline-c1.yaml` edit-стадию на него (xAI, thinking OFF, capability: temperature шлётся).
> **Ответ оркестратора на 4 вопроса Фазы 1 (04.07) → полностью в [05-decisions-log.md D8D11](architecture/05-decisions-log.md).** Онбординг-поправки ратифицированы (grok-editor не Kimi; deepseek-v4-pro резолвить через /models, не хардкодить; gemini `-preview` несущий; models.yaml обновляешь сам; F4 в A, F3 явно). A/B/C-план принят. Ответы:
@ -300,7 +309,7 @@ keep-alive (Ф12), инъекция глоссария (`selective`), пор
- **Q2 (эхо — ретрай/эскалация или флаг?):** согласен — эхо должно ЭСКАЛИРОВАТЬ, не просто флажок. `cjk_artifact` ДЕТЕРМИНИРОВАН (та же модель → то же эхо) → same-model retry бессмыслен (переэхнёт, переплатит) → в classify он **non-retryable именно поэтому**. При заводке эскалации (шаг 7) `cjk_artifact` уходит на ФОЛБЭК-ЧЕРНОВИК (другая модель) — это и есть «эскалация, не флаг» (интент записан в Вехе 2). Сейчас флаг — цикла эскалации ещё нет.
- **Q3 (live-conformance):** ДА, и Python-оракул Полигона = приёмочный ГЕЙТ перед фиксацией адаптеров. Мои Go-тесты — httptest wire-контракты (быстрые, детерминированные, CI без ключей) — живые эхо/`reasoning_content`/алиасы/503 не воспроизводят by design. Разделение: **Python-оракул (зона Полигона)** = кросс-провайдерный live-гейт «каждый адаптер бьёт живого, получает валидный перевод без эха/пусто/обрезки»; **Go live-интеграционные тесты (зона бэкенда, build-tag `live`/env-gated, вне CI)** = per-adapter wire+parse на живых ключах. Оба; оракул — гейт.
Фикс (эскалация `cjk_artifact`→фолбэк-черновик + coverage-гейт вырезания + live-conformance) — **отдельная сессия**, онбординг-промт: [BACKEND_SESSION_PROMPT_SILENT_REFUSALS.md](prompts/done/BACKEND_SESSION_PROMPT_SILENT_REFUSALS.md). Не блокирует шаг 3.
Фикс (эскалация `cjk_artifact`→фолбэк-черновик + coverage-гейт вырезания + live-conformance) — **отдельная сессия**, онбординг-промт: [BACKEND_SESSION_PROMPT_SILENT_REFUSALS.md](archive/prompts/BACKEND_SESSION_PROMPT_SILENT_REFUSALS.md). Не блокирует шаг 3.
### 2026-07-04 — Сессия 5: Веха 2.5 (старт) — DeepSeek эхо-мина зафиксирована регресс-гейтом
@ -557,7 +566,7 @@ keep-alive (Ф12), инъекция глоссария (`selective`), пор
- [x] Эталон DeepSeek + llama.cpp 30b-a3b (13.5 tok/s) — в 03.
- [~] **explicit-часть refusal-бенчмарка** — владелец даёт фрагмент реальной вебновеллы («Мастер Гу», жёсткая сцена) → полигон заведёт в корпус и прогонит через провайдеров (кто откажет/вырежет/переведёт). Проверка ставки «Grok = NSFW-канал».
- [x] ~~Проверка ru-агрегаторов~~**СНЯТА** (BYOK отменён владельцем, см. коррекцию выше).
- [—] **Банк памяти (задача 5 + шире)** — по решению владельца выносится в **отдельную сессию «Валидация банка памяти»** (главная точка отказа пайплайна; не бросаться в код без разбора опасных сценариев). Полигон подготовил черновик промта → `docs/MEMORY_RESEARCH_SESSION_PROMPT.md`; **оркестратору вычитать/финализировать**, затем владелец запускает. Замер эмбеддингов (bge-m3 vs Qwen3-Embedding vs LaBSE) — часть мандата той сессии.
- [—] **Банк памяти (задача 5 + шире)** — по решению владельца выносится в **отдельную сессию «Валидация банка памяти»** (главная точка отказа пайплайна; не бросаться в код без разбора опасных сценариев). Полигон подготовил черновик промта → `docs/archive/prompts/MEMORY_RESEARCH_SESSION_PROMPT.md`; **оркестратору вычитать/финализировать**, затем владелец запускает. Замер эмбеддингов (bge-m3 vs Qwen3-Embedding vs LaBSE) — часть мандата той сессии.
- [ ] Довалидация токен-калибровки на 35 главах реальных вебновелл (файлы владельца).
- [~] Задача 4 (пилот выбора ядра, Фаза 2.5): протокол BWS + панель LLM-судей — **протокол готов** ([experiments/09](experiments/09-pilot-protocol.md)) + харнесс `eval/pilot/`; решающий прогон ждёт корпус владельца (см. Сессия 3).
- [x] **Валидация precision coverage-гейта — гейтит боевой флип** (D12 Q4) → [experiments/07](experiments/07-coverage-precision.md): 0 FP/57, флип по precision безопасен, порог ≥2 флага/главу; вебновелл-срез ждёт корпус владельца (см. Сессия 3). Бэкенд-мини-набор (выпиленные предложения) проверяет recall (≥90%); флип `gates.coverage.enabled:true` упирается в **false-positive rate** на легитимно диалого-плотных главах (сегментация наивная, quote-absorbing §3.7 в v1.1 — на диалогах `sent_cov` может ложно проседать). Прогони гейт (пороги эксп.02: zh-ru<2.2/ja-ru<1.4/en-ru<0.70, sent_cov<0.75) на реальных чанках zh/jaru, замерь долю ложных excision_suspect. Оракул = `eval/refusal_bench.py::classify_output` (тот же, что порт в Go держать в синхроне). Выход: доля ложных флагов по типам глав оркестратор/владелец ставит порог N допустимых флагов и решает флип.
@ -649,7 +658,7 @@ keep-alive (Ф12), инъекция глоссария (`selective`), пор
> **[ДОБАВЛЕНО после закрытия] Локалка × банк памяти — экстракция терминов, ВЕРИФИЦИРОВАННЫЙ бенчмарк (дыра G1)** → [experiments/06-local-extraction.md](experiments/06-local-extraction.md), `eval/extract_bench.py`. 13 моделей × 12 кейсов (zh/ja/en + эдж: катакана-запад, буддийские имена, алиасы), запросы через `refusal_bench.call_provider`+`providers.json` (квирки верны: deepseek thinking-ON+max_tokens 8000 — прошлый пустой был МОЯ ошибка бюджета, не свойство модели), **каждый ответ health-верифицирован** (пустой/echo не засчитан как recall 0). Итог: **(1) СПОТ сущностей решён у всех, локаль вкл.** (recall ~0.98 на всех языках, 0 галлюцинаций). **(2) РЕНДЕР dst — разрыв с ЯЗЫКОВЫМ градиентом у локали:** en 0.82 / ja 0.53 / **zh 0.26** (阿Q→«Ах-Чу», 赵太爷→«Тяо Тай-Я» — Палладий-мусор → **эмпирика для B6**); облако-топ zh 0.75/ja 0.98/en 1.0. **(3) бо́льшая локаль не помогает** (30b render 0.55≈8b, ×3 медленнее). **(4) deepseek thinking помогает рендеру** (0.85 vs 0.58 off; на экстракции thinking-off здоров — echo бьёт перевод, не JSON). Рендер-value: **gemini-2.5-flash** (0.92/1.4с). **Дизайн-следствие (уточняет Р4/G1):** спот=дешёвая 8b (все языки); рендер dst язык-зависим — zh обязательно облако/человек + таблица Палладия (B6), en локаль потянет. ruadapt ненадёжен (5/12 health).
> **[В ОЧЕРЕДИ, 05.07] Исследование «Адаптивный/обучающийся слой памяти»** — промт `docs/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md` (подготовлен сессией валидации по запросу владельца). Вопрос: стоит ли гибрид «детерминированный банк + слой, обучающийся по ходу книги», и как смёржить под контур (локаль-first, дешёвое API ок, флагман без логитов → kNN-MT/frontier-LoRA заблокированы; обучаемое — только на локали, роль support, не переводчик). Центр — арбитраж «кто побеждает» (логика + VRAM 8ГБ). БАР: обязан бить eval-валидированный детерминированный базис на zh/ja→ru, иначе не мёржить. Тайминг: Фаза 2+, целить в реальные дыры (после in-house eval банка). Запускает владелец отдельной сессией.
> **[В ОЧЕРЕДИ, 05.07] Исследование «Адаптивный/обучающийся слой памяти»** — промт `docs/archive/prompts/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md` (подготовлен сессией валидации по запросу владельца). Вопрос: стоит ли гибрид «детерминированный банк + слой, обучающийся по ходу книги», и как смёржить под контур (локаль-first, дешёвое API ок, флагман без логитов → kNN-MT/frontier-LoRA заблокированы; обучаемое — только на локали, роль support, не переводчик). Центр — арбитраж «кто побеждает» (логика + VRAM 8ГБ). БАР: обязан бить eval-валидированный детерминированный базис на zh/ja→ru, иначе не мёржить. Тайминг: Фаза 2+, целить в реальные дыры (после in-house eval банка). Запускает владелец отдельной сессией.
### 2026-07-05 — Сессия «Адаптивный слой памяти» ЗАВЕРШЕНА → [research/14-adaptive-memory.md](research/14-adaptive-memory.md)

View file

@ -1,63 +1,72 @@
# План MVP (v2, 2026-07-04)
# План MVP (v3, 2026-07-09)
Цель MVP (бриф, п. 24): **бэкенд переводит целую книгу целиком** — консистентно, дёшево, с учётом стоимости. Интерфейс — CLI; HTTP API закладываем как тонкий слой (Фаза 3), IDE-фронт — после бэкенда. v2 — после адверсариального ревью: фазы перебалансированы, приёмка сделана проверяемой, добавлены интерим-правила для 18+ и спецификации, блокировавшие старт кодинга. Реалистичный горизонт — **1011 недель** (было «8», критики показали, что пилот не влезал).
Цель MVP (бриф, п. 24): **бэкенд переводит целую книгу целиком** — консистентно, дёшево, с учётом стоимости. Интерфейс — CLI; HTTP API закладываем как тонкий слой (Фаза 3), IDE-фронт — после бэкенда.
v2 (04.07) — после адверсариального ревью синтеза. **v3 (09.07) — синхронизация с контрактом [`05-decisions-log.md`](05-decisions-log.md) (D1D17) после стратегического ревью [`07-strategic-review.md`](07-strategic-review.md)**: сняты мёртвые приёмочные пороги, переписан интерим-18+, фазовые списки приведены к фактам. При конфликте этого плана с D-логом — **источник истины D-лог**.
## Дорожка данных (параллельно всем фазам, владелец + сессия «Полигон»)
Закупка/подбор лицензионных изданий для золотого набора, выравнивание, глоссарии, отбор 2535 глав пилота, refusal-корпус 50100 фрагментов, замеры токенизации. Стартует с недели 1 — к пилоту (Фаза 2.5) данные должны быть готовы.
Лицензионные издания для золотого набора, выравнивание, глоссарии, отбор 2535 глав пилота, refusal-корпус (вкл. explicit-фрагменты — гейтят 18+ руку), замеры токенизации.
**Чекпоинт (новый, гейтит валидность эмпирики): 35 глав реальных вебновелл zh/ja вне претрейна** — довалидация r-коэффициентов (exp01/08), precision гейтов на терсных репликах (exp07), частота эха вне классики. Вся текущая эмпирика снята на PD-классике из претрейна — до вебновелл-среза пороги считаются предварительными.
## Фаза 0 — Каркас (нед. 12)
## Фаза 0 — Каркас. ✅ ЗАВЕРШЕНА (04.07, приёмка на живых ключах)
Монорепо Go (`backend/`). Портирование ядра из `vojo/apps/ai-bot`:
Порт ядра 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) — не «к написанию».
- `pkg/llm`: интерфейс LLMClient, OpenAI-совместимый транспорт (retry/backoff), адаптеры DeepSeek/Qwen/GLM/xAI/Gemini/llama-server; **новое**: нативный Anthropic-адаптер (`cache_control`), поддержка prompt caching в структуре запроса. ~~Batch API~~ → Фаза 2. Стриминг: в Фазе 0 — длинные per-роль таймауты (чанки на локальной модели идут 63278 с); **транспортный стриминг как keep-alive** (агрегация на бэкенде, без SSE-фронта) — Фаза 12 по предложению бэкенд-сессии; SSE для IDE — Фаза 3.
- `pkg/ledger`: цены в конфиге (с датой проверки), биллинг по usage (+reasoning-токены), reserve/settle, потолки $ на книгу/день.
- `pkg/obs`: trace_id, структурные логи, request_log (per-книга/глава/чанк/стадия/роль/модель, $, latency, cache-hit, вердикты гейтов).
- `pkg/store`: SQLite (modernc.org/sqlite, без нативных расширений) + идемпотентные миграции; durable jobs (глава×стадия) + **чанк-чекпоинты** (Р6: каждый сырой ответ LLM персистится после settle; snapshot контекста на джобу; kill -9-тест — часть приёмки).
- Конфиг проекта книги = **translation brief** (языковая пара, жанр, аудитория, 18+ да/нет, слайдер Venuti, хонорифики, транскрипция, сноски); `brief_hash` входит в ключ TM.
- **Приложение к фазе: YAML-конфиг ядра C1 (+скелет C2)** — фиксирует границу «конфиг vs раннер» (Р2) до начала Фазы 1.
- Эмпирическая проверка cache-поведения: DeepSeek direct + топ-2 ru-агрегатора (пробрасывают ли cache-hit тарифы) — вход для экономики Р5.
## Фаза 1 — Перевод целой книги (текущая; машинерия в основном построена)
Приёмка: `tmctl translate --config book.yaml` гоняет один чанк draft→edit с полным учётом $ в request_log; kill -9 теряет максимум один вызов.
**Построено** (журнал: PROGRESS, вехи 12.5, шаги 3a4): 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 — Перевод целой книги (нед. 35)
**Осталось до приёмки Фазы 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 + отчёт (стоимость по стадиям, паспорт качества главы, журнал вклада, флаги).
- Импорт/чанкинг по спеке: txt/epub; **epub v1 = извлечение текста глав по spine, экспорт простым xhtml** (инлайн-разметка/ruby-фуригана не сохраняются — честное ограничение v1); чанк 12k токенов по границам абзацев; перекрытие — **read-only контекст** (повторно не переводится, дедупликации при склейке нет по построению).
- **Банк памяти v1** (SQLite на книгу): глоссарий (схема Р3, авто-`decl` при коммите) с автоэкстракцией кандидатов; **series-bible-lite (gender + матрица ты/вы)**; резюме глава→арка→книга; STM; TM-кэш; селективная инъекция (ключи/алиасы/леммы, без эмбеддингов). Батч-подтверждение терминов раз в главу; в безлюдном режиме auto→approved с журналом.
- Пайплайн C1: Analyst (map-reduce по книге) → Terminologist → per-глава/per-чанк: сборка контекста (кэшируемый префикс по Р5) → Translator (DeepSeek V4 Flash) → Editor → гейты → эскалация в пределах премиум-бюджета → коммит чанка; на границе главы — обновление резюме, подтверждение терминов, телеметрия главы.
- QA-гейты Фазы 1 (Go, без морфологии): CJK-артефакты, глоссарная консистентность (процедура из Р7), **coverage-гейт v1** (регэксп-сегментация предложений, соотношение длин, blacklist refusal-паттернов; валидируется мини-набором 2030 фрагментов с выпиленными предложениями). В TM коммитится только вывод, прошедший гейты. «Флаг редактору» = секция в отчёте + ненулевой exit code (приёмка допускает N флагов).
- **Интерим-правило 18+ (до NSFW-роутера Фазы 2)**: приёмочный корпус — только SFW; при `18+: да` в brief — Anthropic принудительно исключается из роутинга книги, эскалация без Opus (GLM/Kimi/Gemini), включён regex-детектор отказов перед коммитом в TM. Редактор Фазы 1 по умолчанию — GLM-5/Kimi (Sonnet — только SFW-книги и прямые ключи).
- **Режим онгоинга** (Р9, сегмент «ИИ-фабрик»): `tmctl add-chapters` — дозагрузка новых глав в существующий проект с наследованием глоссария/резюме/series bible.
- Экспорт: txt/epub + отчёт (стоимость по стадиям, cache-hit по стадиям, метрики, журнал творческого вклада, флаги).
**Интерим-правило 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).
Приёмка: SFW-том ранобэ (~150k токенов) end-to-end за один запуск с резюмируемостью; COGS: стандарт на DeepSeek ≤ **$0.6**, премиум-микс ≤ **$5** (два порога вместо неопределённого «стандарт-микса»); глоссарная консистентность approved-имён ≥98% по процедуре Р7; coverage-гейт ловит ≥90% искусственных пропусков на валидационном мини-наборе. (Род/ты-вы — приёмка Фазы 2, когда появится гейт по series-bible-lite.)
**Приёмка Фазы 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, гейты второй очереди (нед. 68)
## Фаза 2 — Качество: судья, NSFW, гейты второй очереди
- Judge-роль (шкала Комиссарова, пара судей), режимы C2/C3 как конфиги; Batch API (OpenAI-стиль + Anthropic Message Batches) для батчуемых стадий (Analyst/Terminologist/судья/книжный QA).
- NSFW-роутер: локальный классификатор 03, каналы A/B, channel-aware эскалация, refusal-мониторинг с автопереносом, детектор молчаливых вырезаний; refusal-бенчмарк из дорожки данных.
- Интеграция llama-server (скрининг, abliterated-переводчик канала B, эмбеддинги bge-m3 — второй эшелон инъекции).
- Python-сайдкар качества: CometKiwi + морфодетектор канцелярита (pymorphy/Natasha, чек-лист Галь) + гейт ты/вы и рода по series-bible-lite; роли второй очереди: Line Editor, Continuity Editor, анти-translationese пасс.
- Eval-харнесс (паттерн routereval): golden-set реплей, свип порогов эскалации.
- Генерация аннотаций/обвязки главы для заливки (дешёвая фича, паттерн топов Rulate).
⚠ v3: фаза перегружена (~25 механизмов из 04-unhappy + net-new) — при старте пересмотреть горизонт и порезать на вехи; ниже состав по приоритету.
Приёмка: 18+ книга проходит пайплайн без молчаливых потерь (проверено детектором + refusal-бенчмарком); гейт рода/ты-вы работает на series-bible-lite; C2/C3 запускаются конфигом.
- **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-роутер: локальный классификатор 03 (**требует спеки и метрики приёмки** — 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: отрицание, перепутанный субъект, внутренняя речь→прямая).
## Фаза 2.5 — Пилот 4 рук (нед. 810, elapsed 23 недели)
Приёмка: 18+ книга проходит пайплайн без молчаливых потерь (детектор + refusal-бенчмарк на explicit-корпусе); гейт рода/ты-вы работает; C2/C3 запускаются конфигом; классификатор 03 имеет измеренную точность на уровне 3.
По протоколу Р2/gap-3: C0/C1/C2/C3 на 2535 главах zh/ja/en→ru (данные готовы из дорожки данных), человеческие попарные сравнения (внешние редакторы 2040 ч) + панель LLM-судей чужих семейств с человеческим переводом как якорем. Решение о ядре пайплайна; 23 главы 18+ в корпусе — замер отказов по ролям.
## Фаза 2.5 — Пилот 4 рук (решающая точка)
Протокол: `experiments/09-pilot-protocol.md` **+ обязательные поправки D13** (арм «моно vs билингв редактор same-model»; C2 на гетерогенных кандидатах; панель 23 семейства × 11+ повторов со свапом позиций, Bradley-Terry/медиана, grok не судит grok-выходы; пре-регистрация MDE и N≥3; харнесс чинится до прогона — эхо-стрип memory_eval, полные выходы, fidelity-ось; имена M0M3 для memory-режимов). Решения пилота: ядро C0C3, go/no-go ставки памяти (банк vs длинный контекст + adversarial-рука), валидность LLM-судьи (κ vs IAA, s*), think-ON/OFF (вкл. grok после reasoning-буфера в EstimateUSD), D1 моно-vs-билингв, Annotator A/B, flag-rate G2 (первый замер человеческой ёмкости). 23 главы 18+ в корпусе — замер отказов по ролям (вкл. пробу Mistral, D14.2).
Побочная ценность: человеческие BWS-данные zh/ja→ru — уникальный актив (академия пары не покрывает, WMT-лит. трек мёртв с 2024).
## Фаза 3 — Продуктовизация (после MVP)
HTTP API + SSE для IDE-фронта; выравнивание Bertalign (параллельное чтение, полноценный импорт reference-переводов прошлых томов; до этого — упрощённый импорт бэк-каталога парами глав); TMX/TBX; BYOK-пресеты агрегаторов; биллинг ЮKassa/СБП; batch-планировщик внепиковых окон DeepSeek; кандидаты из Р2: консультант поп-культуры, tool-calling, webfetch культурного контекста.
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, дистилляция своей 714B модели (логируем long-CoT синтетику с первого дня — рецепт DRT, но не обучаем), ru→en направление (следствие для выручки — см. Р9), автоматическая публикация куда-либо (Р8).
IDE-фронтенд (закладываем только API), B2B white-label, дистилляция своей 714B модели (логируем long-CoT синтетику — рецепт DRT/LitMT; в 2026 линия дозрела до «14B ≈ Sonnet на литпереводе» — стратегический бэклог снижения editor-затрат), ru→en направление, автоматическая публикация куда-либо (Р8). **Переписывание бэкенда на другой язык — закрыто до пост-пилота** (решение владельца 09.07; нужен конкретный триггер, где Go упирается).
## Метрики успеха MVP
## Метрики успеха MVP (v3)
1. COGS тома ранобэ: стандарт ≤ $0.6, премиум-микс ≤ $5 (контур прямых ключей; cache-hit — по стадиям, справочно).
2. Глоссарная консистентность approved-терминов ≥98% (процедура Р7); ноль молчаливых пропусков, подтверждено coverage-гейтом, отвалидированным на мини-наборе.
3. Качество: **статистически значимый win rate >50%** (биномиальный тест, α=0.05, ≥150 человеческих попарных сравнений) против **DeepSeek+селективный глоссарий** (честный baseline уровня VseGPT, не соломенный «сырой DeepSeek»); 70% — aspirational-цель, калибруется пилотом.
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-корпус без молчаливых вырезаний, подтверждено детектором.

View file

@ -1,4 +1,4 @@
# Журнал решений оркестратора — развязки перед Фазой 1 (2026-07-04)
# Журнал решений оркестратора — развязки перед Фазой 1 (2026-07-04) + пост-ревью D13D17 (2026-07-09)
Ответ на вопросы бэкенд-сессии (PROGRESS §«Вопросы от бэкенда», §«[НУЖНО РЕШЕНИЕ] перед Фазой 1») и полигона (think-режим). Каждое решение прошло адверсариальную панель из 3 критиков (research / экономика / исполнимость в коде Фазы 0); ни одно не отклонено, все уточнены. Это **контракт Фазы 1** — бэкенд исполняет отсюда; при конфликте с буквой 01-decisions/02-mvp-plan — источник истины здесь (потом сольём в основные доки).
@ -156,3 +156,51 @@ grok-4.3 теперь дефолт-редактор → **каждый чанк
- Пересчёт премиум-бюджета на Sonnet-free стеке с reasoning-as-output (D3.2), апекс Gemini 3.1 Pro (форсированный thinking).
- ~~Проброс cache-hit/batch RU-агрегаторами~~**СНЯТО** (коррекция владельца 04.07: EU-SaaS, прямые ключи, BYOK отменён; см. Р5). Вся cache/batch-экономика теперь по прямым ключам без оговорок — это канон.
- `budget_usd: 0` в `pipeline-c1.yaml` — заглушка; $-потолок владелец задаёт по ценовому намерению, дефолты $5/$30 держим до пересчёта.
---
# Пост-ревью решения D13D17 (2026-07-09, оркестратор)
Ратификация выводов стратегического ревью [`07-strategic-review.md`](07-strategic-review.md) (метод: 14 сборщиков + 9 адверсариальных верификаторов, 8 CONFIRMED / 1 PARTIAL). Владелец подтвердил курс 09.07 (вкл. «Rust — нет, не сейчас»: Р1/Go остаётся; вопрос закрыт до пост-пилота и требует конкретного триггера, где Go упирается). Каждое решение ниже — контракт для следующих сессий «Бэкенд»/«Полигон»; хендофф-промты выдаёт оркестратор.
## D13. Пилот Ф2.5 — поправки протокола (гейтят валидность главного решения). ✅
Дополнения к `experiments/09-pilot-protocol.md` (полигон вносит в док и харнесс ДО пре-регистрации):
1. **Новый арм: «моно vs билингв редактор на ОДНОЙ модели, простой general-промпт»** — прямой тест D1. Основание (верифицировано по PDF arXiv:2605.13368, вкл. en→ru): monolingual-рефайнмент теряет accuracy с ПЕРВОГО прохода (2.2…5.6 MQM у всех 6 моделей), general-рефайнмент С исходником даёт тот же fluency при accuracy ~flat и лучшем overall. Существующий 7-bis (моно-бейкофф МОДЕЛЕЙ) сохраняется — это другой вопрос.
2. **C2 — только с ГЕТЕРОГЕННЫМИ кандидатами** (draft-кандидаты от разных моделей, не N сэмплов одной): на гомогенных селекция ≈ монета (2603.20324: WR 0.512 homogeneous; LitMT 2606.05924: best-of-8+судья — последнее место). Иначе плечо C2 предрешено и жжёт бюджет впустую.
3. **Панель судей — переконфигурация**: (а) 23 семейства максимум — 9 судей ≈ 2 эффективных голоса (2605.29800), лучший одиночный ≥ панели; (б) **11+ повторов на вердикт со свапом позиций A/B** — одиночный прогон нестабилен (13.6% флипов, парафраз меняет исход в 25%; 2606.13685); (в) агрегация медианой/Bradley-Terry (JP-TL-Bench-паттерн), не средним; (г) **grok исключён из судейства grok-редактированных выходов** (нарушение собственного анти-self-preference правила §5); (д) валидация судьи — по κ против человеческого IAA + tie-rate/top-1 within-prompt (2603.12520), не по средней корреляции.
4. **Пре-регистрация расширена**: MDE/мощность (число BWS-наборов), N аннотаторов ≥3 (при «минимум владелец» κ неисчислим — тогда честно писать «безκ-режим»), развести имена: C0C3 = конфигурации ядра, **M0M3 = режимы терминологии memory-eval** (коллизия имён в exp09 устранена).
5. **Харнесс чинится ДО решающего прогона** (верифицированные дефекты): memory_eval — стрип/запрет эха глоссарий-преамбулы, сохранение ПОЛНЫХ выходов (не out[:160]), реализация fidelity-оси (без неё правило «M3 роняет vs M0» непроверяемо; текущий индикатив ЗАНИЖАЕТ вред неверной инъекции — chunk1-C3 надут эхом); оценочные артефакты — пере-рандомизация меток по фрагментам, ключ/цены ВНЕ артефакта (слепота exp04 была структурно сломана: ключ лежал в том же документе при LLM-оценке). Инструменты: Pearmut (2601.02933) вместо самописного BWS-тулинга — оценить перед постройкой своего.
6. **Think-арм grok-редактора требует reasoning-буфера в `EstimateUSD`** (D6.2) — иначе экономически главный think-вопрос пилот не ответит; бэкенду заложить до прогона.
## D14. Канал B (18+) — ревизия состава. ✅
1. **DeepSeek ВЫВЕДЕН из explicit-части канала B**: ToS DeepSeek (upd 2026-03-27) §3.4(5) прямо запрещает «pornographic, obscene, or sexually explicit (e.g., sexual chatbots)» — верифицировано по первоисточнику. Для violence-фрагментов (не sexually explicit) DeepSeek остаётся допустим. Интерим D3 «DeepSeek офиц. + локальная abliterated» сужается до «локальная abliterated + Grok».
2. **Mistral — кандидат-фолбэк канала B**: Usage Policy (eff. 2026-06-11) не содержит бланкетного запрета adult-текста (только CSAM/NCII/эксплуатация) — верифицировано по первоисточнику. Полигону: прогнать refusal/excision-пробу Mistral на explicit-корпусе, бэкенду — слот в конфиге при положительной пробе.
3. **Обоснование xAI поправлено**: «цитата Маска про R-rated текст» — на деле про Grok Imagine (картинки); опора — сам AUP xAI (нет бланкетного запрета adult-текста; запрещены CSAM и порно реальных лиц). Позиция стабильна на 09.07, но политика xAI волатильна — мониторинг остаётся.
4. **18+ эмпирика — единственный critical ревью**: refusal/excision на explicit-корпусе (Grok/Mistral/abliterated) + качество Grok-судьи 18+ + поведение Gemini-судьи на explicit — обязательная рука exp02/пилота. Гейтится фрагментами от владельца.
## D15. Resume-экономика и онгоинг. ✅
Верифицировано исполнением: `snapshotID` вшит в `RequestHash` → любой `--resnapshot` (флип гейта, append approved-терминов, бамп версии классификатора) переоплачивает ВСЮ книгу, включая байт-идентичные запросы; redrive флагнутых нет. Решения:
1. **Текущий all-or-nothing ПРИЕМЛЕМ для статичной приёмочной книги Ф1** (гейт громкий, расхождений не бывает) — НЕ чинить до приёмки.
2. **Онгоинг-режим (`add-chapters`, сегмент «ИИ-фабрик») ГЕЙТИТСЯ** одним из двух: content-addressed переиспользование чекпоинтов (`msgsContentHash` уже существует — `render.go:233-249`) ИЛИ селективный redrive. Бэкенду: спека-дизайн (не код) в ближайший пакет; реализация — Ф1.5.
3. **Немедленно (в ближайший бэкенд-пакет)**: исправить лгущие комментарии `runner.go:156-160` / `coverage.go:29-33` («re-classify for FREE» верно только внутри неизменного снапшота); `tmctl status` + redrive флагнутых — приоритет D12-хвостов подтверждён (status → redrive → F3); бампнуть edit `prompt_version` (D1-уточнение №3 не исполнено — один лейбл `v0-draft` на два SHA).
## D16. Банк памяти — фиксы границ доверия (4 верифицированных дыры). ✅
Ядро (F1/нормализация/спойлер/детерминизм/инъекция) ревью подтвердило чистым; все находки — на границах доверия, каждая воспроизведена временным Go-тестом:
1. **Полисемия same-src**: две approved-записи (один src, разные sense/dst, пересекающиеся окна) инжектятся ОБЕ как CONFIRMED + post-check даёт гарантированный confirmed-miss (с гейтом ON — детерминированный livelock чанка). Фикс: fail-loud на пересекающихся окнах разных sense в `loadGlossarySeed` ИЛИ даунгрейд обоих совпадений в AMBIGUOUS. (`memory.go:198-204,299-306`; `memseed.go:155-163`)
2. **Sticky-апгрейд**: collision-prone AMBIGUOUS попадает в activeIDs без disposition (`memory.go:323`) → в следующем чанке sticky даёт status-based CONFIRMED, минуя post-check, прямо в редакторские констрейнты. Фикс: наследовать disposition исходного матча в sticky-кэрри (или не класть не-CONFIRMED в activeIDs). ⚠ Это был **ложно-негативный отсев 44-агентного ревью (0/3)** — рациональ «sticky несёт установленный в сцене термин» не проверялась на коллизионном входе; бэкенду выборочно перепроверить остальные отсевы того ревью.
3. **Source-граница для фонетических ключей ≥4**: `rose` (approved) фаерится CONFIRMED внутри `roseanne` — collision-даунгрейд покрывает только ≤3, Aho-Corasick границ не знает, target-сторона границу имеет (асимметрия). Фикс: script/word-граница на source-стороне для фонетических скриптов.
4. **Ruby-чтение не матчится**: для ручных терминов чтение выбрасывается (`memseed.go:217-220`), у auto-кандидатов surfaces строятся только при непустом dst → ja-чанк с именем каной даёт 0 матчей. До реализации B6: ruby-reading → auto-alias ручного термина; интерим — **обязательный пункт чек-листа подготовки ja-книги: kana-написания сид-имён вносить als aliases руками**.
Плюс: kana-precision замер (minKeyLenPhonetic=3 — «консервативный дефолт до замера») — полигону, расширение E1-протокола; C4-автозаполнение `decl` остаётся Ф2, но признаётся условием реалистичности жёсткого postcheck-гейта.
## D17. D1 (монолингвальный редактор) — статус понижен до «дефолт Ф1, оспорен внешним замером». ✅
D1 остаётся дефолтом Фазы 1 (менять конфигурацию до пилота не будем — kalki-риск не опровергнут, а вакуум верности Ф1 уже признан D1.1). Но: (а) сильная форма обоснования («исходник в контексте редактора ⇒ кальки») понижена до гипотезы — подтверждений в литературе 202526 нет, кальки документированы как болезнь ДРАФТА; (б) экономический довод слаб (билингв-редактор = +1520% стандарт-микса ≈ +$0.100.14/ранобэ); (в) решает пилот-арм D13.1. Если арм покажет паритет верности при моно — D1 подтверждается дёшево; если налог на верность воспроизведётся — флип на «редактор с исходником, простой промпт» дешевле любой альтернативной митигции.
## Сопутствующие правки доков (оркестратор, 09.07)
`02-mvp-plan.md` → v3 (мёртвые пороги/интерим-18+/фазовые списки синхронизированы с D-логом); обе `*.puml` → v3 (убраны Opus/BYOK/«≤2×», дорисованы ре-гейт эскалации, три класса отказов D12, человек в петле, фазовые пометки); superseded-баннеры на `research/01, 02, 03, 04, 09`; провенанс-шапки на `research/12-architecture-as-antipattern.md` и `12-common-failures.md` (происхождение не зафиксировано — до уточнения владельцем числа оттуда не абсорбировать как факты); закрытые промты → `docs/archive/prompts/`; онбординг: корневой `CLAUDE.md` + `backend/README.md` + `eval/README.md`.

View file

@ -1,6 +1,6 @@
# Реестр рисков банка памяти (v1, 2026-07-04)
Выход сессии **«Валидация банка памяти»** (промт `docs/MEMORY_RESEARCH_SESSION_PROMPT.md`). Это **вход для бэкенд-сессии перед фиксацией схемы store/глоссария Фазы 1** (шаг 4 «миграция памяти v2» держится до этого реестра — PROGRESS §Память, D7).
Выход сессии **«Валидация банка памяти»** (промт `docs/archive/prompts/MEMORY_RESEARCH_SESSION_PROMPT.md`). Это **вход для бэкенд-сессии перед фиксацией схемы store/глоссария Фазы 1** (шаг 4 «миграция памяти v2» держится до этого реестра — PROGRESS §Память, D7).
Метод: многоагентный ресёрч по 7 направлениям + независимая адверсариальная верификация каждой находки по первоисточникам + локальный эмпирический бенчмарк retrieval на реальном PD-корпусе (`eval/retrieval_bench.py`, `eval/data/retrieval_bench/`) + чтение реального кода `backend/`. Полный разбор с источниками и датами — `docs/research/13-memory-bank-validation.md`. Продуктовый код здесь не пишется — реестр описывает требования к нему.

View file

@ -1,6 +1,6 @@
# 07 — Стратегическое ревью архитектуры (2026-07-09)
**Мандат:** `docs/STRATEGIC_REVIEW_SESSION_PROMPT.md` — независимый аудит «от корней к цели» по пяти направлениям. Это ревью о том, держится ли замысел end-to-end, а не о багах в строчках.
**Мандат:** `docs/archive/prompts/STRATEGIC_REVIEW_SESSION_PROMPT.md` — независимый аудит «от корней к цели» по пяти направлениям. Это ревью о том, держится ли замысел end-to-end, а не о багах в строчках.
**Метод:** адверсариальный мультиагентный воркфлоу: 14 параллельных сборщиков (8 репо-аудиторов по подсистемам: доки / ресёрч / эксперименты / код пайплайна / код памяти / платформа / eval; 6 веб-ресёрчеров SOTA-2026) → 9 независимых refute-by-default верификаторов на спорных/несущих находках (6 с исполнением временных Go-тестов на реальном коде, 3 по веб-первоисточникам). Итог верификации: **8 CONFIRMED / 1 PARTIAL / 0 REFUTED**. ~2.1M токенов субагентной работы. Каждый несущий вывод заземлён `file:line` / цитатой / URL.
**Зоны не тронуты:** `backend/`, `eval/` — только чтение (временные репро-тесты верификаторов удалены, `git status backend/` чист). `.env` не читались, refusal-корпус не открывался.

View file

@ -1,74 +1,79 @@
@startuml components
title TextMachine — компоненты бэкенда (MVP, v2 2026-07-04, после ревью)
title TextMachine — компоненты бэкенда (v3 2026-07-09, синхронизировано с 05-decisions-log D1D17)\nПометки: [OK] = построено · [Ф1*] = остаток Фазы 1 · [Ф2]/[Ф3] = планово
skinparam componentStyle rectangle
skinparam wrapWidth 200
actor "Владелец / редактор\n(очередь флагов, подтверждение\nтерминов, BWS-оценка пилота)" as HUMAN
package "Интерфейсы" {
[CLI tmctl] as CLI
[HTTP API\n(для будущей IDE)] as API
component "CLI tmctl: translate / report [OK]\n+ status / redrive [Ф1*]" as CLI
component "HTTP API (IDE) [Ф3]" as API
}
package "Оркестратор" {
[Проект книги\n(translation brief, конфиг ядра C1/C2/C3)] as PROJ
[Импорт txt/epub\n(сегментация: главы -> чанки)] as IMP
[Durable jobs\n(глава x стадия + чанк-чекпоинты, resume)] as JOBS
[Пайплайн-раннер\n(циклы/ветвления/эскалация = код,\nсостав стадий/модели/пороги = конфиг)] as RUNNER
[Экспорт txt/epub/TMX\n+ отчёт (журнал вклада)] as EXP
component "Проект книги [OK]\n(translation brief, brief_hash,\nконфиг ядра C0/C1/C2/C3)" as PROJ
component "Импорт txt/epub [OK]\n(главы -> чанки, ruby-захват,\nspine-reconciliation fail-loud)" as IMP
component "Durable jobs [OK]\n(чанк-чекпоинты, resume, kill-9-инвариант;\ncontent-addressed reuse — гейт онгоинга [Ф1.5])" as JOBS
component "Пайплайн-раннер [OK]\n(циклы/ретраи/single-hop эскалация\nс РЕ-ГЕЙТОМ = код; состав стадий/модели/\nпороги = конфиг; disposition D2)" as RUNNER
component "Экспорт txt/epub/TMX + отчёт\n(паспорт качества главы) [Ф1*]" as EXP
}
package "Агентные роли (промпт-конфиги)" {
[Analyst\nbook brief] as ROLE_AN
[Terminologist\nглоссарий + style sheet] as ROLE_TERM
[Translator(ы)\nчерновик / N кандидатов] as ROLE_TR
[Stylist / Editor\nрусский стиль] as ROLE_ED
[Line Editor (Фаза 2+)\nчек-лист Галь] as ROLE_LE
[Continuity Editor (Фаза 2+)\nseries bible] as ROLE_CE
[Judge / Selector\nшкала Комиссарова] as ROLE_JU
component "Translator: черновик [OK]\n(C2: N ГЕТЕРОГЕННЫХ кандидатов [Ф2])" as ROLE_TR
component "Stylist/Editor [OK]\nмонолингвальный D1 (оспорен — пилот-арм D13.1),\ndst-констрейнты CONFIRMED" as ROLE_ED
component "Analyst: book brief [Ф2]" as ROLE_AN
component "Terminologist / автопопуляция\nглоссария [Ф1*/Ф2]\n(спот=локаль, рендер=облако — exp06)" as ROLE_TERM
component "Annotator: пре-пасс [Ф2]\n(speaker-ID, регистр, чэнъюй-маски)" as ROLE_ANN
component "Judge / Selector [Ф2]\n(билингвальный, судья-анкета MQM;\nsecond-opinion чужого семейства\nна эскалированных чанках)" as ROLE_JU
component "Line/Continuity Editor [Ф2+]" as ROLE_LE
}
package "QA-гейты (без LLM)" {
[Морфодетектор канцелярита] as QA_MORPH
[Детектор CJK-артефактов] as QA_CJK
[Глоссарная консистентность >= 98%] as QA_GLOS
[Полнота покрытия предложений\n(анти-omission / вырезания)] as QA_COV
component "Intrinsic classify [OK]\n(refusal/CJK-echo ДО length, loop-детект)" as QA_CJK
component "Coverage / excision [OK, opt-in]\n(sent_cov + len_ratio, порт оракула)" as QA_COV
component "Глоссарный post-check [OK]\n(decl-aware, CONFIRMED-only;\nфлаггер по умолчанию, гейт opt-in)" as QA_GLOS
component "Дешёвые гейты Ф1 [Ф1*]:\nтире-линтер, ёфикатор,\nтранслит-междометия, число-гейт" as QA_CHEAP
component "Морфо-гейт рода + канцелярит\n+ T-index [Ф2] (Python-сайдкар)" as QA_MORPH
component "Валидатор Палладия/Поливанова B6 [Ф2]\n(ruby-reading = ground truth)" as QA_TRANSLIT
}
package "pkg/llm (ядро из vojo + новое)" {
[Роутер роль -> модель] as LLM_RT
[Контент-роутер NSFW\n(каналы A/B, уровень 3 = отказ)] as LLM_NSFW
[Failover local -> cloud\n(circuit breaker)] as LLM_FO
[Адаптеры: DeepSeek / Qwen / GLM /\nGemini / Anthropic / xAI / llama-server] as LLM_AD
[Prompt-cache раскладка префикса\n+ Batch API (Фаза 2, батчуемые стадии)] as LLM_BC
package "pkg/llm" {
component "Роутер роль -> модель [OK]" as LLM_RT
component "Capability-слой [OK]\n(budget_field/temperature/reasoning;\nэхо-мина DeepSeek fail-fast)" as LLM_CAP
component "NSFW-классификатор 0-3 [Ф2]\n(НЕ специфицирован — нужна метрика приёмки;\nуровень 3 = скип чанка + флаг)" as LLM_NSFW
component "Failover [OK, НЕ подключён]\nтолько local->cloud для local-ролей (D4);\nоблачные draft/edit: пауза+resume, НЕ своп" as LLM_FO
component "Адаптеры OpenAI-совместимые [OK]:\nDeepSeek / GLM / Kimi / xAI / OpenAI /\nllama-server; нативный Gemini [Ф2]" as LLM_AD
component "Кэш-раскладка префикса [OK]\n+ Batch (только Gemini-судья/QA) [Ф2]" as LLM_BC
}
package "Банк памяти книги (SQLite на книгу)" {
[Глоссарий\n(род, речь, склонения, спойлер-окна)] as MEM_GLOS
[Резюме\nглава -> арка -> книга] as MEM_SUM
[Series bible\n(персонажи, матрица ты/вы)] as MEM_SB
[TM-кэш переводов] as MEM_TM
[Векторный индекс (Фаза 2)\n(BLOB + brute-force KNN, bge-m3;\nбез sqlite-vec — pure-Go драйвер)] as MEM_VEC
[Селективная инъекция\n(детерминированный отбор в промпт)] as MEM_INJ
package "Банк памяти книги (SQLite на книгу) [OK: v2]" {
component "Глоссарий v2 [OK]\n(sense, alias-граф, decl, gender=hidden,\ntranslit_policy, ревизии)" as MEM_GLOS
component "Горячий путь [OK]: Aho-Corasick,\nнормализация NFKC/trad2simp/kana/ignorables,\nспойлер-окна since/until (hard-reject),\ndisposition CONFIRMED/AMBIGUOUS/REJECT,\nsticky; фиксы границ D16 [Ф1*]" as MEM_HOT
component "Ruby-захват [OK] -> сид auto-кандидатов;\nreading как матч-поверхность [Ф1*, D16.4]" as MEM_RUBY
component "retrieval_state per-chunk [OK]\n(наблюдаемость инъекции/вытеснений)" as MEM_RS
component "Резюме глава->арка->книга [Ф2]\n+ гейт фактичности резюме (реестр D1)" as MEM_SUM
component "Series bible: ты/вы-журнал, род [Ф2]" as MEM_SB
component "Векторный слой [Ф2, low-trust A7]\n(bge-m3, только кандидаты на ревью)" as MEM_VEC
}
package "Деньги и наблюдаемость" {
[Ledger: reserve/settle,\nпотолки $ на книгу/день] as OBS_LG
[Премиум-бюджет книги\n(<= 2x объёма дорогими моделями)] as OBS_QB
[request_log + trace\n(токены, $, cache-hit, вердикты)] as OBS_TEL
package "Деньги и наблюдаемость [OK]" {
component "Ledger: reserve -> settle+checkpoint\nодной tx, потолки книга/день,\nescalation-бюджет" as OBS_LG
component "Премиум-бюджет: budget_usd =\nclamp(price x (1-margin) - base, 0, cap)\n(D11; жёсткие $-гейты сняты)" as OBS_QB
component "request_log + trace + retrieval_state" as OBS_TEL
}
package "Eval (оффлайн)" {
[Golden-set реплей\n(паттерн routereval)] as EV_GS
[CometKiwi сайдкар (Python)] as EV_CK
[Refusal/excision бенчмарк 18+] as EV_RB
package "Eval / Полигон (зона eval/)" {
component "Пилот-харнесс Ф2.5\n(BWS, memory-eval M0-M3, судья-панель;\nчинится до прогона — D13.5)" as EV_PILOT
component "Refusal/excision-бенчмарк\n(18+ часть ждёт explicit-корпус — critical)" as EV_RB
}
cloud "LLM-провайдеры" {
[DeepSeek V4] as P_DS
[Gemini 3.x] as P_GM
[Anthropic\n(только уровни 0-1)] as P_AN
[xAI Grok\n(канал B)] as P_XA
[OpenRouter / агрегаторы / BYOK] as P_OR
[llama-server\n(GPU 8GB: скрининг, abliterated, эмбеддинги)] as P_LL
component "DeepSeek V4 (draft; thinking ON —\nэхо-мина; для explicit ЗАПРЕЩЁН ToS, D14.1)" as P_DS
component "xAI Grok 4.3 (редактор SFW, канал B,\nсудья 18+; AUP без запрета adult-текста)" as P_XA
component "Gemini 3.1 Pro (апекс/судья [Ф2])" as P_GM
component "GLM / Kimi / OpenAI\n(альтернативы/эскалация)" as P_OTH
component "Mistral — кандидат-фолбэк\nканала B [проба, D14.2]" as P_MI
component "llama-server (GPU 8GB: скрининг,\nabliterated канала B, эмбеддинги,\nСПОТ-экстракция)" as P_LL
}
database "SQLite" as DB
@ -77,49 +82,54 @@ CLI --> PROJ
API --> PROJ
PROJ --> IMP
IMP --> JOBS
RUNNER --> EXP
JOBS --> RUNNER
RUNNER --> ROLE_AN
RUNNER --> ROLE_TERM
RUNNER --> EXP
RUNNER --> ROLE_TR
RUNNER --> ROLE_ED
RUNNER --> ROLE_LE
RUNNER --> ROLE_CE
RUNNER --> ROLE_AN
RUNNER --> ROLE_TERM
RUNNER --> ROLE_ANN
RUNNER --> ROLE_JU
RUNNER --> QA_MORPH
RUNNER --> ROLE_LE
RUNNER --> QA_CJK
RUNNER --> QA_GLOS
RUNNER --> QA_COV
RUNNER --> QA_GLOS
RUNNER --> QA_CHEAP
RUNNER --> QA_MORPH
RUNNER --> QA_TRANSLIT
ROLE_TR --> LLM_RT
ROLE_ED --> LLM_RT
ROLE_JU --> LLM_RT
ROLE_AN --> LLM_RT
ROLE_TERM --> LLM_RT
ROLE_LE --> LLM_RT
ROLE_CE --> LLM_RT
LLM_RT --> LLM_NSFW
LLM_NSFW --> LLM_FO
LLM_FO --> LLM_AD
LLM_BC --> LLM_AD
LLM_RT --> LLM_CAP
LLM_CAP --> LLM_AD
LLM_NSFW ..> LLM_RT : выбор канала A/B [Ф2]
LLM_FO ..> LLM_AD : только local-роли (D4)
LLM_BC ..> LLM_AD
LLM_AD --> P_DS
LLM_AD --> P_GM
LLM_AD --> P_AN
LLM_AD --> P_XA
LLM_AD --> P_OR
LLM_AD --> P_GM
LLM_AD --> P_OTH
LLM_AD --> P_MI
LLM_AD --> P_LL
LLM_NSFW ..> P_LL : классификатор 0-3
LLM_NSFW ..> P_LL : классификатор 0-3 [Ф2]
RUNNER --> MEM_INJ
MEM_INJ --> MEM_GLOS
MEM_INJ --> MEM_SUM
MEM_INJ --> MEM_SB
MEM_INJ ..> MEM_VEC : Фаза 2, не в горячем пути
RUNNER --> MEM_TM : коммит перевода
RUNNER --> MEM_GLOS : новые термины
RUNNER --> MEM_SUM : обновление резюме
RUNNER --> MEM_SB : род, ты/вы
RUNNER --> MEM_HOT
MEM_HOT --> MEM_GLOS
MEM_HOT --> MEM_RS
IMP --> MEM_RUBY
MEM_RUBY --> MEM_GLOS
MEM_HOT ..> MEM_SUM : [Ф2]
MEM_HOT ..> MEM_SB : [Ф2]
MEM_HOT ..> MEM_VEC : [Ф2], не в горячем пути
HUMAN --> CLI : запуск, флип гейтов (за подписью)
HUMAN <-- EXP : отчёт, паспорт качества, флаги
HUMAN --> MEM_GLOS : подтверждение терминов auto->approved\n(безлюдный режим = осознанный риск G1/G2)
HUMAN <.. EV_PILOT : BWS-оценка (пилот Ф2.5)
LLM_RT --> OBS_LG
OBS_LG --> OBS_QB
@ -128,14 +138,17 @@ RUNNER --> OBS_TEL
JOBS --> DB
MEM_GLOS --> DB
MEM_SUM --> DB
MEM_SB --> DB
MEM_TM --> DB
MEM_VEC --> DB
MEM_RS --> DB
OBS_TEL --> DB
OBS_LG --> DB
EV_GS ..> OBS_TEL : реплей решений
EV_CK ..> OBS_TEL : оценка качества
EV_PILOT ..> OBS_TEL : golden-set реплей [Ф2]
EV_RB ..> LLM_NSFW : калибровка роутинга
note bottom of HUMAN
Петля человека — несущая опора safety
(все защиты кончаются флагом):
ёмкость G2 меряется пилотом (D13),
flag-rate/главу — первый замер.
end note
@enduml

View file

@ -1,80 +1,104 @@
@startuml pipeline
title TextMachine — поток перевода книги (v2 2026-07-04, после ревью)
title TextMachine — поток перевода книги (v3 2026-07-09, синхронизировано с D1D17)\nПометки: [OK] = построено · [Ф1*] = остаток Фазы 1 · [Ф2] = планово
skinparam wrapWidth 260
start
:Импорт книги (txt / epub v1: текст глав по spine);
:Сегментация: главы -> чанки 1-2k токенов
(по абзацам, перекрытие = read-only контекст);
:Analyst: чтение всей книги (map-reduce) -> book brief
+ translation brief пользователя (18+, слайдер Venuti,
хонорифики, транскрипция) -> brief_hash в ключ TM;
:Terminologist: автогенерация глоссария и style sheet
ДО перевода (паттерн preparation из TransAgents);
:Импорт книги [OK]: txt / epub по spine,
ruby-захват, spine-reconciliation fail-loud
(тихая потеря главы невозможна);
:Сегментация [OK]: главы -> чанки ~1-2k токенов
(sentence-pack, quote-depth, lossless);
:Сид глоссария [OK]: ручной YAML + ruby-кандидаты
(ja-книга: kana-написания имён — aliases руками, D16.4)
· автопопуляция G1 [Ф1*/Ф2]:
спот=локаль / рендер=облако;
:Analyst: book brief (map-reduce) [Ф2];
:Terminologist: глоссарий + style sheet до перевода [Ф2];
note right
Analyst / Terminologist / судья /
книжный QA — батчуемые стадии (-50%);
черновик и редактура чанков
последовательные (STM-зависимость)
snapshotID [OK] пинит: brief, чанкер, план стадий,
capability, память (content-hash), context-assembly.
ЛЮБОЙ resnapshot = переоплата книги (D15)
до content-addressed reuse онгоинг не продаётся.
end note
while (Остались главы?) is (да)
while (Остались чанки главы?) is (да)
:Сборка контекста чанка:
кэшируемый префикс (system + brief + style sheet
+ резюме книги/арки), после кэш-брейкпоинта —
селективный глоссарий + STM + чанк;
:NSFW-классификатор (локальный, 0-3);
:Сборка контекста [OK]: кэш-префикс (system+brief)
+ селективная инъекция глоссария
(Aho-Corasick, спойлер-hard-reject,
disposition CONFIRMED/AMBIGUOUS/REJECT, sticky)
+ retrieval_state запись;
:NSFW-классификатор 0-3 [Ф2 — требует
спеки и метрики приёмки];
if (Уровень 3: несовершеннолетние?) then (да)
:Чанк НЕ переводится: скип + флаг в отчёте
(глава и книга продолжаются);
:Чанк НЕ переводится: скип + флаг
(книга продолжается);
else (нет)
if (Уровень 2?) then (да)
:Канал B: Grok, open-weights,
локальная abliterated
(Anthropic исключён структурно);
if (Уровень 2: explicit?) then (да)
:Канал B [интерим D14]: Grok 4.3
+ локальная abliterated
· Mistral — после пробы
· DeepSeek ЗАПРЕЩЁН (ToS)
· OpenAI/Gemini — нет;
else (0-1)
:Канал A: DeepSeek V4 Flash;
:Канал A [OK]: DeepSeek V4 Flash
(thinking ON — эхо-мина);
endif
:Translator: черновик
(C2/C3: N кандидатов разных семейств, T=0.6-1.0);
if (Ядро C2/C3: селекция?) then (да)
:Judge-селектор: попарное сравнение кандидатов
(T=0, дешёвый прескрининг CometKiwi/MBR);
:Translator [OK]: черновик
(C2 [Ф2]: N ГЕТЕРОГЕННЫХ кандидатов, D13.2);
if (Ядро C2/C3: селекция? [Ф2]) then (да)
:Judge-селектор: 11+ повторов со свапом
позиций, Bradley-Terry
(кандидаты разных семейств);
else (C1)
endif
:Stylist/Editor: художественная редактура
(сильнейшая ru-модель канала, диффы, узкий мандат);
:QA-гейты без LLM: CJK-артефакты,
глоссарная консистентность (approved, по decl),
coverage-гейт v1 (сегментация, длины, refusal-blacklist);
if (Гейт сработал?) then (да)
if (Премиум-бюджет книги не исчерпан?) then (да)
:Эскалация channel-aware:
канал A - Opus / Gemini Pro,
канал B - Grok 4.3 / Gemini safety-off;
:Intrinsic classify [OK]: refusal-blacklist,
CJK-echo, empty, loop — ДО length
(усечённый отказ не ретраится платно);
:Coverage-гейт [OK, opt-in]: sent_cov + len_ratio
(только translator-роль);
if (Вердикт чанка?) then (транзиентный: length/empty)
:same-model retry, ось attempt,
бОльший max_tokens (после loop-чека) [OK];
elseif (контент-провал: echo/excision/refusal) then (детерминированный)
if (escalate_to задан И бюджет есть?) then (да)
:Single-hop эскалация [OK]: на ДРУГУЮ модель
(ровно 1 хоп, editor pinned);
:РЕ-ГЕЙТ фолбэка [OK]: classify + coverage
заново — не прошёл, значит флаг остаётся;
else (нет)
:Флаг чанка в отчёт (ненулевой exit code);
:Флаг чанка (skip+flag+continue, D2) [OK];
endif
else (нет)
else (ok)
endif
:Чекпоинт чанка: сырой ответ -> store (сразу после settle),
перевод -> TM (коммитится только прошедший гейты);
:Editor [OK]: монолингвальная редактура D1
(вход = черновик + CONFIRMED dst-констрейнты,
D17: оспорено внешним замером — решает пилот-арм);
:Post-check финала [OK]: decl-aware,
CONFIRMED-only — флаггер по умолчанию,
жёсткий гейт opt-in за подписью владельца;
:Чекпоинт [OK]: settle + checkpoint одной tx
(в TM коммитится только прошедшее гейты);
endif
endwhile (нет)
:Граница главы: обновить резюме (глава/арка/книга),
батч-подтверждение новых терминов (auto -> approved),
series-bible-lite (род, матрица ты/вы), телеметрия главы;
:Граница главы: телеметрия + паспорт
качества [Ф1*] · батч-подтверждение терминов auto->approved —
ЧЕЛОВЕК или судья чужого семейства [Ф2] —
безлюдный авто-апрув = риск G1
· резюме главы/арки + гейт фактичности [Ф2];
note right
Фаза 2+: Line Editor (чек-лист Галь),
Continuity Editor, анти-translationese пасс,
CometKiwi-оценка, морфодетектор канцелярита
Outage/системный класс (503-storm, потолок):
circuit-breaker -> ПАУЗА + resume (D4/D12),
НЕ mass-swap провайдера.
end note
endwhile (нет)
:Книжный QA-проход: консистентность имён/терминов
по всей книге, регрессия ты/вы (батчуемая стадия);
:Экспорт txt/epub/TMX + отчёт (стоимость и cache-hit
по стадиям, флаги, журнал творческого вклада);
:Очередь флагнутых чанков -> человек
· redrive точечно [Ф1*] (сейчас только
--resnapshot ценой всей книги — D15);
:Книжный QA-проход [Ф2]: консистентность по всей
книге, регрессия ты/вы, морфо-гейт рода;
:Экспорт txt/epub + отчёт [Ф1*]: стоимость по стадиям,
флаги, журнал творческого вклада;
stop
@enduml

View file

@ -1,5 +1,7 @@
# Рынок и спрос на AI-перевод книг, вебновелл и ранобэ
> ⚠ **SUPERSEDED ЧАСТИЧНО (09.07.2026).** Оценка SAM $2.518M ARR завышена в 520 раз — пересчёт снизу-вверх: `11-gap-5.md` ($0.41.5M). После пивота на EU-SaaS (Р5) RU-тиры SAM (6075% объёма) требуют платёжного механизма — открытый GTM-вопрос (Р9, `../architecture/07-strategic-review.md` риск №6). Фактура по сегментам/якорям остаётся полезной; цифры выручки из этого дока в решения не брать.
Дата исследования: 2026-07-04. Все цифры — из открытых источников, ссылки в конце. Непроверенные оценки помечены «(не проверено)».
## TL;DR

View file

@ -1,5 +1,7 @@
# Конкуренты и существующие решения AI-перевода книг и длинных художественных текстов
> ⚠ **SUPERSEDED ЧАСТИЧНО (09.07.2026).** TL;DR-тезис «русское направление никто не обслуживает» опровергнут `11-gap-4.md` (Rulate AI-раздел 14.4k работ, MLate, VseGPT); «окно 612 мес» — непроверенная оценка, реальная угроза — западные сервисы с ru-таргетом (booktranslator.ai) и коммодитизация «глоссария» в нижнем сегменте. Срез рынка на 07.2026 — `../architecture/07-strategic-review.md` §5 (RU стагнирует, EN индустриализуется, Kindle Translate без ru).
Дата исследования: 2026-07-04. Все цифры (звёзды GitHub, цены) проверены на эту дату, если не помечено иначе.
## TL;DR

View file

@ -1,5 +1,7 @@
# Научное состояние мультиагентного и документного художественного машинного перевода (20232026)
> ⚠ **SUPERSEDED ЧАСТИЧНО (09.07.2026).** Вывод №1 «ядро — generate-then-select» переопределён: Р2/`11-gap-3` («решает пилот»), и наука-2026 контрсигналит — LitMT (2606.05924): селекция ПОСЛЕДНЯЯ на гомогенных кандидатах; 2603.20324 верифицирована по первоисточнику — перевода в задачах НЕТ, «валидация людьми» — на деле независимыми LLM-судьями. Свежий срез (рефайнмент 2605.13368, судьи, память) — `../architecture/07-strategic-review.md` §45 и D13 в `../architecture/05-decisions-log.md`.
Дата обзора: 2026-07-04. Охват: arXiv, ACL/EMNLP/NAACL, ICLR, TACL, WMT.
## TL;DR

View file

@ -1,5 +1,7 @@
# LLM API провайдеры для художественного перевода (zh/ja/en/ru): цены, качество, цензура
> ⚠ **SUPERSEDED ЧАСТИЧНО (09.07.2026).** Рекомендации ролей устарели: редактор — grok-4.3 (эксп.04, D3), НЕ GLM/Kimi/Sonnet; Anthropic удалён; grok-4.1-fast ретайрнут. Канал B: DeepSeek для explicit ЗАПРЕЩЁН его ToS (upd 27.03.2026) — D14; Mistral (policy 11.06.2026) — кандидат-фолбэк. Актуальные цены — `../experiments/08-cost-model-v2.md` + `backend/configs/models.yaml`; квирки — `../experiments/00-provider-quirks.md`; стек — D3/Р4.
Дата исследования: **2026-07-04**. Все цены проверены на официальных страницах прайсинга на эту дату (исключения помечены). Валюта — USD за 1M токенов, формат «input / output».
## TL;DR

View file

@ -1,5 +1,7 @@
# 09. Модель стоимости перевода книги через мультиагентный пайплайн и оценка маржи
> ⚠ **SUPERSEDED (09.07.2026).** Денежная модель заменена `../experiments/08-cost-model-v2.md` (стек grok-редактора: ~$0.69/ранобэ, ~$10.94/вебновелла-500; редактор ≈ 90% стоимости). Пороги $0.6/$5/$30 и Sonnet-премиум-микс мертвы (D11); доктрина «caching-first» опровергнута на текущем стеке (кэш ≈ 2% стандарта — рычаг это цена редактора). Отсюда живы только методика и множители токенизации (уточнены exp01).
Дата: 2026-07-04. Все цены проверены по официальным страницам / актуальным агрегаторам на эту дату; отдельные пункты помечены «(не проверено)». Курс для пересчёта: ~80 ₽/$ (допущение, не проверено — уточнить на дату расчёта).
## TL;DR

View file

@ -1,6 +1,6 @@
# Валидация банка памяти книги: вердикт, что менять, обоснование и источники
Дата: 2026-07-04. Сессия **«Валидация банка памяти»** (промт `docs/MEMORY_RESEARCH_SESSION_PROMPT.md`). Предмет — решение **Р3 «Банк памяти книги»** (`architecture/01-decisions.md`) и исследовательская база `research/05-memory-glossary.md`. Мандат: **адверсариально провалидировать** подход до заморозки в коде — не поверить, а попытаться сломать.
Дата: 2026-07-04. Сессия **«Валидация банка памяти»** (промт `docs/archive/prompts/MEMORY_RESEARCH_SESSION_PROMPT.md`). Предмет — решение **Р3 «Банк памяти книги»** (`architecture/01-decisions.md`) и исследовательская база `research/05-memory-glossary.md`. Мандат: **адверсариально провалидировать** подход до заморозки в коде — не поверить, а попытаться сломать.
Метод: многоагентный ресёрч по 7 направлениям (Q1Q7) + независимая адверсариальная верификация каждой находки по первоисточникам + завершающий completeness-критик + **локальный эмпирический бенчмарк retrieval** на реальном PD-корпусе (`eval/retrieval_bench.py`) + чтение реального кода `backend/`. Все вендорские/бенчмарк-числа перепроверены независимо (как MemPalace в research/05); процитированные корректировки — от верификаторов. Реестр рисков (таблица «сценарий → защита → слой → где в коде») — отдельный файл `architecture/06-memory-risk-registry.md` (единственный, что этой сессии разрешено создать в `architecture/`), он же — вход для бэкенда перед фиксацией схемы.

View file

@ -1,6 +1,6 @@
# Адаптивный/обучающийся слой памяти: стоит ли гибрид, огибающая осуществимого, арбитраж
Дата: 2026-07-05. Сессия **«Адаптивный слой памяти»** (промт `docs/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md`). Предмет — вопрос владельца: не будет ли **максимально эффективным гибрид** «отлаженный детерминированный банк памяти (Р3) + слой, обучающийся ПО ХОДУ перевода книги» (in-context / локальный LoRA / kNN-MT / online-retrieval / само-коррекция), и **как именно смёржить под наш жёсткий локально-стоимостный контур**. Мандат — адверсариально проверить, стоит ли оно того, а не поверить в модность.
Дата: 2026-07-05. Сессия **«Адаптивный слой памяти»** (промт `docs/archive/prompts/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md`). Предмет — вопрос владельца: не будет ли **максимально эффективным гибрид** «отлаженный детерминированный банк памяти (Р3) + слой, обучающийся ПО ХОДУ перевода книги» (in-context / локальный LoRA / kNN-MT / online-retrieval / само-коррекция), и **как именно смёржить под наш жёсткий локально-стоимостный контур**. Мандат — адверсариально проверить, стоит ли оно того, а не поверить в модность.
Метод (как в валидации банка, `research/13`): многоагентный ресёрч по 6 направлениям (kNN-MT / in-context-демонстрации / adaptive-online-MT / локальный LoRA / adaptive-RAG-петли / свежее 20252026) + **независимая адверсариальная верификация каждой несущей находки по первоисточнику** (24 верификатора: 19 CONFIRMED, 5 OVERCLAIM с точной поправкой) + **две исполняемые пробы на нашем стенде/ключах** (`eval/adaptive_probe.py` — доступ к логитам у флагманов; `eval/adaptive_incontext.py` — демонстрации vs глоссарий на реальном zh→ru) + чтение реального кода `backend/` на git HEAD. Все заблокированности проверены **пробой, а не по памяти** (мандат §Жёсткий контур). Прод-код не пишется — только `eval/` и этот документ.