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); этот файл — ЖУРНАЛ, не спека.** > **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (обновляемый блок; на 2026-07-09). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1D17); этот файл — ЖУРНАЛ, не спека.**
> - **Фаза:** 0 (каркас) завершена; машинерия Фазы 1 в основном построена — банк памяти v2, чанкер + txt/epub импорт, disposition/coverage-гейт/эскалация, durable resume, глоссарий→редактор. Следующее: реальный ja→ru прогон end-to-end + пилот Ф2.5. > - **Фаза:** 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`) · судья/апекс Gemini 3.1 Pro (mandatory thinking) · эскалация A: DeepSeek V4 Pro → GLM-5.1 → Gemini · канал B (18+): Grok. **Anthropic выброшен (за дороговизну), OpenAI оставлен.** 6 ключей. > - **Стек (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. > - **Экономика:** `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. > - Записи ниже — хронология; РАННИЕ (день-0, 04.07) содержат устаревшие цифры/решения (COGS $24, BYOK, Anthropic-Sonnet), переопределённые позже — см. блок выше и 05-decisions-log.
## 2026-07-04 — Старт проекта (MVP-сессия) ## 2026-07-04 — Старт проекта (MVP-сессия)
@ -47,7 +48,7 @@
- в план добавлены режим онгоинга и series-bible-lite (сегмент «ИИ-фабрик» и проверка рода/ты-вы). - в план добавлены режим онгоинга и 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 идут). - [x] Параллельная сессия «Полигон» запущена (эксперименты 0103 идут).
- [ ] Сессия «Редакция» (промпты ролей) — после фиксации формата конфига в Фазе 0. - [ ] Сессия «Редакция» (промпты ролей) — после фиксации формата конфига в Фазе 0.
- [x] Сессия «Валидация банка памяти» — завершена (вердикт GO на схему+гейты; реестр `architecture/06`; ставка гейтится in-house eval'ом в пилоте Ф2.5). - [x] Сессия «Валидация банка памяти» — завершена (вердикт GO на схему+гейты; реестр `architecture/06`; ставка гейтится in-house eval'ом в пилоте Ф2.5).
@ -55,6 +56,14 @@
- Роли сессий: «Бэкенд» → `backend/`; «Полигон» → `eval/` + `docs/experiments/`; оркестратор → доки, ревью, синхронизация, дозаправки ресёрча. - Роли сессий: «Бэкенд» → `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-защита рефренов, эскалация по цене правки, регрессионный сьют из примеров). - [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 (перевалидация) завершён ### 2026-07-04 — Сессия 1: шаг 0 (перевалидация) завершён
@ -235,7 +244,7 @@ keep-alive (Ф12), инъекция глоссария (`selective`), пор
> 4. ⚠ **DeepSeek-черновик «эхал» оригинал** на высоко-CJK фрагменте (эксп.04, 3/3) — тихий отказ = оригинал вместо перевода. CJK-гейт Фазы 1 обязан это ловить (уже в плане); плюс фолбэк-черновик как у полигона. > 4. ⚠ **DeepSeek-черновик «эхал» оригинал** на высоко-CJK фрагменте (эксп.04, 3/3) — тихий отказ = оригинал вместо перевода. CJK-гейт Фазы 1 обязан это ловить (уже в плане); плюс фолбэк-черновик как у полигона.
> **Ещё две вводные бэкенду (04.07):** > **Ещё две вводные бэкенду (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 шлётся). > 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-план принят. Ответы: > **Ответ оркестратора на 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). Сейчас флаг — цикла эскалации ещё нет. - **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 на живых ключах. Оба; оракул — гейт. - **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 эхо-мина зафиксирована регресс-гейтом ### 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. - [x] Эталон DeepSeek + llama.cpp 30b-a3b (13.5 tok/s) — в 03.
- [~] **explicit-часть refusal-бенчмарка** — владелец даёт фрагмент реальной вебновеллы («Мастер Гу», жёсткая сцена) → полигон заведёт в корпус и прогонит через провайдеров (кто откажет/вырежет/переведёт). Проверка ставки «Grok = NSFW-канал». - [~] **explicit-часть refusal-бенчмарка** — владелец даёт фрагмент реальной вебновеллы («Мастер Гу», жёсткая сцена) → полигон заведёт в корпус и прогонит через провайдеров (кто откажет/вырежет/переведёт). Проверка ставки «Grok = NSFW-канал».
- [x] ~~Проверка ru-агрегаторов~~**СНЯТА** (BYOK отменён владельцем, см. коррекцию выше). - [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 главах реальных вебновелл (файлы владельца). - [ ] Довалидация токен-калибровки на 35 главах реальных вебновелл (файлы владельца).
- [~] Задача 4 (пилот выбора ядра, Фаза 2.5): протокол BWS + панель LLM-судей — **протокол готов** ([experiments/09](experiments/09-pilot-protocol.md)) + харнесс `eval/pilot/`; решающий прогон ждёт корпус владельца (см. Сессия 3). - [~] Задача 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 допустимых флагов и решает флип. - [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). > **[ДОБАВЛЕНО после закрытия] Локалка × банк памяти — экстракция терминов, ВЕРИФИЦИРОВАННЫЙ бенчмарк (дыра 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) ### 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. ## Фаза 1 — Перевод целой книги (текущая; машинерия в основном построена)
- `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.
Приёмка: `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 контекст** (повторно не переводится, дедупликации при склейке нет по построению). **Интерим-правило 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).
- **Банк памяти 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 по стадиям, метрики, журнал творческого вклада, флаги).
Приёмка: 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). ⚠ v3: фаза перегружена (~25 механизмов из 04-unhappy + net-new) — при старте пересмотреть горизонт и порезать на вехи; ниже состав по приоритету.
- 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).
Приёмка: 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) ## Фаза 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 ## Вне скоупа 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 — по стадиям, справочно). 1. COGS: телеметрия денег точна; эскалация уважает `budget_usd`; sanity-якоря ~$0.7/ранобэ стандарт, ~$11/вебновелла-500, селективный премиум ≤$25 (exp08; жёсткие $-гейты сняты D11).
2. Глоссарная консистентность approved-терминов ≥98% (процедура Р7); ноль молчаливых пропусков, подтверждено coverage-гейтом, отвалидированным на мини-наборе. 2. Глоссарная консистентность approved-терминов ≥98% (процедура Р7/D10); ноль молчаливых потерь (coverage + spine-reconciliation).
3. Качество: **статистически значимый win rate >50%** (биномиальный тест, α=0.05, ≥150 человеческих попарных сравнений) против **DeepSeek+селективный глоссарий** (честный baseline уровня VseGPT, не соломенный «сырой DeepSeek»); 70% — aspirational-цель, калибруется пилотом. 3. Качество: **статистически значимый win rate >50%** (биномиальный тест, α=0.05, ≥150 человеческих попарных сравнений, пре-регистрация MDE — D13.4) против baseline «DeepSeek+селективный глоссарий» (уровень VseGPT).
4. Резюмируемость: kill -9 в середине главы → продолжение с потерей максимум одного LLM-вызова. 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 — источник истины здесь (потом сольём в основные доки). Ответ на вопросы бэкенд-сессии (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). - Пересчёт премиум-бюджета на Sonnet-free стеке с reasoning-as-output (D3.2), апекс Gemini 3.1 Pro (форсированный thinking).
- ~~Проброс cache-hit/batch RU-агрегаторами~~**СНЯТО** (коррекция владельца 04.07: EU-SaaS, прямые ключи, BYOK отменён; см. Р5). Вся cache/batch-экономика теперь по прямым ключам без оговорок — это канон. - ~~Проброс cache-hit/batch RU-агрегаторами~~**СНЯТО** (коррекция владельца 04.07: EU-SaaS, прямые ключи, BYOK отменён; см. Р5). Вся cache/batch-экономика теперь по прямым ключам без оговорок — это канон.
- `budget_usd: 0` в `pipeline-c1.yaml` — заглушка; $-потолок владелец задаёт по ценовому намерению, дефолты $5/$30 держим до пересчёта. - `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) # Реестр рисков банка памяти (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`. Продуктовый код здесь не пишется — реестр описывает требования к нему. Метод: многоагентный ресёрч по 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) # 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. **Метод:** адверсариальный мультиагентный воркфлоу: 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-корпус не открывался. **Зоны не тронуты:** `backend/`, `eval/` — только чтение (временные репро-тесты верификаторов удалены, `git status backend/` чист). `.env` не читались, refusal-корпус не открывался.

View file

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

View file

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

View file

@ -1,5 +1,7 @@
# Рынок и спрос на AI-перевод книг, вебновелл и ранобэ # Рынок и спрос на 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. Все цифры — из открытых источников, ссылки в конце. Непроверенные оценки помечены «(не проверено)». Дата исследования: 2026-07-04. Все цифры — из открытых источников, ссылки в конце. Непроверенные оценки помечены «(не проверено)».
## TL;DR ## TL;DR

View file

@ -1,5 +1,7 @@
# Конкуренты и существующие решения AI-перевода книг и длинных художественных текстов # Конкуренты и существующие решения 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, цены) проверены на эту дату, если не помечено иначе. Дата исследования: 2026-07-04. Все цифры (звёзды GitHub, цены) проверены на эту дату, если не помечено иначе.
## TL;DR ## TL;DR

View file

@ -1,5 +1,7 @@
# Научное состояние мультиагентного и документного художественного машинного перевода (20232026) # Научное состояние мультиагентного и документного художественного машинного перевода (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. Дата обзора: 2026-07-04. Охват: arXiv, ACL/EMNLP/NAACL, ICLR, TACL, WMT.
## TL;DR ## TL;DR

View file

@ -1,5 +1,7 @@
# LLM API провайдеры для художественного перевода (zh/ja/en/ru): цены, качество, цензура # 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». Дата исследования: **2026-07-04**. Все цены проверены на официальных страницах прайсинга на эту дату (исключения помечены). Валюта — USD за 1M токенов, формат «input / output».
## TL;DR ## TL;DR

View file

@ -1,5 +1,7 @@
# 09. Модель стоимости перевода книги через мультиагентный пайплайн и оценка маржи # 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 ₽/$ (допущение, не проверено — уточнить на дату расчёта). Дата: 2026-07-04. Все цены проверены по официальным страницам / актуальным агрегаторам на эту дату; отдельные пункты помечены «(не проверено)». Курс для пересчёта: ~80 ₽/$ (допущение, не проверено — уточнить на дату расчёта).
## TL;DR ## 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/`), он же — вход для бэкенда перед фиксацией схемы. Метод: многоагентный ресёрч по 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/` и этот документ. Метод (как в валидации банка, `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/` и этот документ.