From 73dd117f6a01f45f8929a5fb5ce61e59c7c1246d Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 11 Jul 2026 05:34:25 +0300 Subject: [PATCH] Revision D31 batch 2: actuality map atop decisions log, refreshed CLAUDE.md pipeline and status, banners and supersession marks across architecture docs --- CLAUDE.md | 12 ++++++------ docs/architecture/01-decisions.md | 8 +++++--- docs/architecture/02-mvp-plan.md | 16 ++++++++-------- docs/architecture/03-implementation-notes.md | 4 +++- docs/architecture/05-decisions-log.md | 7 ++++++- docs/architecture/06-memory-risk-registry.md | 2 ++ docs/architecture/07-strategic-review.md | 2 ++ 7 files changed, 32 insertions(+), 19 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b4b7de8..7acacb6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # TextMachine — контекст для Claude-сессий -Go-бэкенд издательского художественного перевода крупных текстов (ранобэ/вебновеллы, zh/ja/en→ru) через мультиагентный LLM-пайплайн: черновик DeepSeek → монолингвальный редактор grok-4.3 → судья Gemini (Ф2). Цели: победить translationese; низкий COGS (~$0.69/ранобэ); детерминированный банк памяти книги; 18+ с учётом цензуры; телеметрия денег с первого дня. +Go-бэкенд издательского художественного перевода крупных текстов (ранобэ/вебновеллы, zh/ja/en→ru) через мультиагентный LLM-пайплайн: черновик (интерим DeepSeek; переводчик выбирает exp13) → **БИЛИНГВАЛЬНЫЙ редактор (D30.1; кандидат glm-5)** → судья Gemini (Ф2). Цели: победить translationese; низкий COGS (~$0.85/ранобэ после флипа D1 — D30.4); детерминированный банк памяти книги; 18+ с учётом цензуры; телеметрия денег с первого дня. ## Роли сессий и зоны (НЕ править чужую зону) @@ -10,11 +10,11 @@ Go-бэкенд издательского художественного пер | **Полигон (eval)** | `eval/` + `docs/experiments/` | то же | | **Оркестратор** | `docs/` (architecture/research/PROGRESS), ревью чужого кода read-only | ратифицирует решения, пишет хендофф-промты | -Координация — журнал `docs/PROGRESS.md` (секции «Бэкенд»/«Полигон»/«Память»; сверху CURRENT-STATE). Записывай туда краткие итоги своей сессии. +Координация — журнал `docs/PROGRESS.md` (секции «Бэкенд»/«Полигон»/«Память»/«Голос и состояние»/«Ридер-IDE»; сверху CURRENT-STATE). Записывай туда краткие итоги своей сессии. Закрытая хроника 04–10.07 вынесена в `docs/archive/PROGRESS-2026-07-04-10.md` (D31) — НЕ читать при онбординге, только по конкретной ссылке. ## Источники истины (по убыванию) -1. **`docs/architecture/05-decisions-log.md` (D1–D25)** — ратифицированный контракт; при конфликте с любым другим доком побеждает он. +1. **`docs/architecture/05-decisions-log.md` (D1–D31)** — ратифицированный контракт; при конфликте с любым другим доком побеждает он; сверху файла — карта актуальности (что чем superseded). 2. `docs/architecture/07-strategic-review.md` — стратегический аудит 09.07 (вердикт, риски, курс-коррекции). 3. `docs/experiments/00-provider-quirks.md` — wire-квирки провайдеров (читать ПЕРЕД правкой адаптеров/вызовами провайдеров). 4. `docs/architecture/01-decisions.md` (Р1–Р10), `02-mvp-plan.md` (фазы v3), `04-unhappy-paths.md`, `06-memory-risk-registry.md`. @@ -27,7 +27,7 @@ Go-бэкенд издательского художественного пер - **18+ уровень 3** (несовершеннолетние в сексуальном контексте) — не обрабатывать/не анализировать; `eval/data/refusal_corpus/*` не открывать без прямой задачи владельца. - **PUML не рендерить в svg/png** — владелец смотрит PlantUML-расширением VS Code. - **Коммиты**: английский, одно предложение ≤30 слов, без Co-Authored-By. `.claude/settings.local.json` НЕ коммитить (ломает пермишены). -- Провайдерские ловушки: **DeepSeek — НИКОГДА не отключать thinking** (эхо-мина; гейт `echoMineViolation` это принуждает); grok-4.3 reasoning off — только ЯВНЫЙ `reasoning_effort:"none"` (дефолт low); слаги моделей не менять без live-фактчека `/models`. **Пробы/запросы падают или ведут себя странно (флейки, 404 живой модели, новый finish_reason, игнор параметров) → идём в официальную доку вендора (deprecations/changelog/status) и гуглим, НЕ гадаем** — интерпретацию аномалии без вендор-сверки в доки/промты не абсорбировать (решение владельца 10.07; правило двух направлений — `00-provider-quirks.md` шапка). +- Провайдерские ловушки: **DeepSeek — НИКОГДА не отключать thinking** (эхо-мина; гейт `echoMineViolation` это принуждает); grok-4.3 reasoning off — только ЯВНЫЙ `reasoning_effort:"none"` (дефолт low; wire-квирк в силе, но из РЕДАКТОРСКИХ ролей reasoning-off снят — no-op, D30.1); слаги моделей не менять без live-фактчека `/models`. **Пробы/запросы падают или ведут себя странно (флейки, 404 живой модели, новый finish_reason, игнор параметров) → идём в официальную доку вендора (deprecations/changelog/status) и гуглим, НЕ гадаем** — интерпретацию аномалии без вендор-сверки в доки/промты не абсорбировать (решение владельца 10.07; правило двух направлений — `00-provider-quirks.md` шапка). - Дисциплина: не верь заголовкам — грунтуй выводы `file:line`/цитатой; спорное верифицируй адверсариально (author≠reviewer); эмпирика на PD-классике из претрейна считается предварительной до вебновелл-среза. - **Git-координация мультисессий:** НИКАКИХ `reset --hard`, перезаписей истории (amend/rebase несвежих коммитов) и `checkout` поверх грязного дерева, пока возможны незакоммиченные правки параллельных сессий — сначала `git status` и опознание ЧУЖИХ изменений; чужое не трогать; history-rewrite — только по согласованию через оркестратора при чистом дереве (урок 09.07: rewrite оркестратора стёр незакоммиченные правки полигона). @@ -37,6 +37,6 @@ Go-бэкенд издательского художественного пер 2. `docs/architecture/05-decisions-log.md` целиком (контракт). 3. По роли: Бэкенд — `backend/README.md` + `03-implementation-notes.md`; Полигон — `eval/README.md` + `experiments/00` + `09-pilot-protocol.md`; всем — `07-strategic-review.md` §6–9 (вердикт/риски/курс). -## Текущее состояние (2026-07-11) +## Текущее состояние (2026-07-12, пост-ревизия D31) -Фаза 0 ✅; машинерия Ф1 построена и отрефакторена (бэкенд №1–4, полигон №1–3 — D20–D23; golden-гард = инвариант №8, OpenReadOnly-status). **Приёмка Ф1 этап A (25 глав 蛊真人 zh→ru, D18) ВЫПОЛНЕНА и ратифицирована с оговорками — D24**: $0.41, деньги/kill-9/resume/redrive подтверждены исполнением, дрейф ≈0; флаггер D10 шумел из-за decl-сида → фиксы ратифицированы (floor `min_max_tokens` D24.3, post-check базовый dst D24.4). **research/17 (внешняя критика GPT-5.6) принят — D25** (курс цел; release-state контракт до читательского экспорта, trust boundary в контракт). Книга на стенде `/home/ubuntu/books/gu-zhenren/` (GB18030; текст и производные ВНЕ git). **⚠ Качество-первым (D26): первое чтение владельцем 25 глав — нечитаемо (редактура); этап B ЗАМОРОЖЕН до читаемых 25 глав. Бэкенд №5 залендён (D28: floor max_tokens + post-check union, все оси ACCEPT); идёт полигон-диагностика exp12 (`POLYGON_QUALITY_DIAG_SESSION_PROMPT.md`) → пере-прогон 25 глав выигравшим конфигом → этап B · ридер-IDE ресёрч**. Полигон №4 — второй приоритет. Пакет D15.2 — промт после развязки exp12 (D28.4; v3.1-правки первым шагом — D22.2). Решающая точка — пилот Ф2.5 (блокеры: билингв-якорь/аннотаторы ≥3 — D25.9-Q1; **ключ xAI един с data-sharing, off перед продом — D27**, «чистый ключ» снят). Ключи: DEEPSEEK, ZAI, KIMI, OPENAI, GEMINI, XAI, MISTRAL. Стенд: WSL2, GTX 1070 8GB (прокси-грабли: localhost из-под прокси даёт 403 — no-proxy транспорт для local). +Фаза 0 ✅; **Ф1-машинерия ✅** (пакеты №1–5, D20–D28; golden-гард = инвариант №8); **приёмка этап A ✅ (D24), этап B заморожен (D26)**. **Качество-первым:** exp12-диагностика принята (D30) — «нечитаемо» = пассивный МОНО-редактор + кривой сид + построчная вёрстка от промптов + нет санитайзера; дефекты смысла — в черновике. **Ратифицировано D30: редактор БИЛИНГВ (флип D1, supersede D17), reflow-вёрстка, output-санитайзер, глоссарий v2 (спорные термины — под подпись владельца), exp13 бейк-офф переводчиков.** **Очередь: бэкенд-пакет D15.2 (`BACKEND_D152_SESSION_PROMPT.md`) ∥ полигон exp13 (`POLYGON_EXP13_SESSION_PROMPT.md`) → единый resnapshot → пере-прогон 25 глав кандидатом (re-gate верности обязателен) → чтение владельца → этап B.** Трек: дешёвые модели сейчас, фронтир потом (конфиг-первая архитектура — D30.7). Ключ xAI: единый, с data-sharing, off перед продом (D27). Решающая точка — пилот Ф2.5 (блокеры: билингв-якорь/аннотаторы ≥3 — D25.9-Q1, корпус, проба судьи-дублёра — D22.6). Книга на стенде `/home/ubuntu/books/gu-zhenren/` (GB18030; текст и ВСЕ производные ВНЕ git). Ключи: DEEPSEEK, ZAI, KIMI, OPENAI, GEMINI, XAI, MISTRAL. Стенд: WSL2, GTX 1070 8GB (прокси-грабли: localhost из-под прокси даёт 403 — no-proxy транспорт для local). diff --git a/docs/architecture/01-decisions.md b/docs/architecture/01-decisions.md index 3b73ecc..18b08bd 100644 --- a/docs/architecture/01-decisions.md +++ b/docs/architecture/01-decisions.md @@ -1,5 +1,7 @@ # Архитектурные решения (v2, 2026-07-04) +> **⚠ Шапка-указатель (ревизия D31, 12.07).** Принципы Р1–Р10 живы, но конкретика моделей/цен в этом доке — состояние 04–05.07 и **проигрывает D-логу**: редактор теперь БИЛИНГВ, grok reasoning-off из редакторских ролей снят, кандидат glm-5-билингв (D30.1); черновик DeepSeek — интерим до бейк-оффа exp13 (D30.6); канал B: переводчик-дефолт Mistral + grok-ON эскалация (D14.1/D19.1), Gemini-судья fail-closed на эротике (D22.6); ключ xAI един, с data-sharing (D27); COGS ~$0.85/ранобэ после флипа D1 (D30.4); кэш ≈2% стоимости, НЕ главный рычаг (exp08). Точечные пометки — по тексту. + Синтез по итогам исследований `docs/research/01…11-*`. v2 — после адверсариального ревью тремя критиками (техархитектура, экономика, red-team); все найденные противоречия разрешены явно. Формат — ADR-подобный: решение → обоснование → что отвергнуто. Статусы: **принято** (можно кодить), **гипотеза** (нужен пилот/валидация). --- @@ -53,11 +55,11 @@ | Роль | Основная модель | Альтернативы/эскалация | |---|---|---| | Черновик | DeepSeek V4 Flash ($0.14/$0.28; cache-hit input $0.0028; лучший zh-токенизатор) | GPT-5 nano ($0.05/$0.40), Qwen-Flash. ⚠ эксп.04: DeepSeek «эхал» оригинал на высоко-CJK фрагменте (82% CJK, 3/3) → тихий отказ = оригинал вместо перевода; ловит CJK-гейт + фолбэк-черновик | -| **Редактор (ru-стиль) — эмпирический дефолт (эксп.04)** | **grok-4.3** (слепой бейк-офф, 2 фронтир-судьи: ранг-1 верность, ранг-2 стиль, самый дешёвый+быстрый ~13с без reasoning) | премиум-эскалация **gemini-3.1-pro-preview** (лучшая проза, дорогая/медленная, иногда дописывает). GLM/Kimi сняты с дефолта (GLM-4.6 слабейший — перемерить при GLM-5; Kimi худший value: ~11k reasoning-ток./абзац). *Провизорно: LLM-судьи на коротких фрагментах; финал — человеческий пилот Ф2.5* | +| **Редактор (ru-стиль) — эмпирический дефолт (эксп.04)** *(→ superseded D30.1: редактор БИЛИНГВ, grok-off снят как no-op, кандидат glm-5-билингв; ревизия D31)* | **grok-4.3** (слепой бейк-офф, 2 фронтир-судьи: ранг-1 верность, ранг-2 стиль, самый дешёвый+быстрый ~13с без reasoning) | премиум-эскалация **gemini-3.1-pro-preview** (лучшая проза, дорогая/медленная, иногда дописывает). GLM/Kimi сняты с дефолта (GLM-4.6 слабейший — перемерить при GLM-5; Kimi худший value: ~11k reasoning-ток./абзац). *Провизорно: LLM-судьи на коротких фрагментах; финал — человеческий пилот Ф2.5* | | Эскалация канал A (по сигналу гейта) | DeepSeek V4 Pro → GLM-5.1 → gemini-3.1-pro-preview (апекс) | нативный Gemini-адаптер для safety-судьи — Ф2 | | Судья | Gemini 3.1 Pro (для явного safety-контроля — нативный API, Ф2) | GPT-5 mini — second-opinion судья чужого семейства; **Grok 4.3 — судья 18+** (не отказывается оценивать explicit, в отличие от Gemini/Claude); локальный POLLUX-judge-7B — бесплатный гейт | | Эмбеддинги/скрининг/экстракция терминов | локально: bge-m3, Qwen3.5-9B | Qwen3-Embedding-0.6B | -| 18+ (канал B) | **Grok 4.3** ($1.25/$2.50 — средний тир, самый пермиссивный крупный API) + DeepSeek офиц. + локальная abliterated Qwen3.5 | open-weights через OpenRouter (Chutes/Venice). ⚠ Grok 4.1 Fast (дешёвый тир) retired 15.05.2026 — слаги редиректят на grok-4.3; сам xAI НЕ выведен. reasoning xAI **аддитивный** → канал B с thinking OFF (EstimateUSD не резервирует reasoning). Промо xAI $150 за data-sharing — брать на выделенный NSFW/eval-аккаунт (PD/тест-корпус), НЕ на продакшн клиентских книг | +| 18+ (канал B) *(→ superseded D14.1/D19.1: переводчик-дефолт Mistral; DeepSeek в explicit запрещён ToS; эскалация grok reasoning-ON; ревизия D31)* | **Grok 4.3** ($1.25/$2.50 — средний тир, самый пермиссивный крупный API) + DeepSeek офиц. + локальная abliterated Qwen3.5 | open-weights через OpenRouter (Chutes/Venice). ⚠ Grok 4.1 Fast (дешёвый тир) retired 15.05.2026 — слаги редиректят на grok-4.3; сам xAI НЕ выведен. reasoning xAI **аддитивный** → канал B с thinking OFF (EstimateUSD не резервирует reasoning). Промо xAI $150 за data-sharing — брать на выделенный NSFW/eval-аккаунт (PD/тест-корпус), НЕ на продакшн клиентских книг | Контент-роутинг ([11-gap-2](../research/11-gap-2.md)): - Локальный классификатор «горячести» 0–3. Уровни 0–1 → канал A. Уровень 2 → канал B (пермиссивный). Уровень 3 (несовершеннолетние в сексуальном контексте) — **жёсткий отказ на уровне чанка**: чанк не переводится, помечается в отчёте, глава и книга продолжают обрабатываться (ложное срабатывание классификатора не должно убивать многочасовую оплаченную джобу). @@ -77,7 +79,7 @@ COGS (прямые ключи, **актуально — [experiments/08-cost-model-v2.md](../experiments/08-cost-model-v2.md)**, стек с grok-редактором; заменяет exp01-цифры): том ранобэ ja→ru стандарт **~$0.69**, 500-главная вебновелла zh→ru стандарт **~$10.94** (скачок от exp01 — целиком редактор: grok-выход ×9 против прежнего GLM/DeepSeek). Премиум (селективный apex ~15%): ранобэ ~$1.5, вебновелла ~$25; полный apex вебновеллы ~$82 (rf=1.0) — дешевле человеческого якоря $100, но переполняет $30-потолок → не дефолт. Маржа против прайсинга (Р9) остаётся высокой (том <$1); удар калибровки — по премиум-миксу вебновеллы, отсюда жёсткость правила «дорогая модель — адресно». ⚠ rf (Gemini thinking-as-output) НЕ измерен через OpenAI-compat слой — премиум-числа rf-условны до нативного Gemini API. -- **Prompt caching — главный рычаг**, и раскладка промпта фиксируется под него (разрешение конфликта Р3↔Р5 из ревью): **стабильный кэшируемый префикс** = системный промпт роли + book brief + style sheet + резюме книги/арок (меняется редко, раз в главу-арку); **волатильный хвост после кэш-брейкпоинта** = селективный глоссарий + STM + чанк. На стадии edit кэшу ловить почти нечего (уникальный черновик в промпте) — ожидаемый cache-hit считать по стадиям, а не «≥50% в среднем». Альтернатива для DeepSeek (cache-hit $0.0028/M): полный глоссарий в стабильном префиксе может оказаться дешевле селективной инъекции по miss-тарифу — решить расчётом на прототипе, обе схемы поддержать конфигом. +- **Prompt caching — главный рычаг** *(→ опровергнуто exp08: кэш ≈2% стоимости; ревизия D31)*, и раскладка промпта фиксируется под него (разрешение конфликта Р3↔Р5 из ревью): **стабильный кэшируемый префикс** = системный промпт роли + book brief + style sheet + резюме книги/арок (меняется редко, раз в главу-арку); **волатильный хвост после кэш-брейкпоинта** = селективный глоссарий + STM + чанк. На стадии edit кэшу ловить почти нечего (уникальный черновик в промпте) — ожидаемый cache-hit считать по стадиям, а не «≥50% в среднем». Альтернатива для DeepSeek (cache-hit $0.0028/M): полный глоссарий в стабильном префиксе может оказаться дешевле селективной инъекции по miss-тарифу — решить расчётом на прототипе, обе схемы поддержать конфигом. - **Батчуемость — свойство стадии**: Analyst, Terminologist, судья/оценки, книжный QA — батчуемы (−50%); черновик и редактура чанков — последовательны (STM/резюме создают зависимость, DelTA-паттерн). «С batch ≈$2» относится только к батчуемым стадиям. Batch API — Фаза 2 (к судье), не Фаза 0. - **Бюджет премиум-токенов на книгу**: полный проход премиум-моделью (историческая калибровка на Sonnet до его удаления: ~$92 за 500-главную вебновеллу, впритык к якорю GlobeScribe $100; двойной ~$185 — ломает экономику) не должен идти сплошняком. Принцип сохраняется для любой премиум-эскалации (Gemini 3.1 Pro): дорогая модель — только адресно по сигналу судьи/гейтов, в пределах $-потолка (формула ниже). - **Формула премиум-бюджета** (уточнение по запросу бэкенд-сессии, заменяет эвристику «≤2×»): в коде — конфигурируемый $-потолок на книгу, `premium_budget_usd = clamp(price_target × (1 − target_margin) − est_base_cogs, 0, hard_cap)`; для локального режима без прайса — дефолты под СЕЛЕКТИВНЫЙ apex ([exp08](../experiments/08-cost-model-v2.md)): ранобэ/роман ~$2 (полный apex жив), вебновелла — потолок-на-главу или явная `apex_fraction`; полный apex вебновеллы (~$82) дефолтом НЕ ставить (переполняет $30). «≤2× input-объёма» остаётся прикидочной эвристикой в доках, не контрактом кода. diff --git a/docs/architecture/02-mvp-plan.md b/docs/architecture/02-mvp-plan.md index 6dd43eb..7f3baeb 100644 --- a/docs/architecture/02-mvp-plan.md +++ b/docs/architecture/02-mvp-plan.md @@ -1,7 +1,7 @@ -# План MVP (v3.1, 2026-07-11) +# План MVP (v3.2, 2026-07-12) Цель MVP (бриф, п. 24): **бэкенд переводит целую книгу целиком** — консистентно, дёшево, с учётом стоимости. Интерфейс — CLI; HTTP API закладываем как тонкий слой (Фаза 3), IDE-фронт — после бэкенда. -v2 (04.07) — после адверсариального ревью синтеза. **v3 (09.07) — синхронизация с контрактом [`05-decisions-log.md`](05-decisions-log.md) (D1–D17) после стратегического ревью [`07-strategic-review.md`](07-strategic-review.md)**: сняты мёртвые приёмочные пороги, переписан интерим-18+, фазовые списки приведены к фактам. **v3.1 (11.07, D24/D25): приёмочная книга приведена к D18 (蛊真人 zh→ru; ja→ru — второй прогон), интерим-18+ к D19/D22, этап A приёмки выполнен.** При конфликте этого плана с D-логом — **источник истины D-лог**. +v2 (04.07) — после адверсариального ревью синтеза. **v3 (09.07) — синхронизация с контрактом [`05-decisions-log.md`](05-decisions-log.md) (D1–D17) после стратегического ревью [`07-strategic-review.md`](07-strategic-review.md)**: сняты мёртвые приёмочные пороги, переписан интерим-18+, фазовые списки приведены к фактам. **v3.1 (11.07, D24/D25): приёмочная книга приведена к D18 (蛊真人 zh→ru; ja→ru — второй прогон), интерим-18+ к D19/D22, этап A приёмки выполнен.** **v3.2 (12.07, D26–D31): качество-первым — этап B заморожен до читаемых 25 глав; редактор БИЛИНГВ (D30.1); дорожка: пакет D15.2 + exp13 + сид v2 → resnapshot → пере-прогон 25 глав → чтение владельца → этап B.** При конфликте этого плана с D-логом — **источник истины D-лог**. ## Дорожка данных (параллельно всем фазам, владелец + сессия «Полигон») @@ -14,22 +14,22 @@ v2 (04.07) — после адверсариального ревью синте ## Фаза 1 — Перевод целой книги (текущая; машинерия в основном построена) -**Построено** (журнал: вехи 1–2.5, шаги 3a–4 — с ревизии D31 в `../archive/PROGRESS-2026-07-04-10.md`): 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–2.5, шаги 3a–4 — с ревизии D31 в `../archive/PROGRESS-2026-07-04-10.md`): 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) *(→ флипнут D30.1: БИЛИНГВ, реализация в пакете D15.2 этап А)*; snapshotID покрывает память/context-assembly/capability (F1/D5.2/D8). **Осталось до приёмки Фазы 1:** - Фиксы границ доверия памяти (D16: полисемия, sticky-disposition, source-граница фонетики, ruby-alias) + лгущие комментарии resume + бамп edit `prompt_version` (D15.3). - `tmctl status` (read-only проекция + book manifest) и redrive флагнутых чанков (D12/D15.3). -- Дешёвые детерминированные гейты из 04-unhappy §6/§9: линтер тире-диалогов, ёфикатор, блок-лист транслит-междометий, число-гейт 万/億 (в D-логе «missed»-скоуп Фазы 1 — в план внесены v3). +- Дешёвые детерминированные гейты из 04-unhappy §6/§9 — ✅ ПОСТРОЕНЫ (cheapgates, v2 — D20.4); остались новые классы: **output-санитайзер (D30.3)** и диалог-флаггер парности (D29.1д) — оба в пакете D15.2. - Автопопуляция глоссария G1 (спот=локаль 8b / рендер=облако — дизайн из exp06) — минимум в объёме, достаточном для приёмочной книги; иначе сид руками + **чек-лист ja-книги: kana-написания сид-имён вносить aliases руками (D16.4)**. -- Реальный прогон end-to-end **приёмочной книги 蛊真人 zh→ru (D18; ja→ru понижен до второго прогона при появлении ja-epub)**. *(v3.1: этап A — 25 глав — ВЫПОЛНЕН 10.07, вердикт D24; этап B — срез ~300 глав после фиксов D24.3–4 и «да» владельца.)* +- Реальный прогон end-to-end **приёмочной книги 蛊真人 zh→ru (D18; ja→ru понижен до второго прогона при появлении ja-epub)**. *(v3.2: этап A ✅ 10.07 (D24); этап B ЗАМОРОЖЕН D26 до читаемых 25 глав — сначала пере-прогон кандидат-конфигом D30.9 с re-gate верности.)* - Режим онгоинга (`add-chapters`) — **сдвинут в Фазу 1.5**: гейтится resume-экономикой (D15.2 — content-addressed reuse чекпоинтов или селективный redrive; спека в Фазе 1, реализация Ф1.5). До этого онгоинг не продаётся. -- Экспорт txt/epub + отчёт (стоимость по стадиям, паспорт качества главы, журнал вклада, флаги). +- Экспорт txt/epub + отчёт — конкретизирован D29.1: `tmctl export` (ассемблер + annotations.json + нормализация выхода), политика красных, цвет-мап+GREY, паспорт-rollup, human_override LOCK; release-state лестница D25.1 — до первого reader-facing артефакта. **Интерим-правило 18+ (v3.1, до NSFW-роутера Фазы 2):** приёмочный корпус — только SFW. При `18+: да` в brief: канал B в составе **D19.1/D22 — переводчик-дефолт Mistral (18/18 чист на violence+эротике), эскалация grok-4.3 reasoning-ON (⚠ не на архаичном Хане — D22.5), local abliterated скрининг/фолбэк** (DeepSeek для explicit ЗАПРЕЩЁН его ToS — D14.1); судьи: эротика — только Grok (Gemini fail-closed `PROHIBITED_CONTENT` — D22.6, дублёр гейтится пробой), violence/SFW — Grok+Gemini; OpenAI в explicit-роутинг не включать; refusal-blacklist-гейт перед коммитом в TM обязателен (ветка `content_filter` мертва у OpenAI-совместимых — exp07; у Gemini 3.x жива составной строкой — D21.9). **L3-скрин обязателен до первой erotica-книги в проде (D22.7 + D25.4).** **Приёмка Фазы 1 (v3.1, по D11/D10/D1.1/D18/D24):** 1. SFW-книга **蛊真人 zh→ru (D18)** end-to-end этапами с чекпоинтами владельца (этап A 25 глав ✅ D24; этап B ~300 глав) с резюмируемостью; kill -9 → потеря максимум одного вызова. *(ja→ru том — второй прогон при появлении ja-epub.)* -2. **Деньги:** телеметрия точна (ledger корректно биллит grok reasoning=0 / cache-поля), эскалация уважает конфигурируемый `budget_usd`; мягкий sanity-якорь **~$0.7/ранобэ, ~$11/вебновелла-500** (exp08). Жёсткие пороги $0.6/$5 **сняты** (D11). +2. **Деньги:** телеметрия точна (ledger корректно биллит reasoning/cache-поля по квиркам провайдеров), эскалация уважает конфигурируемый `budget_usd`; мягкий sanity-якорь **~$0.7/ранобэ (до-флиповый exp08; после D30.1 ~$0.85 — D30.4; пере-съём exp08 v3)**. Жёсткие пороги $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-гейтом. @@ -52,7 +52,7 @@ v2 (04.07) — после адверсариального ревью синте ## Фаза 2.5 — Пилот 4 рук (решающая точка) -Протокол: `experiments/09-pilot-protocol.md` **+ обязательные поправки D13** (арм «моно vs билингв редактор same-model»; C2 на гетерогенных кандидатах; панель 2–3 семейства × 11+ повторов со свапом позиций, Bradley-Terry/медиана, grok не судит grok-выходы; пре-регистрация MDE и N≥3; харнесс чинится до прогона — эхо-стрип memory_eval, полные выходы, fidelity-ось; имена M0–M3 для memory-режимов). Решения пилота: ядро C0–C3, go/no-go ставки памяти (банк vs длинный контекст + adversarial-рука), валидность LLM-судьи (κ vs IAA, s*), think-ON/OFF (вкл. grok после reasoning-буфера в EstimateUSD), D1 моно-vs-билингв, Annotator A/B, flag-rate G2 (первый замер человеческой ёмкости). 2–3 главы 18+ в корпусе — замер отказов по ролям (вкл. пробу Mistral, D14.2). +Протокол: `experiments/09-pilot-protocol.md` **+ обязательные поправки D13** (арм «моно vs билингв редактор same-model»; C2 на гетерогенных кандидатах; панель 2–3 семейства × 11+ повторов со свапом позиций, Bradley-Terry/медиана, grok не судит grok-выходы; пре-регистрация MDE и N≥3; харнесс чинится до прогона — эхо-стрип memory_eval, полные выходы, fidelity-ось; имена M0–M3 для memory-режимов). Решения пилота: ядро C0–C3, go/no-go ставки памяти (банк vs длинный контекст + adversarial-рука), валидность LLM-судьи (κ vs IAA, s*), think-ON/OFF (вкл. grok после reasoning-буфера в EstimateUSD), D1 моно-vs-билингв *(→ D30.1: решён досрочно exp12, арм остаётся ПОДТВЕРЖДАЮЩИМ)*, Annotator A/B, flag-rate G2 *(первый замер сделан этапом A: 5.3% — D24; в пилоте — minutes/flag, D25.6)*. 2–3 главы 18+ в корпусе — замер отказов по ролям (вкл. пробу Mistral, D14.2). Побочная ценность: человеческие BWS-данные zh/ja→ru — уникальный актив (академия пары не покрывает, WMT-лит. трек мёртв с 2024). ## Фаза 3 — Продуктовизация (после MVP) diff --git a/docs/architecture/03-implementation-notes.md b/docs/architecture/03-implementation-notes.md index 0daed7b..75aaf5a 100644 --- a/docs/architecture/03-implementation-notes.md +++ b/docs/architecture/03-implementation-notes.md @@ -1,5 +1,7 @@ # Заметки реализации (сессия «Бэкенд», 2026-07-04) +> **⚠ Точка-во-времени 04.07 (ревизия D31).** §3-контракты Фазы 0 — живой референс бэкенда (request_hash охраняется golden-гардом D23); §5 «[НУЖНО РЕШЕНИЕ]» — все пункты развязаны D-логом (премиум-бюджет → D11/exp08; TM-политика → Р6/D-лог; канал B → D14.1/D19.1; стриминг → keep-alive Ф2); онлайн-факты §3.9 датированы 04.07 — цены/слаги сверять с models.yaml/quirks. + Вердикт шага 0 — перевалидации решений v2 глазами реализатора перед Фазой 0. Метод: собственное чтение донорского кода vojo + воркфлоу из 4 критиков (линзы: консистентность доков, исполнимость в Go, сверка с донором построчно, онлайн-фактчек цен/API; ~940k токенов, находки ниже отобраны и объединены). @@ -65,7 +67,7 @@ ### 3.2 Snapshot контекста джобы Материализованная запись с собственным `snapshot_id`: `brief_hash`, версии промпт-шаблонов per-role, -model+sampling per-role, версия чанкера, зафиксированное состояние approved-глоссария (версия-счётчик), +model+sampling per-role, версия чанкера, зафиксированное состояние approved-глоссария (версия-счётчик) *(→ superseded D8: content-hash материализации, НЕ счётчик — drift-proof; реализовано, memory_f1_test)*, style sheet, резюме книги/арок на момент старта джобы. **STM в snapshot не входит** — он детерминированно пересобирается из чекпоинтов. Батч-подтверждение терминов (Фаза 1) применяется только на границе джоб. diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 0c55153..cf63fa0 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,9 @@ -# Журнал решений оркестратора — развязки перед Фазой 1 (2026-07-04) + пост-ревью D13–D17, ратификации пакетов и D18–D21 (2026-07-09) +# Журнал решений оркестратора — контракт D1–D31 (развязки 04.07 · пост-ревью и пакеты 09–10.07 · приёмка и качество-первым 11–12.07) + +> **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, 12.07; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: +> - **Полностью superseded:** **D1 (моно-редактор) → D17 → D30.1 (редактор БИЛИНГВ)** · D9 (ja-приёмка) → D18 (蛊真人 zh→ru; ja — второй прогон) · D17 → D30.1 · скобка D19.4 «ключ без data-sharing» и D20.3 «чистый ключ = блокер пилота» → **D27** (единый ключ С data-sharing, отключение перед продом) · exp04-дефолт «editor grok-4.3» (D3) → D30.1 (grok reasoning-off из редакторских ролей СНЯТ — no-op; кандидат glm-5-билингв; gemini — премиум-эскалация только за санитайзером D30.3). +> - **Частично амендировано:** D3 (канал B → D14.1/D19.1 + оговорки D22.5/D22.6; апекс-слаг `-preview` — D22.4; draft под вопросом exp13 — D30.6) · D6 («off/minimal для draft/edit» эродирован: draft thinking-ON принудительно, editor-off снят D30.1; живы per-роль принцип и D6.2-буфер) · D10 (+D24.2 alias-слепое пятно, истинная консистентность ≈99.5%) · D11-числа → exp08 → **D30.4** (флип D1 = +15–25%, ~$0.85/ранобэ; «$1.5–2» = неподписанная опция Б) · D12 (+D24.3 флоры max_tokens; +D29.1в rollup — амендмент вердикт-правила) · D13.1-арм из решающего → ПОДТВЕРЖДАЮЩИЙ (D30.1); +D25.3 prefix-анализ судьи · D14.2 закрыт D19.1/D22.4; D14.4 закрыт D22.1 · D15.3 исполнен; спека D15.2: v2→v3→v3.1 (D22.2), реализация = текущий пакет (D30.9) · D24.4 +D28.1 (precision/recall-трейдофф; hard-gate требует пере-замера) · порядок D24.5 отложен D26.1 (этап B — после читаемых 25 глав). +> - **Живое ядро без изменений:** D2 (+новый гейт-класс D30.3), D4, D5, D7, D8, D10-механизм, D12-таксономия отказов, D16, D18, D19.1–19.2, D21 (Ф2-механизмы voice/address/reveal), D22.5–22.7, D23 (golden = инвариант №8), D24–D31 — действующая голова контракта. Ответ на вопросы бэкенд-сессии (PROGRESS §«Вопросы от бэкенда», §«[НУЖНО РЕШЕНИЕ] перед Фазой 1» — с ревизии D31 в `archive/PROGRESS-2026-07-04-10.md`) и полигона (think-режим). Каждое решение прошло адверсариальную панель из 3 критиков (research / экономика / исполнимость в коде Фазы 0); ни одно не отклонено, все уточнены. Это **контракт Фазы 1** — бэкенд исполняет отсюда; при конфликте с буквой 01-decisions/02-mvp-plan — источник истины здесь (потом сольём в основные доки). diff --git a/docs/architecture/06-memory-risk-registry.md b/docs/architecture/06-memory-risk-registry.md index 2a634c2..28668e9 100644 --- a/docs/architecture/06-memory-risk-registry.md +++ b/docs/architecture/06-memory-risk-registry.md @@ -1,5 +1,7 @@ # Реестр рисков банка памяти (v1, 2026-07-04) +> **Дополнение (ревизия D31, 12.07):** (1) **Alias-слепое пятно post-check (D24.2, найдено ревью приёмки этапа A):** вложенный алиас внутри longest-match полного имени невидим флаггеру — 古月方源 отрендерен раздельно «гу юэ» при dst-родителе в тексте → промах не фаерится; истинная консистентность этапа A ≈99.5%, не 100%; класс редкий (~1/190 поверхностей), фикс в Ф1 не заказан, учитывать в методике D10-пересчётов. (2) G2 «flag-rate×throughput не смоделирован» — частично закрыт: первый замер на реальной книге = 5.3% (3/57 чанков), концентрация 2/25 глав (D24); minutes/flag — в пре-регистрацию пилота (D25.6). (3) Precision/recall post-check — амендмент D28.1: union базовой формы = трейдофф, hard-gate флип требует пере-замера recall. + Выход сессии **«Валидация банка памяти»** (промт `docs/archive/prompts/MEMORY_RESEARCH_SESSION_PROMPT.md`). Это **вход для бэкенд-сессии перед фиксацией схемы store/глоссария Фазы 1** (шаг 4 «миграция памяти v2» держится до этого реестра — §Память (с D31 в `../archive/PROGRESS-2026-07-04-10.md`), D7). Метод: многоагентный ресёрч по 7 направлениям + независимая адверсариальная верификация каждой находки по первоисточникам + локальный эмпирический бенчмарк retrieval на реальном PD-корпусе (`eval/retrieval_bench.py`, `eval/data/retrieval_bench/`) + чтение реального кода `backend/`. Полный разбор с источниками и датами — `docs/research/13-memory-bank-validation.md`. Продуктовый код здесь не пишется — реестр описывает требования к нему. diff --git a/docs/architecture/07-strategic-review.md b/docs/architecture/07-strategic-review.md index c9ca351..cdf4789 100644 --- a/docs/architecture/07-strategic-review.md +++ b/docs/architecture/07-strategic-review.md @@ -1,5 +1,7 @@ # 07 — Стратегическое ревью архитектуры (2026-07-09) +> **⚠ Точка-во-времени 09.07 (ревизия D31, 12.07).** Аудит корректен на свою дату; с тех пор ключевые вердикты РАЗВЯЗАНЫ: «напряжение №1» (моно-редактор D1) — разрешено флипом D30.1 (билингв; налог на верность материализовался как ПАССИВНОСТЬ моно-редактора, exp12); экономика «редактор 83–90% на grok» — пересчитывается (D30.4: флип +15–25%, кандидат glm-5-билингв; exp08 v3 заказан); G2 «не смоделирован» — первый замер сделан (5.3%, этап A, D24); resume-мина — реализация D15.2 идёт (D30.9); 18+ эмпирика — закрыта (D22.1); «чистый ключ» — снят (D27). §6–9 читать вместе с картой актуальности в шапке D-лога. + **Мандат:** `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-корпус не открывался.