diff --git a/docs/POLYGON_PACKAGE4_SESSION_PROMPT.md b/docs/POLYGON_PACKAGE4_SESSION_PROMPT.md index 46a8c4ba..1b6e85a7 100644 --- a/docs/POLYGON_PACKAGE4_SESSION_PROMPT.md +++ b/docs/POLYGON_PACKAGE4_SESSION_PROMPT.md @@ -1,12 +1,12 @@ # Промт: полигон-сессия, пакет №4 — сид этапа B + fix-лист D22.8 + задачи D25 (2026-07-11) > **⚠ СТАТУС (оркестратор №4, D36.1, 12.07) — НЕ архивирован, ЧАСТИЧНО отработан, residual ЖИВ.** -> Как отдельная сессия пакет №4 **НЕ запускался**. Отработана только **Задача 1 (сид-мн.ч.)** — влита в сид v2 внутри exp13 (D32, `guzhenren-seed-v2.yaml`). **Открыто (пилот/18+/echo-трек — ОРТОГОНАЛЬНО текущему exp14, НЕ вносить в него):** -> - **Задача 2 (fix-лист D22.8):** (а) content-filter матчер подстрокой + самотест; (б) параметризация языка/жанра `explicit_judges.py`; (в) **миграция судьи `memory_eval.py` с gemini-2.5-flash** (EOL 16.10.2026 — `00-provider-quirks.md:72`); **(ж) проба судьи-дублёра 18+ (D22.6) — НАЗВАННЫЙ БЛОКЕР ПИЛОТА** (`09-pilot-protocol.md`, CURRENT-STATE). +> Как отдельная сессия пакет №4 **НЕ запускался**. Отработана только **Задача 1 (сид-мн.ч.)** — влита в сид v2 внутри exp13 (D32, `guzhenren-seed-v2.yaml`). **Открыто (пилот/18+/echo-трек — ортогонально бэкенд-курсу, в паки НЕ вносить):** +> - **Задача 2 (fix-лист D22.8):** (а) content-filter матчер подстрокой + самотест; (б) параметризация языка/жанра `explicit_judges.py`; (в) **миграция судьи `memory_eval.py` с gemini-2.5-flash** (EOL 16.10.2026 — `00-provider-quirks.md:74`); **(ж) проба судьи-дублёра 18+ (D22.6) — НАЗВАННЫЙ БЛОКЕР ПИЛОТА** (`09-pilot-protocol.md`, CURRENT-STATE). > - **Задача 3 (D25):** echo-калибровка (D25.7); дополнения пре-регистрации пилота (D25.2/25.6/25.8 → `09-pilot-protocol.md`); minimal-pairs shadow fidelity (совместить с корпусом пилота). > - **Задача 4 (D21.9):** P4 fidelity-хвост (35 пар); wire-аудит темп-свипа; D22.8-минорки (U+FF70 kana, append-only провенанс, judge-raw). > -> **Порядок:** это ПИЛОТ-трек, downstream от текущей качественной развязки (exp14). При активации пилота — переупакую residual в свежий пилот-преп-промт (или гони отсюда, слаги судей — live-фактчеком `/models`). **exp14 (`POLYGON_QUALITY_EMPIRICS_SESSION_PROMPT.md`) — приоритетнее.** 18+: только существующие артефакты `eval/data`, счётчики/метаданные в отчёт. +> **Порядок (обновлено 25.07, пост-D39.22):** это ПИЛОТ-трек, downstream текущего курса «разработка бэкенда» (эксп пере-прогона ЗАКРЫТ D39.22; exp14 закрыт D37, его промт в архиве). При активации пилот-препа — переупакую residual в свежий промт (или гони отсюда, слаги судей — live-фактчеком `/models`); судья-дублёр 18+ (п.2ж) остаётся НАЗВАННЫМ БЛОКЕРОМ пилота. Гигиена D39.20: авто-QA слепых пакетов ключевать слепыми метками. 18+: только существующие артефакты `eval/data`, счётчики/метаданные в отчёт. --- diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 86fd04c8..9f47f3b9 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,15 +1,19 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-07-19, пост-D39.16). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.16); этот файл — ЖУРНАЛ.** +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-07-25, пост-пак-16/D39.25; буллеты эры exp15/16 ниже — хроника, их «очереди» исполнены записями ниже). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.25); этот файл — ЖУРНАЛ.** > - **Фазы:** 0 ✅ · Ф1-инфра ✅ (D20–D28; golden = инвариант №8) · арка «качество-первым» D26→D38.5 ЗАКРЫТА (хроника — `archive/PROGRESS-2026-07-10-13.md`; итог: потолок в организации, не в моделях). **АРХ-РЕСЕТ D39 (13.07):** синк-аудит «сломанного телефона» (65 находок / 0 refuted — `architecture/08-sync-audit-ledger.md`) → целевая 7-слойная архитектура + фазовый план (`architecture/09-target-architecture.md`); инвариант общности §0.1 (любая книга/пара/структура); промпт-тема консолидирована в `architecture/10-prompt-architecture.md`. > - **Трек A (build-now) ЗАКРЫТ:** пак-1 (D39.2, `d3f6b34`: trust-gated suppressor [терм-дрейф закрыт в КОДЕ] · export-contract нормализация · pair-сеам `prompts:{zh-ru}` fail-loud · реестр role→инъекция · target-гейты · quality-report) + пак-1.5+F1–F9 (D39.5, `dc30c7d`: `tmctl export` [manifest-join+drift-гард; полигон-экстракция впредь ТОЛЬКО через него] · fold-first санитайзер [HIGH-обход закрыт] · bounded глосс-whitelist · пример zh→ru). Адверсариал-долг 529 погашен (D39.4: 8 осей, 0 CRIT/1 HIGH/6 MED — всё в фикс-листах/ledger). > - **Трек B (ресёрч) ЗАЛЕНДЕН:** research/19 нарезка+когезия+контракт t/e+волны W0–W3 (D39.1; конфликт exp14↔research/18 разрешён: эмиссия≠окно≠связность) · research/20 банк-майнинг W1.5 (D39.6; детектор-лестница V-A/B/C, алиас-ярусы, banknote-v1, плагины P1–P6, §D-пре-рег; конфаунд инъекции ⇒ cold-start срез). > - **exp15 ЗАВЕРШЁН И ЗАЛЕНДЕН (D39.7, `fe34a16`):** «граница вредит» отозван (артефакт окна судьи, свинг +0.689 после фикса), все когезия-эффекты под шум-полом 0.126, «sequential нигде не лучше» (LOO-stable, НЕ ратифицированный зелёный свет волне), фертильность 1.20·cjk+0.39·other; $12.79/$15. **Слепое чтение ИСПОЛНЕНО (D39.8):** планка не пройдена никем, дефекты распределены по армам (читатель подтвердил floor-null; V2-брак = риг без гейтов, не carryover-рычаг) → битва качества пере-прогона = дефект-классы (时辰-юниты · числа b1 · gender-enforce · стих/аллюзии · регистр-лексикон), не нарезка. **Q4a ИСПОЛНЕН И ЗАЛЕНДЕН (D39.9, $1.32/$2):** верность НЕ покупается на translate-стадии (flash уже верен 25/0/27; pro ×3.67 не ратифицирован); смысл ломает glm-РЕДАКТОР (свап glm→mistral/deepseek-pro = приоритетный арм пере-прогона); exp14b-правила дефектны → $0-ре-аудит в exp16. **exp16 ИСПОЛНЕН И ЗАЛЕНДЕН (D39.10, $0.02/$10):** WHICH подтверждена (код-детектор V-C recall 0.97 held-out, $0) / WHAT опровергнута для ко-оккуренции → dst-канал = банкнота (идея владельца оправдана) + облако+Палладий; 9B-споттер не нужен (0.895 ≤ код); Z1 → облако; ре-аудит exp14b: ядро D38 держится, errata не нужна. Тачпойнты владельцу: карта подписи (пол) · мини-голд алиасов · precision@30 (books/gu-zhenren/exp16/). **Исследовательская программа ЗАВЕРШЕНА.** **Директива владельца (D39.11): стройка ТОЛЬКО после ДИЗАЙН-СИНТЕЗ сессии.** **План РАТИФИЦИРОВАН (D39.12, `architecture/11-implementation-plan.md`)** — три рубежа верификации, 4 гейтнутых арма. **Пак-11 (единой сессией, блоками):** ✅ Block A (D39.13: output-чанкер+edit-единицы+src→dst-редактор [закрытие D30.1]+eager-clients+rate-guard+base/enriched+банкнота-ядро) · ✅ continuation (D39.14: Go-майнер паритет-EXACT+банкнота-12-точек+DC-чекеры+`export --pairs`+арм-конфиги+волновой снапшот-аддитив; рубеж-2-долг погашен, clean bill, фикс-лист FL-1/2/3) · ✅ **арх-проход (D39.16: язык-данные майнера → `internal/lang`+`configs/langpacks/` байт-точно [парити EXACT, golden байт-идентичен], граница компиль-enforced; `x/text/language.Tag` ОТВЕРГНУТ [CLDR-инстабильность в вердиктах]; DC-чекеры/снапшот-фолд DEFER [майнер offline/нейтральность]; FL-1/2/3 залендены).** **Очередь:** R1 драйвер-свитч (волновой исполнитель W1/W1.5/W2 + структурный golden-рерайт + фолд `pack.Version()`/загрузка langpack при wiring майнера живым; промт `BACKEND_PLAN11_SESSION_PROMPT.md` АКТИВЕН + `backend/PACK11_CONT_REPORT.md §R1`) → приёмка → единый resnapshot (D30.9, §8-манифест) → пере-прогон 3–10 глав (армы glm/mistral/deepseek-pro) → чтение владельца (интерим-планка 2 претензии, D35). ja→ru-реплика = тест общности §B5 (DEFER-чекеры едут туда). 残: POLYGON_PACKAGE4 residual-трекер (пилот/18+/echo — отложен, D36.1); ре-чек прайса DeepSeek 24.07. -> - **Стек (не менялся с D38.5):** draft deepseek-v4-flash (thinking ON) → editor glm-5 БИЛИНГВ v3-discourse (P1a+чэнъюй+few_shot-тумблер; свап-кандидаты mistral/deepseek-pro = армы пере-прогона) → судья gemini-3.1-pro-preview; канал B Mistral+grok; 7 ключей; ~$0.85/ранобэ (D30.4). +> - **Стек:** draft deepseek-v4-flash (thinking ON) → **editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (D39.22; glm-5 резерв, mistral вон D39.20)**, промпт v3-discourse (P1a+чэнъюй+few_shot-тумблер) → судья gemini-3.1-pro-preview; канал B Mistral+grok; 7 ключей; ~$0.85/ранобэ (D30.4). > - **Ждём от владельца:** тачпойнты exp16 (карта подписи/пол · мини-голд алиасов · precision@30, `books/gu-zhenren/exp16/`, ~30–40 мин — для сид-дельты к пере-прогону) · развилки плана §10 (W1.5-UX · DC5-стих-политика · Edit-ceiling · и др.) · реплика ja→ru (тест общности §B5) · **ре-чек прайса DeepSeek у катовера слагов 24.07** (до него платных deepseek-прогонов нет) · чтение пере-прогона (после R1+resnapshot) · старые висящие: планка запуска (лучше-фана/гибрид/издательский) · билингв-якорь пилота (D25.9-Q1) · контаминация пилот-корпуса (D27.4) · publishable/waiver (D25.1) · FN-bound L3 (D25.4) · юр-пакет · провенанс 12-*-доков. -> - **ОТКРЫТЫЕ ПЕТЛИ (норма 25.07, перепись 180 инцидентов: класс NEVER_CLOSED больше не копим — каждая петля обязана получить диспозицию решено/отложено-с-записью/отклонено; ведёт оркестратор).** *Владелец:* мини-каноны сид-дельты — 元-корень (предложение «изначальн-») и 春秋蝉 (подписано «Весенне-осенняя цикада», ждёт подтверждения) · **включение платной петли ремонта — по замеру остатка на пост-профилактическом прогоне (D39.24; заменил mini-live гейт D6)** · ja→ru-реплика §B5 (тайминг) · старые Ф2.5-блокеры (билингв-якорь — D25 п.9 Q1 · контаминация корпуса — D27 п.4 · судья-дублёр D22.6 · планка запуска · publishable/waiver — D25 п.1 · FN-bound L3 — D25 п.4 · юр-пакет · xAI-ключ off перед продом D27). *Оркестратор:* ~~ратификация дизайна пака-16~~ РЕШЕНО D39.24 (25.07) · фантом-гард D-ссылок в чек-листе лендинга (действует) · **doc-sync pass (аудит владельца 25.07):** puml-диаграммы от 12.07 — ДО арх-ресета (нет волн/сплита пакетов/петли/лейблов) — перерисовать под текущую архитектуру (НЕ рендерить) · свип ресёрч-баннеров «→ построено паком-N» (research/19 чанкер → пак-11; research/20 майнинг → паки 11/13; промпт-выводы → пак-15) · статус-баннеры на 02-mvp-plan/03-implementation-notes (10/11 — проставлены 25.07). *Бэкенд:* ~~пак-16 ф.2~~ ЗАЛЕНДЕНА 25.07 · per-class исходы ремонта — схемное решение (класс не durable), принимается ВМЕСТЕ с включением петли · ниты общности (владелец 25.07, хвост ближайшего пака): Detail-строки чекеров → шаблоны/цитаты из данных (статический 时辰-текст в generic-файле соврёт второй паре) · множитель ×2 `lintTimeUnits` (`checkers.go:174`) → ключ данных. *Полигон (residual):* нет новых. +> - **ОТКРЫТЫЕ ПЕТЛИ (норма 25.07, перепись 180 инцидентов: класс NEVER_CLOSED больше не копим — каждая петля обязана получить диспозицию решено/отложено-с-записью/отклонено; ведёт оркестратор).** *Владелец:* мини-каноны сид-дельты — 元-корень (предложение «изначальн-») и 春秋蝉 (подписано «Весенне-осенняя цикада», ждёт подтверждения) · **включение платной петли ремонта — по замеру остатка на пост-профилактическом прогоне (D39.24; заменил mini-live гейт D6)** · ja→ru-реплика §B5 (тайминг) · старые Ф2.5-блокеры (билингв-якорь — D25 п.9 Q1 · контаминация корпуса — D27 п.4 · судья-дублёр D22.6 · планка запуска · publishable/waiver — D25 п.1 · FN-bound L3 — D25 п.4 · юр-пакет · xAI-ключ off перед продом D27). *Оркестратор:* ~~ратификация дизайна пака-16~~ РЕШЕНО D39.24 (25.07) · фантом-гард D-ссылок в чек-листе лендинга (действует) · ~~doc-sync pass~~ **ИСПОЛНЕН 25.07** (запись ниже: оба puml перерисованы под пост-пак-16 · баннеры на 01/02/03/04/06/07/08/09 · ресёрч-свип 18/18c/19/20/21/22 · README/POLYGON_PACKAGE4 освежены; residual — пинги полигону в его зоне) · приёмка пака-17 фаза 1 (когда придёт отчёт: эхо-блок сразу, ратификация пропорционально). *Бэкенд:* ~~пак-16 ф.2~~ ЗАЛЕНДЕНА 25.07 · per-class исходы ремонта — схемное решение (класс не durable), принимается ВМЕСТЕ с включением петли · ниты общности (владелец 25.07, хвост ближайшего пака): Detail-строки чекеров → шаблоны/цитаты из данных (статический 时辰-текст в generic-файле соврёт второй паре) · множитель ×2 `lintTimeUnits` (`checkers.go:174`) → ключ данных. *Полигон (residual):* **6 пингов doc-sync аудита 25.07 (зона `docs/experiments/` — оркестратор не правит):** (1) `00-provider-quirks.md:13,73` — катовер deepseek-chat 24.07 ПРОШЁЛ, пост-катовер факт (жив ли алиас, цены) не внесён — live-проба `/models` + вендор-дока; (2) `00-provider-quirks.md:69` — оговорка «mistral-editor-арм до guard» superseded D39.20 (mistral вон из редакторов; rate-limit-цифры оставить — нужны переводчику канала B пака-17); (3) `09-pilot-protocol.md:3` — ⚠-указатель застрял на D31/glm-5: продлить до пост-D39.22 (dspro-интерим · планка ≤2 не пройдена rerun2 · авто-QA слепыми метками D39.20 · стайл-каноны D39.21), тело не трогать; (4) `15-segmentation-empirics.md:6-7` — шапка до сих пор «НИ ОДНОГО платного вызова», а эксп залендён REV.2 (D39.7/D39.8, $12.79) — перевернуть статус-блок; (5) `16-bank-mining.md:3` — дописать финал «ИСПОЛНЕН И ЗАЛЕНДЁН (D39.10); gender-тачпойнт §7 закрыт (D39.19); продолжение — Go-майнер парити EXACT»; (6) `experiments/README.md` — индекс без строк exp15/16 (сверка застряла на D38.2). > - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `archive/PROGRESS-2026-07-10-13.md` (D39.6-гигиена). Записи ниже — живая эра D39. +## Оркестратор №7 — DOC-SYNC PASS ИСПОЛНЕН (аудит владельца 25.07): puml перерисованы, 14 доков синканы с D1–D39.25, 6 пингов полигону, 25.07 + +Метод: 6-агентный аудит-воркфлоу (код-реальность для диаграмм + сверка каждого стейл-дока с D-логом/кодом, всё file:line) → мои спот-чеки несущих клеймов исполнением (6/6 сошлись: «F1 CLOSED» `snapshot.go:177` · `Escal.Chains` без потребителей в раннере · repair отсутствует в c1 = disabled · STM-кнобы удалены · tmctl-команды · `RepairCandidates` `checks/repair.go:71`) → правки моими руками. **Диаграммы:** `components.puml`/`pipeline.puml` перерисованы с нуля под пост-пак-16 реальность (волновой исполнитель · сплит пакетов пака-15 · снапшоты per-wave/BASE-ENRICHED · майнинг-стоп exit 3 · repair-петля [FLAG] · конфиг-слои данными · generic-лейблы D39.25 как план пака-17; НЕ рендерились — смотреть расширением). **Статус-баннеры (тела НЕ переписаны, дисциплина D23.3):** 01-decisions (dspro-интерим, xAI-концентрация распалась, Р4→D39.25) · 02-mvp-plan (дорожка v3.2 исполнена через арх-ресет) · 03-implementation-notes (география §3 перечёркнута сплитом; техдолг §6: clients-гонка/F4/F3 закрыты) · 04-unhappy-paths (чекеры/ремонт построены, карта сработала как ТЗ — дефект-классы rerun2 легли в её клетки) · 06-memory-risk-registry (банк ПОСТРОЕН, G1 закрыта иначе — майнер+банкнота без LLM-споттера; F1-остаток закрыт inline) · 07-strategic-review (курс исполнен) · 08-sync-audit-ledger (аудит отработан, диспозиции закрыты стройкой) · 09-target-architecture (таблица «слой → статус → пак/D»; врезка слоя 2 продлена до паков 14/15). **Ресёрч-свип «→ построено»:** 18/18-chatgpt (editor v3, арка закрыта) · 19 (чанкер/волны/exp15) · 20 (майнер/банкнота, гейт §D снят) · 21 (DEFER снят паком-12; Q7-абсорбция по-прежнему за вендор-сверкой) · 22 (Q6 gating+repair закрыт паком-16); research/15 честен — не тронут. **Освежены:** docs/README (D-диапазон D39.25, exp12–16 в карте, archive/reports описан, статус 25.07, пак-17 ЗАПУЩЕН) · POLYGON_PACKAGE4-баннер (пост-D39.22 рамка, quirks-ссылка :74). Зона полигона не тронута — 6 пингов в трекере петель. Верификация: все баннер-клеймы грунтованы file:line аудиторами + мои спот-чеки; спорных inline-правок тел — две (F1-строка в 06, врезка слоя 2 в 09), обе high-confidence по коду. + ## Оркестратор №7 — промт пака-17 «канал B вживую» ВЫДАН (двухфазный: дизайн B1–B6 → ратификация → стройка), 25.07 Последний несущий кусок бэкенда перед следующим платным прогоном (прогон разом даст: итерация №2 dspro-vs-glm · замер остатка дефектов → решение о петле ремонта · живой канал B). Дизайн-вопросы: гранулярность adult-маркировки (приор: ручная, книга/главы, данные книги) · **редактор канала B** (dspro НЕЛЬЗЯ — DeepSeek вне 18+ по ToS; выбор интерим до замера) · refusal-каскад в лестнице эскалации · механическая гарантия «adult → только permissive» (флаг провайдера = данные models.yaml) · снапшот/резюм · отчётность. Инварианты: L3 — жёсткая линия (классификатор НЕ строится, спека D22.7 ждёт владельца) · live 18+ только по санкции · синтетические фикстуры · байт-точность канала A. Хвостом фазы 2 — ниты общности из петель. diff --git a/docs/README.md b/docs/README.md index a2ee8981..d65771fb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,17 +11,17 @@ ## Структура -- `architecture/` — синтез. **Источник истины по решениям — [`05-decisions-log.md`](architecture/05-decisions-log.md) (D1–D39.22+); при конфликте с любым доком он выше.** - - `01-decisions.md` — принципы Р1–Р10; `02-mvp-plan.md` — фазы и приёмка (v3, 09.07); `03-implementation-notes.md` — контракты Фазы 0; `04-unhappy-paths.md` — ~70 режимов отказа → механизм; `06-memory-risk-registry.md` — реестр рисков банка памяти; **[`07-strategic-review.md`](architecture/07-strategic-review.md) — стратегический аудит (09.07): вердикт end-to-end, топ-риски, курс-коррекции**; **[`08-sync-audit-ledger.md`](architecture/08-sync-audit-ledger.md) — верифицированный ледджер синк-аудита «сломанного телефона» (65 находок, D39)** · **[`09-target-architecture.md`](architecture/09-target-architecture.md) — целевая 7-слойная архитектура + фазовый план арх-ресета (D39; инвариант общности §0.1)** · [`10-prompt-architecture.md`](architecture/10-prompt-architecture.md) — консолидированная промпт-заметка (концерн 4); **[`11-implementation-plan.md`](architecture/11-implementation-plan.md) — РАТИФИЦИРОВАННЫЙ план стройки пере-прогонного стека (D39.12; дизайн-оф-рекорд бэкенд-пака, три рубежа верификации)**; `components.puml`/`pipeline.puml` — диаграммы v3 (владелец смотрит PlantUML-расширением VS Code; вручную НЕ рендерить). -- `experiments/` — эмпирика «Полигона»: `00-provider-quirks` (читать перед любым вызовом провайдера), `01-token-calibration`, `02-refusal-benchmark`, `03-local-stand`, `04-editor-quality`, `06-local-extraction`, `07-coverage-precision`, `08-cost-model-v2` (актуальная денежная модель), `09-pilot-protocol` (пилот Ф2.5 + поправки D13), `10-explicit-benchmark` (18+ violence-рука канала B), `11-erotica-benchmark` (erotica по трём парам/регистрам — закрытие D14.4, D22). +- `architecture/` — синтез. **Источник истины по решениям — [`05-decisions-log.md`](architecture/05-decisions-log.md) (D1–D39.25); при конфликте с любым доком он выше.** + - `01-decisions.md` — принципы Р1–Р10; `02-mvp-plan.md` — фазы и приёмка (v3, 09.07); `03-implementation-notes.md` — контракты Фазы 0; `04-unhappy-paths.md` — ~70 режимов отказа → механизм; `06-memory-risk-registry.md` — реестр рисков банка памяти; **[`07-strategic-review.md`](architecture/07-strategic-review.md) — стратегический аудит (09.07): вердикт end-to-end, топ-риски, курс-коррекции**; **[`08-sync-audit-ledger.md`](architecture/08-sync-audit-ledger.md) — верифицированный ледджер синк-аудита «сломанного телефона» (65 находок, D39)** · **[`09-target-architecture.md`](architecture/09-target-architecture.md) — целевая 7-слойная архитектура + фазовый план арх-ресета (D39; инвариант общности §0.1)** · [`10-prompt-architecture.md`](architecture/10-prompt-architecture.md) — консолидированная промпт-заметка (концерн 4); **[`11-implementation-plan.md`](architecture/11-implementation-plan.md) — РАТИФИЦИРОВАННЫЙ план стройки пере-прогонного стека (D39.12; дизайн-оф-рекорд бэкенд-пака, три рубежа верификации)**; `components.puml`/`pipeline.puml` — диаграммы (перерисованы 25.07 под пост-пак-16 реальность: волновой исполнитель, пакетный сплит пака-15, repair-петля за `enabled:false`, generic content-labels D39.25; владелец смотрит PlantUML-расширением VS Code; вручную НЕ рендерить). +- `experiments/` — эмпирика «Полигона»: `00-provider-quirks` (читать перед любым вызовом провайдера), `01-token-calibration`, `02-refusal-benchmark`, `03-local-stand`, `04-editor-quality`, `06-local-extraction`, `07-coverage-precision`, `08-cost-model-v2` (актуальная денежная модель), `09-pilot-protocol` (пилот Ф2.5 + поправки D13), `10-explicit-benchmark` (18+ violence-рука канала B), `11-erotica-benchmark` (erotica по трём парам/регистрам — закрытие D14.4, D22), `12-quality-diagnosis`/`13-translator-bakeoff`/`14-quality-empirics`/`14b-meaning-battery` (дуга качества «мерить→строить», закрыты → D30/D32/D37/D38), `15-segmentation-empirics` (exp15: когезия под floor-шумом, фертильность — закрыт → D39.7/D39.8), `16-bank-mining` (exp16: WHICH/WHAT банк-майнинга — закрыт → D39.10). - `research/` — фактура исследований 04–05.07: `01–10` базовые, `11-gap-*` добор критиком, `12-*` режимы отказа/отзывы/таксономии (+ два внешних материала с провенанс-шапками), `13` валидация памяти, `14` адаптивная память, `15` голос и состояние (принят, D21), **`16` ридер-IDE (принят с ревью-шапкой, D29)**, **`17` внешняя критика GPT-5.6 (принят с ревью-шапкой, D25)** — у 16/17 читать шапку прежде тела. **`18` рычаги качества (два отчёта, D36)** · **`19` нарезка+когезия+контракт t/e (D39.1)** · **`20` банк-майнинг W1.5 (D39.6)** · **`21` обзор LLM-транспорта чужих харнессов (23.07: наш транспорт опережает/вровень со всеми 11)** · **`22` доменные харнессы перевода (24.07: калибрующий — ядро подтверждено, впереди COGS/18+/общность/измеренность, позади Q4-выпуск и gate+repair-петля; сиквел `02`/`05`)** — у всех ревью-шапки. ⚠ Часть под superseded-баннерами (01/02/03/04/05/09 и gap-1/2/5) — **читай баннер прежде содержимого**. - `PROGRESS.md` — **журнал** (CURRENT-STATE сверху, ниже хронология; НЕ источник решений). -- **Активные хендофф-промты (пост-пак-16, 25.07):** [`BACKEND_PACK17_CHANNEL_B_SESSION_PROMPT.md`](BACKEND_PACK17_CHANNEL_B_SESSION_PROMPT.md) (**пак-17 канал B (18+) вживую — ТЕКУЩИЙ, ДВУХФАЗНЫЙ**: дизайн B1–B6 → ратификация → стройка; L3 — жёсткая линия, live только по санкции владельца) · [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5 + нормы промтов/приёмки §7–11) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **Пак-16 ЗАЛЕНДЁН 25.07** (слой-3 diff-редактор: двухфазный дизайн D39.24 → стройка за `enabled:false`; отчёты с ревью-шапками — [`archive/reports/PACK16_DESIGN_2026-07-25.md`](archive/reports/PACK16_DESIGN_2026-07-25.md), [`archive/reports/PACK16_DIFF_EDITOR_REPORT_2026-07-25.md`](archive/reports/PACK16_DIFF_EDITOR_REPORT_2026-07-25.md)). **Паки 12/13/14/15 ЗАЛЕНДЕНЫ 24–25.07** (приёмка воркфлоу-линзами; отчёты с ревью-шапками — [`archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md`](archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md), [`archive/reports/PACK15_STRUCTURE_REPORT_2026-07-25.md`](archive/reports/PACK15_STRUCTURE_REPORT_2026-07-25.md); норматив — [`architecture/12-go-style-notes.md`](architecture/12-go-style-notes.md)). Дальше: **пак-17 = канал B вживую** (батч со следующим платным прогоном: вопросы итерации №2 + замер остатка ремонта → решение о включении петли) → голос/состояние D21 + C2/C3 → пилот Ф2.5. Закрытые — в `archive/prompts/`. -- `archive/` — закрытые сессионные промты (только история, инструкции оттуда не исполнять). +- **Активные хендофф-промты (пост-пак-16, 25.07):** [`BACKEND_PACK17_CHANNEL_B_SESSION_PROMPT.md`](BACKEND_PACK17_CHANNEL_B_SESSION_PROMPT.md) (**пак-17 канал B (18+) вживую — ТЕКУЩИЙ, ЗАПУЩЕН 25.07, ДВУХФАЗНЫЙ**: дизайн B1–B6 → ратификация → стройка; L3 — жёсткая линия, live только по санкции владельца) · [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5 + нормы промтов/приёмки §7–11) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **Пак-16 ЗАЛЕНДЁН 25.07** (слой-3 diff-редактор: двухфазный дизайн D39.24 → стройка за `enabled:false`; отчёты с ревью-шапками — [`archive/reports/PACK16_DESIGN_2026-07-25.md`](archive/reports/PACK16_DESIGN_2026-07-25.md), [`archive/reports/PACK16_DIFF_EDITOR_REPORT_2026-07-25.md`](archive/reports/PACK16_DIFF_EDITOR_REPORT_2026-07-25.md)). **Паки 12/13/14/15 ЗАЛЕНДЕНЫ 24–25.07** (приёмка воркфлоу-линзами; отчёты с ревью-шапками — [`archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md`](archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md), [`archive/reports/PACK15_STRUCTURE_REPORT_2026-07-25.md`](archive/reports/PACK15_STRUCTURE_REPORT_2026-07-25.md); норматив — [`architecture/12-go-style-notes.md`](architecture/12-go-style-notes.md)). Дальше: **пак-17 = канал B вживую** (батч со следующим платным прогоном: вопросы итерации №2 + замер остатка ремонта → решение о включении петли) → голос/состояние D21 + C2/C3 → пилот Ф2.5. Закрытые — в `archive/prompts/`. +- `archive/` — `prompts/`: закрытые сессионные промты (только история, инструкции оттуда не исполнять) · `reports/`: отчёты паков/ресёрч-сессий с ревью-шапками (живая фактура приёмок — на них ссылаются D-лог и активные промты) · архивы хроники `PROGRESS-2026-07-04-10.md`/`PROGRESS-2026-07-10-13.md`. -## Статус (2026-07-23, пост-D39.20 — механизация выпускного качества) +## Статус (2026-07-25, пост-пак-16/D39.25 — механизация выпускного качества) -Фаза 0 ✅; Ф1-инфра ✅ (D20–D28). **АРХ-РЕСЕТ D39 ИСПОЛНЕН ЦЕЛИКОМ:** 7-слойная архитектура (`09-*`) → исследовательская программа (D39.1–D39.10) → план (D39.12, `11-*`) → стройка пака-11 (D39.13–D39.19: волновой исполнитель · чанкер output-бюджет · src→dst-редактор · Go-майнер паритет-EXACT · банкнота · `internal/lang`+langpacks · reject-set · echo-сплит). **ПЕРЕ-ПРОГОН rerun2 ИСПОЛНЕН И ПРОЧИТАН (D39.20, 23.07):** операционка вся подтверждена живьём (ОДИН resnapshot · **$0-резюм драфта ×3 арма** · echo 0 · $6.63<$15 · майнинг-стоп→подпись→reject-set); **планка ≤2 НЕ пройдена** — но дефект-классы полностью механизируемы. Три сигнала (судья dspro 0.679>glm 0.589>>mistral 0.232, floor-шум 0 · два слепых чтения): **анти-корреляция гладкость↔верность доказана трижды**; **mistral исключён как несущий редактор** (голос = north-star промпта); dspro-vs-glm → итерация №2 после механизации (драфт $0). research/21: транспорт наш опережает/вровень со всеми 11, рефакторинг отвергнут. **Эксп ЗАКРЫТ (D39.22), итерация №2 отложена; редактор = deepseek-v4-pro ИНТЕРИМ (glm-резерв); стайл-каноны D39.21 ратифицированы.** **Очередь (курс — разработка бэкенда):** паки 12–15 залендены (транспорт-гигиена · выпускной QA · генеральность · структура: движок разложен `internal/{text,seed,chunk,miner,checks,membank}`+композит-корень, конфиг-слой пары, строгий декод) → пак-16 (канал B / слой-3 diff-редактор) → сид-дельта (元/赤城/学堂家老/春秋蝉) → канал B вживую + слой-3 diff-редактор + Ф2-механизмы (D21 голос/состояние, native-Gemini судья) + ja→ru §B5 → пилот Ф2.5 (блокеры прежние: билингв-якорь D25.9-Q1, корпус, судья-дублёр D22.6). Судья 18+ = grok-фолбэк (квирк D22.6 подтверждён живьём). Ключ xAI: единый, data-sharing, off перед продом (D27). +Фаза 0 ✅; Ф1-инфра ✅ (D20–D28). **АРХ-РЕСЕТ D39 ИСПОЛНЕН ЦЕЛИКОМ:** 7-слойная архитектура (`09-*`) → исследовательская программа (D39.1–D39.10) → план (D39.12, `11-*`) → стройка пака-11 (D39.13–D39.19: волновой исполнитель · чанкер output-бюджет · src→dst-редактор · Go-майнер паритет-EXACT · банкнота · `internal/lang`+langpacks · reject-set · echo-сплит). **ПЕРЕ-ПРОГОН rerun2 ИСПОЛНЕН И ПРОЧИТАН (D39.20, 23.07):** операционка вся подтверждена живьём (ОДИН resnapshot · **$0-резюм драфта ×3 арма** · echo 0 · $6.63<$15 · майнинг-стоп→подпись→reject-set); **планка ≤2 НЕ пройдена** — но дефект-классы полностью механизируемы. Три сигнала (судья dspro 0.679>glm 0.589>>mistral 0.232, floor-шум 0 · два слепых чтения): **анти-корреляция гладкость↔верность доказана трижды**; **mistral исключён как несущий редактор** (голос = north-star промпта); dspro-vs-glm → итерация №2 после механизации (драфт $0). research/21: транспорт наш опережает/вровень со всеми 11, рефакторинг отвергнут. **Эксп ЗАКРЫТ (D39.22), итерация №2 отложена; редактор = deepseek-v4-pro ИНТЕРИМ (glm-резерв); стайл-каноны D39.21 ратифицированы.** **Очередь (курс — разработка бэкенда):** паки 12–16 залендены (транспорт-гигиена · выпускной QA · генеральность · структура: движок разложен `internal/{text,seed,chunk,miner,checks,membank}`+композит-корень, конфиг-слой пары, строгий декод · слой-3 diff-редактор ПОСТРОЕН за `enabled:false` по двухфазному дизайну D39.24 — позиционная детекция + read-only скан остатка + машинерия ремонта §15.2; включение платного пути = решение владельца по замеру остатка на пост-профилактическом прогоне) → пак-17 = канал B вживую (ЗАПУЩЕН 25.07, двухфазный; D39.25: в движке НЕТ понятия «18+» — generic content-labels × provider-capabilities; батч со следующим платным прогоном: вопросы итерации №2 + замер остатка ремонта) → сид-дельта (元/赤城/学堂家老/春秋蝉) → Ф2-механизмы (D21 голос/состояние, native-Gemini судья) + ja→ru §B5 → пилот Ф2.5 (блокеры прежние: билингв-якорь D25.9-Q1, корпус, судья-дублёр D22.6). Судья 18+ = grok-фолбэк (квирк D22.6 подтверждён живьём). Ключ xAI: единый, data-sharing, off перед продом (D27). ## Доступные ключи от моделей DEEPSEEK_API_KEY, ZAI_API_KEY, KIMI_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XAI_API_KEY, MISTRAL_API_KEY diff --git a/docs/architecture/01-decisions.md b/docs/architecture/01-decisions.md index 18b08bdf..e6d9f4bf 100644 --- a/docs/architecture/01-decisions.md +++ b/docs/architecture/01-decisions.md @@ -1,5 +1,7 @@ # Архитектурные решения (v2, 2026-07-04) +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7).** Шапка D31 ниже сама датирована: бейк-офф exp13 состоялся — черновик deepseek-v4-flash СОХРАНЁН (D32.1); редактор = **deepseek-v4-pro ИНТЕРИМ** (D39.22; glm-5 — резерв, mistral исключён — D39.20); grok больше не редактор — концентрация xAI (Р4/Р10-риск-6) распалась, остались судья-фолбэк 18+ и эскалация. Контент-роутинг Р4 переопределён D39.25: в движке НЕТ понятия «18+» — generic content-labels × provider-capabilities (данные + конфиг), refusal причино-агностичен, «канал B» — продуктовое имя; L3 — политика ВХОДА, не чанк-классификатор. После арх-ресета D39 исполнены волновой исполнитель (D39.17), langpack/pair-слой данных (D39.16/D39.23) и слой-3 diff-редактор за `enabled:false` (D39.24) — принцип Р2 «узкие мандаты + диффы» реабилитирован стройкой. Принципы Р1–Р10 живы; вся конкретика моделей/цен/каналов проигрывает D-логу (D30–D39.25) и `configs/pipeline-c1.yaml`. + > **⚠ Шапка-указатель (ревизия 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-подобный: решение → обоснование → что отвергнуто. Статусы: **принято** (можно кодить), **гипотеза** (нужен пилот/валидация). diff --git a/docs/architecture/02-mvp-plan.md b/docs/architecture/02-mvp-plan.md index 7f3baebd..2fdd4385 100644 --- a/docs/architecture/02-mvp-plan.md +++ b/docs/architecture/02-mvp-plan.md @@ -1,5 +1,7 @@ # План MVP (v3.2, 2026-07-12) +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7): точка-во-времени v3.2 (12.07) — рамка фаз жива, дорожка v3.2 ИСПОЛНЕНА, курс ушёл дальше через арх-ресет.** Ф0 ✅, Ф1-инфра ✅; из «Осталось до приёмки Фазы 1» ПОСТРОЕНЫ: границы доверия памяти D16 (trust-gate, D39.2), `tmctl status`+redrive (D15.3), санитайзер D30.3 и экспорт D29.1 (`tmctl export`, D38.3/D39.5); автопопуляция G1 superseded Go-майнером с майнинг-стопом и подписью владельца (D39.10/D39.14/D39.17). Дорожка «resnapshot → пере-прогон 25 глав → чтение» прошла ЧЕРЕЗ арх-ресет D39 (7 слоёв; паки 11–16 залендены, D39.13–D39.24): пере-прогон rerun2 исполнен и прочитан (D39.20), планка ≤2 НЕ пройдена, эксп закрыт владельцем (D39.22) — этап B и пилот Ф2.5 НЕ открыты; редактор = deepseek-v4-pro ИНТЕРИМ (glm-5 резерв, mistral вон), не grok. Интерим-18+ ниже читать через D39.25 (в движке НЕТ понятия «18+»: content-labels × provider-capabilities; канал B вживую = пак-17). Актуальный курс — CLAUDE.md «Текущее состояние» + голова D-лога; правило «при конфликте побеждает D-лог» в силе. + Цель 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 приёмки выполнен.** **v3.2 (12.07, D26–D31): качество-первым — этап B заморожен до читаемых 25 глав; редактор БИЛИНГВ (D30.1); дорожка: пакет D15.2 + exp13 + сид v2 → resnapshot → пере-прогон 25 глав → чтение владельца → этап B.** При конфликте этого плана с D-логом — **источник истины D-лог**. diff --git a/docs/architecture/03-implementation-notes.md b/docs/architecture/03-implementation-notes.md index 75aaf5a9..7f0bfb86 100644 --- a/docs/architecture/03-implementation-notes.md +++ b/docs/architecture/03-implementation-notes.md @@ -2,6 +2,8 @@ > **⚠ Точка-во-времени 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. +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7): код-география §3 перечёркнута паком-15 (D39.23).** Контракты §3 живы семантикой, но монолита `internal/pipeline` больше нет: движок разложен на `internal/{text,seed,chunk,miner,checks,membank}` + композит-корень `pipeline`; конфиг-слой §3.8 расширен `configs/pairs/<пара>` + `configs/langpacks/` + промпт-конвенцией `prompts/<пара>/<роль>.md` и строгим KnownFields-декодом (паки 15/16). Из §6-техдолга закрыты: гонка `Runner.clients` (WS1a, D39.13) · F4 — усечённый length флагуется disposition-классификатором · F3-класс — кап пере-биллинга пака-12; снапшот-дисциплина и golden-гард D23 живы в новой раскладке (golden байт-в-байт, парити EXACT — D39.23). + Вердикт шага 0 — перевалидации решений v2 глазами реализатора перед Фазой 0. Метод: собственное чтение донорского кода vojo + воркфлоу из 4 критиков (линзы: консистентность доков, исполнимость в Go, сверка с донором построчно, онлайн-фактчек цен/API; ~940k токенов, находки ниже отобраны и объединены). diff --git a/docs/architecture/04-unhappy-paths.md b/docs/architecture/04-unhappy-paths.md index 4cef73c1..7320d5e5 100644 --- a/docs/architecture/04-unhappy-paths.md +++ b/docs/architecture/04-unhappy-paths.md @@ -1,5 +1,7 @@ # Карта unhappy paths: режимы отказа AI-перевода → механизмы TextMachine (v1, 2026-07-04) +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7).** Таксономия режимов отказа — действующая валидационная матрица: дефект-классы пере-прогона rerun2 (时辰-меры, разряды 千万, битые словоформы, заголовки — D39.20) легли ровно в её клетки. Но колонки «Фаза/Статус» — снимок дизайна 04.07 и проигрывают D-логу: число/масштаб/процент/латиница/broken-word-чекеры и заголовок-шаблон ПОСТРОЕНЫ (пак-13 `2f91b04`, `internal/checks`), позиционная детекция + ремонт-машинерия diff-редактора построены за `enabled:false` (пак-16, D39.24), gender доезжает до draft-wire (пак-13), ruby-захват на инжесте есть (`ruby_readings`); пар-специфика (словари, детекторы, шаблоны) едет ДАННЫМИ `configs/langpacks/`+`configs/pairs/`, не Go-кодом (пак-14/15, D39.16/D39.23, гардрейл общности 24.07); глоссарный post-check реализован decl-путём в Go, не pymorphy (D31.4; морфо-гейт рода — по-прежнему Ф2); меры → единицы читателя, generic-«гу» — средний род, стихи — смыслом (D39.21); «канал B» в движке = generic content-labels (D39.25). Annotator/голос-состояние — Ф2 (D21). + Синтез по `research/12-failure-modes-{ja,zh,ru-target}.md`, `12-consumer-feedback.md`, `12-error-taxonomies.md` (+ база 01/02/07). Назначение: (1) валидационная матрица архитектуры — каждый известный режим отказа обязан иметь механизм или честную пометку «дыра»; (2) ТЗ на QA-гейты и поля памяти; (3) источник регрессионных тест-кейсов (в research-доках каждый режим — с примером «оригинал → анти-паттерн MTL → верный перевод»). Статусы: ✅ закрыто дизайном v2 · 🔶 закрыто частично / нужно уточнение дизайна · ❌ дыра, требует действия. Фаза — где механизм появляется по плану MVP. diff --git a/docs/architecture/06-memory-risk-registry.md b/docs/architecture/06-memory-risk-registry.md index 28668e97..50c459c5 100644 --- a/docs/architecture/06-memory-risk-registry.md +++ b/docs/architecture/06-memory-risk-registry.md @@ -2,6 +2,8 @@ > **Дополнение (ревизия 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. +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7): банк ПОСТРОЕН — реестр читать как исполненную спеку + методологию, статусы ❌/🔶 датированы 04.07.** Паки 11–15 (D39.13–D39.23): детерминированный Go-майнер (паритет-EXACT) + банкнота с подписью владельца + reject-set закрыли петлю G1 ИНАЧЕ, чем предлагал реестр (exp16/D39.10: WHICH — код, recall 0.97, $0; канон-dst — банкнота; локальный LLM-споттер не нужен); trust-gated suppressor закрыл код-корень терм-дрейфа с громким `n_trust_gated_suppress` (D39.2); нормализация A4 — `internal/text` + данные; Палладий B6 — generic-парсер + langpack-таблицы (D39.16); инъекция, трёхслойная защита и обязательный post-check живут в `internal/membank` (A2/E1 построены); F1-остаток ЗАКРЫТ — `memoryVersion()` хеширует материализованные approved-строки (`snapshot.go:175`); gender доезжает до draft-wire (пак-13, аудит D39.21). Живой прогон подтвердил петлю подписи (2 decline + 1 promote, D39.20). Принципы реестра — действующие инварианты кода; D24.2 (alias-слепое пятно) учитывать по-прежнему. + Выход сессии **«Валидация банка памяти»** (промт `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`. Продуктовый код здесь не пишется — реестр описывает требования к нему. @@ -70,7 +72,7 @@ | # | Сценарий отказа | Вер./Тяж. | Механизм защиты | Слой | Где в коде/схеме | Фаза | Статус | |---|---|---|---|---|---|---|---| -| F1 | **`snapshotID` не покрывает память → тихий расходящийся ре-пэй (D5.2)**. Подтверждено кодом: `snapshotID` (`snapshot.go:82 (до пакета №4 — runner.go:145-163)`) хэширует brief/chunker/план-стадий/сэмплинг, но **не** версию approved-глоссария и **не** параметры сборки контекста; `RequestHash` (`render.go:158`) включает контент `msgs`; `render.go:23-29` декларирует рендер «чистой функцией snapshot». Как только Фаза 1 инъектит память в `msgs` (`render.go:133-136`): изменённый глоссарий/STM меняет `request_hash`, но не `snapshotID` → resnapshot-гейт (`bookrun.go:108/stagerun.go:77 (до пакета №4 — runner.go:260)`) молчит → ре-ран старой главы промахивается мимо чекпоинта и **переоплачивает расходящимся переводом**, ломая инвариант Р6 | В / 🔴🔇 | **Свернуть в snapshot ОБА:** (1) состояние памяти (**content-hash материализованного** approved-глоссария + резюме/series-bible на момент старта джобы — рендер читает **замороженную** версию, не live; **D8: content-hash, НЕ версия-счётчик** — счётчик молча дрейфует, если забыли бампнуть) и (2) context-assembly-конфиг (`glossary_injection`, `stm_depth`, `overlap`). Тогда рендер снова чист по snapshot. **✅ УЖЕ СДЕЛАНО (commit 636919c): snapshot содержит `context_assembly` (`GlossaryInjection`/`GlossaryTokenBudget`) + `MemoryVersion` — материализует память → хеш (выбран мой рекомендованный «материализующий» вариант); `Capability` тоже свёрнут. `memoryVersion()` пока хеширует константу-заглушку `tm-memory-v1\x00`, т.к. банк памяти v2 ещё не приземлился (комментарий в коде явно фиксирует инвариант).** | DET | `runner.snapshotID()`/`memoryVersion()`/`contextSnap` | сделано; активируется с v2 | ✅ структурно закрыто (636919c). **ОСТАЁТСЯ узко: при приземлении глоссария заменить константу в `memoryVersion()` на хеш ORDER BY-стабильных материализованных строк (замороженных, не live) — иначе F1 тихо регрессирует.** | +| F1 | **`snapshotID` не покрывает память → тихий расходящийся ре-пэй (D5.2)**. Подтверждено кодом: `snapshotID` (`snapshot.go:82 (до пакета №4 — runner.go:145-163)`) хэширует brief/chunker/план-стадий/сэмплинг, но **не** версию approved-глоссария и **не** параметры сборки контекста; `RequestHash` (`render.go:158`) включает контент `msgs`; `render.go:23-29` декларирует рендер «чистой функцией snapshot». Как только Фаза 1 инъектит память в `msgs` (`render.go:133-136`): изменённый глоссарий/STM меняет `request_hash`, но не `snapshotID` → resnapshot-гейт (`bookrun.go:108/stagerun.go:77 (до пакета №4 — runner.go:260)`) молчит → ре-ран старой главы промахивается мимо чекпоинта и **переоплачивает расходящимся переводом**, ломая инвариант Р6 | В / 🔴🔇 | **Свернуть в snapshot ОБА:** (1) состояние памяти (**content-hash материализованного** approved-глоссария + резюме/series-bible на момент старта джобы — рендер читает **замороженную** версию, не live; **D8: content-hash, НЕ версия-счётчик** — счётчик молча дрейфует, если забыли бампнуть) и (2) context-assembly-конфиг (`glossary_injection`, `stm_depth`, `overlap`). Тогда рендер снова чист по snapshot. **✅ УЖЕ СДЕЛАНО (commit 636919c): snapshot содержит `context_assembly` (`GlossaryInjection`/`GlossaryTokenBudget`) + `MemoryVersion` — материализует память → хеш (выбран мой рекомендованный «материализующий» вариант); `Capability` тоже свёрнут. `memoryVersion()` пока хеширует константу-заглушку `tm-memory-v1\x00`, т.к. банк памяти v2 ещё не приземлился (комментарий в коде явно фиксирует инвариант).** | DET | `runner.snapshotID()`/`memoryVersion()`/`contextSnap` | сделано; активируется с v2 | ✅ структурно закрыто (636919c). **ОСТАЁТСЯ узко: при приземлении глоссария заменить константу в `memoryVersion()` на хеш ORDER BY-стабильных материализованных строк (замороженных, не live) — иначе F1 тихо регрессирует.** **✅ ОСТАТОК ЗАКРЫТ (пак-11, 19.07):** `memoryVersion()` хеширует материализованный замороженный approved-глоссарий через `membank.ComputeVersion` (`snapshot.go:175-190`, в коде — «F1 CLOSED»); заглушка `tm-memory-v1` снята. | | F2 | **Токен-бюджет: eviction не определён**. При превышении бюджета (matched + sticky > лимит) **какая запись выпадает — не задано**; выпавшая нужная запись = тихая деградация | С / 🟡🔇 | Явная политика приоритета/вытеснения (World Info inclusion-groups: approved>auto; персонажи чанка>фоновые) **+ логировать факт вытеснения** (не молча) | DET | сборщик; `retrieval-state` запись | 1 | ❌ политика и лог вытеснения не специфицированы (находка критика) | | F3 | **Конкурентность/порядок в SQLite**: параллельный перевод чанков + запись auto-записей ломает `first-translation-wins` и sticky (оба предполагают последовательность); modernc — один писатель | С / 🟡 | Явное правило: auto-экстракция и коммит терминов — только на **границе джоб** (impl-notes §3.2 это уже фиксирует); sticky/порядок считаются от детерминированной пересборки чекпоинтов, не от wall-clock порядка | DET | граница джоб; write-пул store | 1 | 🔶 назвать явно (находка критика) | | F4 | **Один SQLite-файл на книгу = SPOF**: повреждение файла молча теряет весь глоссарий+резюме | Н / 🟠🔇 | Бэкап/интеграл-чек/версионирование файла книги; экспорт TMX/TBX как побочный бэкап | DET | store; экспорт | 2 | 🔶 нет строки бэкапа/интеграла (находка критика) | diff --git a/docs/architecture/07-strategic-review.md b/docs/architecture/07-strategic-review.md index cdf47893..7b1799ff 100644 --- a/docs/architecture/07-strategic-review.md +++ b/docs/architecture/07-strategic-review.md @@ -2,6 +2,8 @@ > **⚠ Точка-во-времени 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-лога. +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7): курс этого ревью ИСПОЛНЕН; документ — история-на-09.07.** Из него вырос арх-ресет D39 (синк-аудит `08-sync-audit-ledger.md` + 7-слойная `09-target-architecture.md`), исполненный ЦЕЛИКОМ: исследовательская программа D39.1–D39.10 → стройка паков 11–16 (D39.13–D39.24) → пере-прогон rerun2 (D39.20). Пост-D31-развязки: редактор = deepseek-v4-pro ИНТЕРИМ (D39.22; «кандидат glm-5» — резерв, mistral вон D39.20); G1-автопопуляция (курс-коррекция №10) исполнена Go-майнером с подписью владельца (D39.14/D39.17); доко-синк №11 закрыт ревизией D31 + баннер-пассом 25.07. §9-вопросы к пилоту Ф2.5 ЖИВЫ (пилот не открыт). Актуальность вердиктов — карта в шапке 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-корпус не открывался. diff --git a/docs/architecture/08-sync-audit-ledger.md b/docs/architecture/08-sync-audit-ledger.md index 47ace79c..2de1da53 100644 --- a/docs/architecture/08-sync-audit-ledger.md +++ b/docs/architecture/08-sync-audit-ledger.md @@ -4,6 +4,8 @@ > (`ORCHESTRATOR_ARCH_RESET_PROMPT.md`). Диспозиции и правки в D-лог/код рождаются из него ОТДЕЛЬНО, после решения владельца. > Первый экземпляр процесса, которого требует **концерн 5** (сквозной findings-ledger). +> **⚠ СТАТУС-АПДЕЙТ 25.07 (оркестратор №7): аудит ОТРАБОТАН — арх-ресет исполнен целиком; актуальный статус каждого рычага смотреть в D-логе, не здесь.** Диспозиции несущих находок ратифицированы D39 (п.1–8) и ЗАКРЫТЫ стройкой паков 11–16: терм-дрейф L3 → trust-gate в коде (D39.2); чанкер L2 → бюджет в ВЫХОДНЫХ токенах + edit-единицы + снос мёртвых `STMDepth`/`OverlapTokens` + `segmentationSnap` (D39.13); фантом «D35.7» формализован (D39 п.4); diff-редактор L1 → ПОСТРОЕН за `enabled:false` (пак-16, D39.24); язык-данные → `internal/lang`+langpacks (D39.15–16); пар-слой → `configs/pairs/`+промпт-конвенция (D39.23). Ледджер остаётся доказательной базой-на-13.07 (экземпляр №1 процесса концерна 5); находки в теле НЕ пере-статусуются. + ## Провенанс - Многоагентный воркфлоу `sync-broken-telephone-audit`: **42 агента, 0 ошибок**, ~2.9M токенов, $0 (только чтение репо, без вызовов моделей). - 8 дорожек: по каждому несущему рычагу восстановлена цепочка *полигон-ресёрч → вывод оркестратора → код бэкенда*. diff --git a/docs/architecture/09-target-architecture.md b/docs/architecture/09-target-architecture.md index 1bd809cd..70e4dd96 100644 --- a/docs/architecture/09-target-architecture.md +++ b/docs/architecture/09-target-architecture.md @@ -7,6 +7,19 @@ > > Это карта «куда и почему», а не пошаговая спека. Спеки — в хендофф-промтах сессий; контракт — в D-логе. +> **⟶ СТАТУС СТРОЙКИ (2026-07-25, пост-пак-16; баннер — не переписывание, тело ниже = замысел арх-ресета 13.07).** Карта «слой → статус → пак/D»: +> | Слой | Статус | Пак / D | +> |---|---|---| +> | 1 Сегментация | ✅ ПОСТРОЕН: бюджет в выходных токенах снапшот-folded (`chunk.SegBudget`), edit-единицы декаплены; когезия/carryover — НЕ строится (D39.7/8: эффекты под floor 0.126; кнобы `STMDepth`/`OverlapTokens` УДАЛЕНЫ, WS2 §2а), граница `logical` — не рычаг (exp15), greedy остался | пак-11 (D39.13 WS2 · D39.17 волны · D39.18 c-lite) | +> | 2 Пары | ✅ СЕАМ ПОСТРОЕН: `internal/lang`+langpacks (embedded · книго-overlay `langpack_extend`) · пар-агностичные чекеры · `configs/pairs/` · промпт-конвенция `prompts/<пара>/<роль>.md`; открыто: извлечение дискурс-норм/few-shot из ТЕЛА промтов (форсинг = ja→ru) | D39.16 · пак-14 · пак-15 (D39.23г) | +> | 3 Контракт t/e | ✅ ПОСТРОЕН ЗА `enabled:false`: `checks.RepairCandidates` (позиционная детекция) · read-only скан остатка · машинерия ремонта §15.2; **включение платного пути = решение владельца по замеру остатка** | пак-16 (D39.24) | +> | 4 Память | ✅ ПОСТРОЕН: disposition-gated suppressor + громкий лог дропа; src→dst-мэппинг билингв-редактору ДАН (вопрос закрыт) | пак-1 (D39.2) · пак-11 (D39.13 WS2 §2в) | +> | 5 Качество | ✅ детерм. часть: `QualityReport` · число/omission-гард · DC/пак-13-чекеры · repair-остаток; семантический span-судья/полярность — НЕ строился (защита = editor-swap, D38.4) | D39.2 · D38.3 · пак-13 (`2f91b04`) · пак-16 | +> | 6 Export | ✅ ПОСТРОЕН: `checks.ExportNormalize` на каждом финале; санитайзер-классы strip+export | D39.2 · D38.3 | +> | 7 Гигиена | ЧАСТИЧНО: реестр role→инъекция · вынос `foldModelWire` · снос сирот/`gatesEnabled` — сделаны; **target-aware гейты — ОТКРЫТО** (ru-target-долг = ограничение, D39.24 §15.3; едет с канал-B/таргет-работой) | D39.2 · паки 11–16 | +> +> §1 «как есть» читать как снимок ДО стройки (const-чанкер · glm-редактор · мёртвые `STMDepth`/`OverlapTokens` — всего этого больше нет). §4 отработан целиком: трек B исполнен (exp15/exp16 — программа ЗАВЕРШЕНА, D39.7/D39.10), гейт пере-прогона пройден фактом rerun2 (D39.20; планка ≤2 НЕ пройдена, эксп ЗАКРЫТ D39.22, редактор = deepseek-v4-pro интерим). Канал B — пак-17 (дизайн); инженерная форма переопределена **D39.25**: в движке НЕТ понятия «18+» — generic content-labels × provider-capabilities, refusal причино-агностичен; «18+ линия» в §6 читать как продукт-линию, не механизм движка. + --- ## 0. Стратегический вывод аудита (почему ресет) @@ -96,11 +109,13 @@ snapshot-дисциплина, эталонные сеамы `config→stage-lis - Стадия резолвит промпт/правила из слоя по паре книги, а не из фикс-пути. `Book.LangPair()` оживает как ось выбора. - **Высота сейчас (решение владельца):** построить СЕАМ, наполнить только zh→ru; другие пары — когда придёт книга. Убирает латентный баг (ja-книга едет через «китайский паратаксис»-промпт) и разблокирует расширяемость дёшево. -- **⟶ Реализация (D39.16, обновление):** данные-часть этого слоя РЕАЛИЗОВАНА для майнера — zh/Палладий-инвентари - вынесены из `pipeline/`-констант в `configs/langpacks//` через leaf-пакет `internal/lang` (граница - компиль-enforced; резолв по `Book.LangPair()`; байт-точно — парити EXACT, golden байт-идентичен). Извлечение - правил из ТЕЛА промтов (дискурс-нормы, few-shot) — ещё открыто (форсинг-функция = ja→ru-реплика). `x/text/ - language.Tag` ОТВЕРГНУТ для гейт-предикатов (CLDR-инстабильность в снапшот-вердиктах — держим точные `isRuTarget`). +- **⟶ Реализация (обновление 25.07):** данные-часть РЕАЛИЗОВАНА (D39.16: zh/Палладий-инвентари вынесены из + `pipeline/`-констант в `configs/langpacks//` через leaf-пакет `internal/lang`; граница компиль-enforced; + резолв по `Book.LangPair()`; байт-точно — парити EXACT, golden байт-идентичен) и ДОСТРОЕНА паками 14/15: + пар-агностичные чекеры + embedded-данные + книго-overlay `langpack_extend` (пак-14) · пар-калибровки + `configs/pairs/` + промпт-резолв конвенцией `prompts/<пара>/<роль>.md` (D39.23г). Извлечение правил из ТЕЛА + промтов (дискурс-нормы, few-shot) — ещё открыто (форсинг-функция = ja→ru-реплика). `x/text/language.Tag` + ОТВЕРГНУТ для гейт-предикатов (CLDR-инстабильность в снапшот-вердиктах — держим точные `isRuTarget`). ### Слой 3 — Контракт переводчик/редактор (роли = узкие проходы) · концерн 1 - research/07 предписывает **узкие мандаты + диффы, а не полную перегенерацию** — сейчас ровно наоборот (4 мандата, diff --git a/docs/architecture/components.puml b/docs/architecture/components.puml index fe124529..629ac3b6 100644 --- a/docs/architecture/components.puml +++ b/docs/architecture/components.puml @@ -1,158 +1,108 @@ @startuml components -title TextMachine — компоненты бэкенда (2026-07-12, синхронизировано с 05-decisions-log D1–D38.1)\nПометки: [OK] = построено · [Ф1*] = остаток Фазы 1 · [Ф2]/[Ф3] = планово +title TextMachine — компоненты бэкенда (2026-07-25, синхронизировано с 05-decisions-log D1–D39.25, пост-пак-16)\nПометки: [OK] = построено · [FLAG] = построено за enabled:false · [Ф2]/[Ф3] = планово skinparam componentStyle rectangle -skinparam wrapWidth 200 +skinparam wrapWidth 220 -actor "Владелец / редактор\n(очередь флагов, подтверждение терминов,\nподпись сида v2 = approved-инвариант (D34),\nарбитр читаемости слепых прогонов [2 претензии, D35],\nBWS-оценка пилота)" as HUMAN +actor "Владелец\n(запуск; подпись майнинг-дельты (exit 3);\nрешение о включении repair-петли по замеру остатка (D39.24);\nподтверждение терминов; чтение отчётов/паспортов;\nарбитр слепых чтений)" as HUMAN -package "Интерфейсы" { - component "CLI tmctl: translate / report [OK]\n+ status / redrive [Ф1*]" as CLI - component "HTTP API (IDE) [Ф3]" as API +package "CLI cmd/tmctl [OK]" { + component "translate / report / status /\nexport (--pairs) / redrive / seed-lint\nexit-контракт: 0 чисто · 1 инфра ·\n2 completed-with-flags · 3 майнинг-подпись" as CLI } -package "Оркестратор" { - component "Проект книги [OK]\n(translation brief, brief_hash,\nконфиг ядра C0/C1/C2/C3)" as PROJ - component "Импорт txt/epub [OK]\n(главы -> чанки, ruby-захват,\nspine-reconciliation fail-loud)" as IMP - component "Durable jobs [OK]\n(чанк-чекпоинты, resume, kill-9-инвариант;\ncontent-addressed reuse — гейт онгоинга [Ф1.5])" as JOBS - component "Пайплайн-раннер [OK]\n(циклы/ретраи/single-hop эскалация\nс РЕ-ГЕЙТОМ = код; состав стадий/модели/\nпороги = конфиг; disposition D2)" as RUNNER - component "Экспорт txt/epub/TMX + отчёт\n(паспорт качества главы) [Ф1*]" as EXP +package "internal/pipeline — композит-корень (драйвер) [OK]" { + component "Runner [OK]: конфиг-стек fail-fast\n(book+pair+pipeline+models, строгий KnownFields-декод),\nlangpack+книжный overlay, промпт-конвенция,\nCheckRunnable (C2/C3/judge отвергнуты в Ф0)" as RUNNER + component "Волновой исполнитель [OK] (D39.17):\nдрафт ∥ → майнинг-стоп → редактура ∥ (по edit-единицам);\nредактор НИКОГДА не пере-рендерит драфт;\nc-lite: флагнутый member выбрасывается (D39.18)" as WAVES + component "runStage [OK]: reserve → вызов → settle+чекпойнт\nОДНОЙ tx; RequestHash tm-request-v2; $0-резюм по чекпойнту\n(rerun2: доказан ×3 арма); classify ПОСЛЕ денег;\nbilled-decode кап (пак-12)" as STAGERUN + component "Снапшоты per-wave [OK]:\ndraft = BASE-банк · edit = ENRICHED-банк\n(«переоплата ОДНА», D30.9/D39.12);\nlangpack Version() и промпт-SHA фолдятся;\nstale → громкий стоп без --resnapshot" as SNAP + component "Эскалация single-hop + ре-гейт [OK] (D12);\nescalation.chains = конфиг-декларация,\nмульти-хоп по цепочке лейбла [Ф2/пак-17]" as ESC + component "Майнинг-стоп [OK]: MineBank → signature map →\nexit 3 → подпись владельца → mined_delta / mined_rejects;\nре-ран: драфт $0-резюм, пустая дельта = авто-континью" as MINING + component "Банкнота ⟦TM-BANK-v1⟧ [FLAG]\n(срез с RAW-драфта до classify; derived-чекпойнт)" as BANKNOTE + component "Repair-петля [FLAG] (пак-16, D39.24):\nсуб-шаг финальной стадии; таргет-вызовы по span,\nпромпт per-класс; 6 гардов + позитивный ре-гейт\n+ анти-удаление; derived tm-repair-v1;\nвключение = решение владельца по замеру остатка" as REPAIR + component "Вердикты disposition [OK]: intrinsic classify всегда\n(refusal причино-агностичен — детектим ФАКТ, D12/D39.25;\nэхо/loop/length/empty); flag+skip+continue (D2)" as DISP + component "$0 read-модели [OK]: status · export\n(манифест-ре-чанк, ExportNormalize) · quality-report\n(+ residual-скан RepairCandidates = замер остатка)" as READMODELS } -package "Агентные роли (промпт-конфиги)" { - component "Translator: черновик [OK]\n(C2: N ГЕТЕРОГЕННЫХ кандидатов [Ф2])" as ROLE_TR - component "Editor [OK] БИЛИНГВАЛЬНЫЙ (флип D1→D30.1)\n(вход = черновик + ИСХОДНИК + CONFIRMED dst-констрейнты);\nдискурс-reflow-промпт (Ван Цуй) + репараграфизация 1:N;\nкандидат glm-5, свап→mistral/deepseek-pro (D38.1);\nверность → fidelity re-gate (D34.3, полигон) + omission-гард [Ф2, D38]; пилот-арм D13.1 = ПОДТВЕРЖДАЮЩИЙ" as ROLE_ED - component "Analyst: book brief [Ф2]" as ROLE_AN - component "Terminologist / автопопуляция\nглоссария [Ф1*/Ф2]\n(спот=локаль, рендер=облако — exp06)" as ROLE_TERM - component "Annotator: пре-пасс [Ф2]\n(speaker-ID, регистр, чэнъюй-маски)" as ROLE_ANN - component "Judge / Selector [Ф2]\n(билингвальный, судья-анкета MQM;\nsecond-opinion чужого семейства\nна эскалированных чанках)" as ROLE_JU - component "Line/Continuity Editor [Ф2+]" as ROLE_LE +package "Подсистемы (сплит пака-15, D39.23) [OK]" { + component "internal/chunk: ingest txt/epub\n(GB18030, ruby-захват) + чанкер по output-бюджету\n(SegBudget пары), edit-единицы" as P_CHUNK + component "internal/checks: санитайзер D30.3 ·\ncheap-гейты v4 · DC-чекеры (пар-агностичные, данные) ·\ncoverage · regression guard · RepairCandidates ·\nExportNormalize; пакет сообщает ФАКТЫ,\nдиспозицию назначает драйвер" as P_CHECKS + component "internal/miner: $0 банк-майнер\n(порт exp16 V-C, паритет EXACT) →\nсид-дельта YAML на подпись" as P_MINER + component "internal/membank: Aho-Corasick Select ·\ntrust-gate (терм-дрейф закрыт, D39.2) · спойлер-окна ·\nsticky · post-check E1 · Version/BaseVersion" as P_MEMBANK + component "internal/text: версионированный\nнормализационный субстрат (NFKC/trad2simp);\ninternal/seed: схема сид-YAML" as P_TEXT + component "internal/lang: языковые ДАННЫЕ без поведения\n(langpack пары + embedded); Version() → снапшот" as P_LANG + component "internal/config: book/pair/pipeline/models\nстрогий декод; CheckAdultChannel-линт" as P_CONFIG + component "internal/llm: адаптеры openai/anthropic/local;\nтранспорт-ретраи/failover (пак-12);\ncapability-резолв в wire-форму" as P_LLM + component "internal/store: SQLite на книгу\n(леджер reserve/settle BEGIN IMMEDIATE, чекпойнты,\nchunk_status, jobs, request_log, glossary, ruby)" as P_STORE } -package "QA-гейты (без LLM)" { - component "Intrinsic classify [OK]\n(refusal/CJK-echo ДО length, loop-детект)" as QA_CJK - component "Coverage / excision [OK, opt-in]\n(sent_cov + len_ratio, порт оракула)" as QA_COV - component "Глоссарный post-check [OK]\n(decl-aware, CONFIRMED-only;\nфлаггер по умолчанию, гейт opt-in)" as QA_GLOS - component "Output-санитайзер [OK, opt-in c1] (D30.3/D33)\n(ведущие преамбулы / хвостовые «Основные правки» —\ngemini-утечка 6/6 / латиница-врезки / markdown-###;\nCJK-Han-в-выходе — в стройке D38.1); flag+skip D2" as QA_SANITIZE - component "Дешёвые гейты Ф1 [Ф1*]:\nтире-линтер, ёфикатор,\nтранслит-междометия, число-гейт\n+ диалог-парность-флаггер (D29.1д) + omission-гард (D38)" 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" { - component "Роутер роль -> модель [OK]" as LLM_RT - component "Capability-слой [OK]\n(budget_field/temperature/reasoning;\nэхо-мина DeepSeek fail-fast;\nper-model флор min_max_tokens 8000/kimi 16000, D24.3;\ngpt-5.4 reasoning=low в редакторе — medium режет вывод, D38.6)" as LLM_CAP - component "NSFW-классификатор 0-3 [Ф2]\n(НЕ специфицирован — нужна метрика приёмки;\nуровень 3 = скип чанка + флаг)" as LLM_NSFW - component "Failover [OK, НЕ подключён]\nтолько local->cloud для local-ролей (D4);\nоблачные draft/edit: пауза+resume, НЕ своп" as LLM_FO - component "Адаптеры OpenAI-совместимые [OK]:\nDeepSeek / GLM / Kimi / xAI / OpenAI / Mistral /\nllama-server; нативный Gemini [Ф2]" as LLM_AD - component "Кэш-раскладка префикса [OK]\n+ Batch (только Gemini-судья/QA) [Ф2]" as LLM_BC -} - -package "Банк памяти книги (SQLite на книгу) [OK: v2]" { - component "Глоссарий v2 [OK]\n(sense, alias-граф, decl, gender=hidden,\ntranslit_policy, ревизии);\nсид v2 ПОДПИСАН владельцем (57 терминов, D34);\nstatus:draft НЕ инъектится в editor-констрейнт\n(CONFIRMED-only) — reseed промоут грейдов (корень терм-дрейфа, D38)" as MEM_GLOS - component "Горячий путь [OK]: Aho-Corasick,\nнормализация NFKC/trad2simp/kana/ignorables,\nспойлер-окна since/until (hard-reject),\ndisposition CONFIRMED/AMBIGUOUS/REJECT,\nsticky; фиксы границ D16 [OK]" as MEM_HOT - component "Ruby-захват [OK] -> сид auto-кандидатов;\nreading как матч-поверхность [Ф1*, D16.4]" as MEM_RUBY - component "retrieval_state per-chunk [OK]\n(наблюдаемость инъекции/вытеснений)" as MEM_RS - component "Резюме глава->арка->книга [Ф2]\n+ гейт фактичности резюме (реестр D1)" as MEM_SUM - component "Series bible: ты/вы-журнал, род [Ф2]" as MEM_SB - component "Векторный слой [Ф2, low-trust A7]\n(bge-m3, только кандидаты на ревью)" as MEM_VEC -} - -package "Деньги и наблюдаемость [OK]" { - component "Ledger: reserve -> settle+checkpoint\nодной tx, потолки книга/день,\nescalation-бюджет" as OBS_LG - component "Премиум-бюджет: budget_usd =\nclamp(price x (1-margin) - base, 0, cap)\n(D11; жёсткие $-гейты сняты)" as OBS_QB - component "request_log + trace + retrieval_state" as OBS_TEL -} - -package "Eval / Полигон (зона eval/)" { - component "Пилот-харнесс Ф2.5\n(BWS, memory-eval M0-M3, судья-панель;\nчинится до прогона — D13.5;\nблокеры: корпус вне претрейна, аннотаторы ≥3,\nбилингв-якорь, судья-дублёр 18+ — чистый ключ снят D27)" as EV_PILOT - component "Refusal/excision-бенчмарк [OK]\n(18+ эмпирика ПОЛНА: violence exp10 + erotica exp11;\nканал B v2 собран, D14.4 закрыт)" as EV_RB - component "Диагностик-харнесс качества\n(exp12→14b: нарезка×промпт, слепые читки,\nfidelity re-gate; трек «мерить→строить» D26–D38.1)" as EV_DIAG +package "Конфиг-слои (ДАННЫЕ — движок общий, §0/D39.25)" { + component "book.yaml: бриф+BriefHash;\nAdult bool = интерим до generic content-labels\n(D39.25, пак-17); langpack_extend (книжный overlay);\nmined_delta / mined_rejects" as C_BOOK + component "configs/pairs/<пара>.yaml:\nфертильность, output-бюджеты, len_ratio" as C_PAIR + component "configs/langpacks/<пара|язык>/:\nморфология источника, Палладий,\ndc-checkers, heading" as C_LP + component "prompts/<пара>/<роль>.md +\nrepair/<класс>.md (конвенция, fail-loud)" as C_PROMPTS + component "models.yaml: провайдеры/цены/capability\n(permissive = ТИП-изоляция канала B, эхо-гейт DeepSeek,\nфлоры min_max_tokens, rate_limit)" as C_MODELS + component "pipeline-*.yaml: стадии/гейты/\nэскалация/волны/майнинг; строгий декод" as C_PIPE } cloud "LLM-провайдеры" { - component "DeepSeek V4: -flash = draft (thinking ON —\nэхо-мина; сохранён exp13/D32) · -pro = escalate-хоп\n(флор min_max_tokens 8000, D24.3);\nexplicit ЗАПРЕЩЁН ToS, violence OK (D14.1)" as P_DS - component "xAI Grok 4.3: эскалация канала B (reasoning-ON),\nпервичный судья эротики; НЕ редактор\n(reasoning-off из редакторских ролей снят = no-op, D30.1);\nключ единый С data-sharing, off перед продом (D27)" as P_XA - component "gemini-3.1-pro-preview (голый слаг→404):\nсудья SFW/violence, но fail-closed на эротике\n(PROHIBITED_CONTENT); премиум-эскалация редактора\nТОЛЬКО за санитайзером (D30.1); billing additive_total (D22.3)" as P_GM - component "GLM (glm-5 = ДЕФОЛТ билингв-редактор, D30.1) /\nKimi (НЕПРИГОДЕН как редактор — обрезки/таймауты) /\nOpenAI (GPT-5 фронтир-арм — в дефолт НЕ нужен, D38)" as P_OTH - component "Mistral — переводчик-ДЕФОЛТ канала B (18/18, D22.1);\nкандидат СМЕНЫ дефолт-редактора (чинит инверсии,\nкоторые glm валит, дешевле) — бейк-офф прозы (D38.1)" as P_MI - component "llama-server (GPU 8GB: скрининг,\nabliterated канала B, эмбеддинги,\nСПОТ-экстракция)" as P_LL + component "DeepSeek V4: -flash = draft (thinking ON — эхо-мина) ·\n-pro = РЕДАКТОР-ИНТЕРИМ (D39.22) + эскалация-хоп;\nadult-контент НЕ отправлять (ToS → capability-данные)" as P_DS + component "GLM glm-5: редактор-РЕЗЕРВ (D39.22);\nMistral: переводчик adult-контента (D19);\nкак несущий редактор ИСКЛЮЧЁН (D39.20)" as P_GLM + component "xAI grok-4.3: permissive, adult-цепочка,\nсудья 18+ фолбэк; ключ data-sharing, off перед продом (D27)" as P_XA + component "gemini-3.1-pro-preview: апекс/премиум-эскалация;\nnative-судья [Ф2]; mandatory thinking, additive_total" as P_GM + component "OpenAI gpt-5-mini · local/ollama (permissive)" as P_OTH } -database "SQLite" as DB +component "Ф2/Ф3 (планово): голос/состояние D21 ·\nnative-Gemini судья · C2/C3-селекция ·\ngeneric content-labels × provider-capabilities (пак-17, D39.25) ·\nja→ru §B5 (тест общности) · HTTP API (IDE) [Ф3]" as FUTURE -CLI --> PROJ -API --> PROJ -PROJ --> IMP -IMP --> JOBS -JOBS --> RUNNER -RUNNER --> EXP -RUNNER --> ROLE_TR -RUNNER --> ROLE_ED -RUNNER --> ROLE_AN -RUNNER --> ROLE_TERM -RUNNER --> ROLE_ANN -RUNNER --> ROLE_JU -RUNNER --> ROLE_LE -RUNNER --> QA_CJK -RUNNER --> QA_COV -RUNNER --> QA_GLOS -RUNNER --> QA_SANITIZE -RUNNER --> QA_CHEAP -RUNNER --> QA_MORPH -RUNNER --> QA_TRANSLIT +HUMAN --> CLI : запуск / подпись / решения +CLI --> RUNNER +RUNNER --> WAVES +WAVES --> STAGERUN +WAVES --> MINING +STAGERUN --> SNAP +STAGERUN --> ESC +STAGERUN --> BANKNOTE +STAGERUN --> REPAIR +STAGERUN --> DISP +CLI --> READMODELS -ROLE_TR --> LLM_RT -ROLE_ED --> LLM_RT -ROLE_JU --> LLM_RT -ROLE_AN --> LLM_RT -ROLE_TERM --> LLM_RT +RUNNER --> P_CONFIG +RUNNER --> P_LANG +WAVES --> P_CHUNK +STAGERUN --> P_LLM +STAGERUN --> P_STORE +DISP --> P_CHECKS +REPAIR --> P_CHECKS +MINING --> P_MINER +WAVES --> P_MEMBANK +P_MINER --> P_TEXT +P_MEMBANK --> P_TEXT +P_CHECKS --> P_LANG +P_MINER --> P_LANG +READMODELS --> P_STORE +READMODELS --> P_CHECKS -LLM_RT --> LLM_CAP -LLM_CAP --> LLM_AD -LLM_NSFW ..> LLM_RT : выбор канала A/B [Ф2] -LLM_FO ..> LLM_AD : только local-роли (D4) -LLM_BC ..> LLM_AD -LLM_AD --> P_DS -LLM_AD --> P_XA -LLM_AD --> P_GM -LLM_AD --> P_OTH -LLM_AD --> P_MI -LLM_AD --> P_LL -LLM_NSFW ..> P_LL : классификатор 0-3 [Ф2] +P_CONFIG --> C_BOOK +P_CONFIG --> C_PAIR +P_CONFIG --> C_MODELS +P_CONFIG --> C_PIPE +P_LANG --> C_LP +RUNNER --> C_PROMPTS +C_BOOK ..> C_LP : langpack_extend (overlay) -RUNNER --> MEM_HOT -MEM_HOT --> MEM_GLOS -MEM_HOT --> MEM_RS -IMP --> MEM_RUBY -MEM_RUBY --> MEM_GLOS -MEM_HOT ..> MEM_SUM : [Ф2] -MEM_HOT ..> MEM_SB : [Ф2] -MEM_HOT ..> MEM_VEC : [Ф2], не в горячем пути +P_LLM --> P_DS +P_LLM --> P_GLM +P_LLM --> P_XA +P_LLM --> P_GM +P_LLM --> P_OTH -HUMAN --> CLI : запуск, флип гейтов (за подписью) -HUMAN <-- EXP : отчёт, паспорт качества, флаги -HUMAN --> MEM_GLOS : подтверждение терминов auto->approved\n(безлюдный режим = осознанный риск G1/G2) -HUMAN <.. EV_PILOT : BWS-оценка (пилот Ф2.5) -HUMAN <.. EV_DIAG : слепая читка-арбитраж (2 претензии, интерим) - -LLM_RT --> OBS_LG -OBS_LG --> OBS_QB -LLM_AD --> OBS_TEL -RUNNER --> OBS_TEL - -JOBS --> DB -MEM_GLOS --> DB -MEM_RS --> DB -OBS_TEL --> DB -OBS_LG --> DB - -EV_PILOT ..> OBS_TEL : golden-set реплей [Ф2] -EV_RB ..> LLM_NSFW : калибровка роутинга +HUMAN <-- READMODELS : отчёты / паспорт / замер остатка +HUMAN <-- MINING : signature map (exit 3) +FUTURE -[hidden]-> P_OTH note bottom of HUMAN - Петля человека — несущая опора safety - (все защиты кончаются флагом): - ёмкость G2 меряется пилотом (D13), - flag-rate/главу — первый замер. + Петля человека — несущая опора safety: + все защиты кончаются флагом (D2); + майнинг-дельта и включение платного + repair-пути — только за подписью. end note @enduml diff --git a/docs/architecture/pipeline.puml b/docs/architecture/pipeline.puml index 35207f80..f185fae4 100644 --- a/docs/architecture/pipeline.puml +++ b/docs/architecture/pipeline.puml @@ -1,116 +1,97 @@ @startuml pipeline -title TextMachine — поток перевода книги (2026-07-12, синхронизировано с D1–D38.1)\nПометки: [OK] = построено · [Ф1*] = остаток Фазы 1 · [Ф2] = планово +title TextMachine — поток перевода книги (2026-07-25, синхронизировано с D1–D39.25, пост-пак-16: волновой исполнитель)\nПометки: [OK] = построено · [FLAG] = построено за enabled:false · [Ф2] = планово skinparam wrapWidth 260 start -:Импорт книги [OK]: txt / epub по spine, -ruby-захват, spine-reconciliation fail-loud, -GB18030-детект/конверсия (реальные zh .txt — не UTF-8, D18/D20) -(тихая потеря главы невозможна); -:Сегментация [OK]: главы -> чанки ~1-2k токенов -(sentence-pack, quote-depth, lossless); -:Сид глоссария [OK]: ручной YAML + ruby-кандидаты -(ja-книга: kana-написания имён — aliases руками, D16.4) -· сид v2 ПОДПИСАН владельцем (57 терминов, D34) -· status:draft НЕ инъектится в editor-констрейнт — reseed промоут грейдов (D38) -· автопопуляция G1 [Ф1*/Ф2]: спот=локаль / рендер=облако; -:Analyst: book brief (map-reduce) [Ф2]; -:Terminologist: глоссарий + style sheet до перевода [Ф2]; +:Открытие Runner [OK]: строгий конфиг-стек +(book.yaml + configs/pairs/<пара> + pipeline-*.yaml + models.yaml, +KnownFields-декод), langpack пары + книжный overlay langpack_extend, +промпт-конвенция prompts/<пара>/<роль>.md (fail-loud); +:Ingest [OK]: txt (главы по \\f) / epub по spine, +GB18030-детект/конверсия, ruby-захват, NormalizeSource; +:Сид банка ДО снапшота [OK]: glossary_seed + ruby-кандидаты ++ mined_delta (Source:mined — только в ENRICHED) +− mined_rejects · материализация BASE- и ENRICHED-банка; +:Чанкинг [OK]: draft-чанки по ВЫХОДНОМУ токен-бюджету +(SegBudget пары: фертильность CJK/other), edit-единицы декаплены · +precompute sticky по BASE-банку одним упорядоченным проходом; note right - snapshotID [OK] пинит: brief, чанкер, план стадий, - capability, память (content-hash), context-assembly. - ЛЮБОЙ resnapshot = переоплата книги (D15) — - до content-addressed reuse онгоинг не продаётся. + Снапшот per-wave [OK]: draft-волна пинит BASE-банк, + edit-волна — ENRICHED (обогащение двигает ТОЛЬКО edit — + «переоплата ОДНА», D30.9/D39.12). Фолдятся: BriefHash, + langpack Version(), промпт-SHA, capability, версии вердикт-осей. + Правка данных между прогонами = громкий --resnapshot. + Внутри снапшота: $0-резюм (rerun2 — доказан ×3 арма). end note -while (Остались главы?) is (да) - while (Остались чанки главы?) is (да) - :Сборка контекста [OK]: кэш-префикс (system+brief) - + селективная инъекция глоссария - (Aho-Corasick, спойлер-hard-reject, - disposition CONFIRMED/AMBIGUOUS/REJECT, sticky) - + retrieval_state запись; - :NSFW-классификатор 0-3 [Ф2 — требует - спеки и метрики приёмки]; - if (Уровень 3: несовершеннолетние?) then (да) - :Чанк НЕ переводится: скип + флаг - (книга продолжается); - else (нет) - if (Уровень 2: explicit?) then (да) - :Канал B v2 [D19.1/D22.1]: переводчик-ДЕФОЛТ Mistral (18/18) - → эскалация Grok 4.3 (reasoning-ON) - → локальная abliterated 8b (скрин/фолбэк) - · DeepSeek explicit ЗАПРЕЩЁН (ToS), violence OK - · судьи 18+ Grok+Gemini (эротика→Grok primary, Gemini fail-closed); - else (0-1) - :Канал A [OK]: DeepSeek V4 Flash - (thinking ON — эхо-мина); - endif - :Translator [OK]: черновик - (C2 [Ф2]: N ГЕТЕРОГЕННЫХ кандидатов, D13.2); - if (Ядро C2/C3: селекция? [Ф2]) then (да) - :Judge-селектор: 11+ повторов со свапом - позиций, Bradley-Terry - (кандидаты разных семейств); - else (C1) - endif - :Intrinsic classify [OK]: refusal-blacklist, - CJK-echo, empty, loop — ДО length - (усечённый отказ не ретраится платно); - :Coverage-гейт [OK, opt-in]: sent_cov + len_ratio - (только translator-роль); - if (Вердикт чанка?) then (транзиентный: length/empty) - :same-model retry, ось attempt, - бОльший max_tokens (после loop-чека) [OK]; - elseif (контент-провал: echo/excision/refusal) then (детерминированный) - if (escalate_to задан И бюджет есть?) then (да) - :Single-hop эскалация [OK]: на ДРУГУЮ модель - (ровно 1 хоп, editor pinned) — хоп ограничен - per-model флором min_max_tokens 8000 (D24.3); - :РЕ-ГЕЙТ фолбэка [OK]: classify + coverage - заново — не прошёл, значит флаг остаётся; - else (нет) - :Флаг чанка (skip+flag+continue, D2) [OK]; - endif - else (ok) - endif - :Editor [OK]: БИЛИНГВАЛЬНАЯ редактура (флип D1→D30.1) — - вход = черновик + ИСХОДНИК + CONFIRMED dst-констрейнты · - дискурс-reflow-промпт (Ван Цуй) + репараграфизация 1:N · - кандидат glm-5, свап→mistral/deepseek-pro (D38.1) · - верность → fidelity re-gate (D34.3, полигон) + omission-гард [Ф2, D38]; - :Output-санитайзер [OK, opt-in c1] (D30.3/D33) — - ведущие преамбулы / хвостовые «Основные правки» (gemini-утечка 6/6) / - латиница-врезки / markdown-### / CJK-Han-в-выходе [в стройке D38.1] — - flag+skip (D2), вердикт-ось; - :Post-check финала [OK]: decl-aware, - CONFIRMED-only (union: базовый dst ВСЕГДА в проверяемых формах, - D24.4 — закрывает nominative_gap) — флаггер по умолчанию, - жёсткий гейт opt-in за подписью владельца; - :Чекпоинт [OK]: settle + checkpoint одной tx - (в TM коммитится только прошедшее гейты); - endif - endwhile (нет) - :Граница главы: телеметрия + паспорт - качества [Ф1*] · батч-подтверждение терминов auto->approved — - ЧЕЛОВЕК или судья чужого семейства [Ф2] — - безлюдный авто-апрув = риск G1 - · резюме главы/арки + гейт фактичности [Ф2]; - note right - Outage/системный класс (503-storm, потолок): - circuit-breaker -> ПАУЗА + resume (D4/D12), - НЕ mass-swap провайдера. - end note -endwhile (нет) +partition "ВОЛНА ДРАФТА [OK] (∥ workers, по draft-чанкам)" { + :Сборка контекста [OK]: кэш-префикс (system+brief) + + src→dst-инъекция глоссария из precomputed selection + (Aho-Corasick, trust-gate, спойлер-hard-reject, sticky); + :runStage [OK]: чекпойнт-хит → $0-реклассификация · + иначе Reserve (потолки книга/день) → вызов → + Settle+чекпойнт ОДНОЙ tx → classify ПОСЛЕ денег; + :Банкнота ⟦TM-BANK-v1⟧ [FLAG]: срез с RAW-драфта + до classify · чистый драфт → derived-чекпойнт; + if (Вердикт чанка? [OK]) then (транзиент: length/empty) + :same-model retry, удвоение max_tokens + (до regenerate_before_escalate); + elseif (контент-провал: echo/refusal/loop) then (детерминированный) + :Refusal причино-агностичен (D12/D39.25): + детектим ФАКТ отказа, не причину · + single-hop эскалация escalate_to под budget_usd + + РЕ-ГЕЙТ · иначе flag+skip+continue (D2); + else (ok) + endif +} -:Очередь флагнутых чанков -> человек -· redrive точечно [Ф1*] (сейчас только ---resnapshot ценой всей книги — D15); -:Книжный QA-проход [Ф2]: консистентность по всей -книге, регрессия ты/вы, морфо-гейт рода; -:Экспорт txt/epub/TMX + отчёт [Ф1*]: tmctl export (канон. ассемблер) -+ annotations.json · нормализация выхода (strip ведущий ###) -· флагнутый чанк НЕ дропать в пусто (export-фикс D35.4a) -· стоимость по стадиям, флаги, журнал творческого вклада; +if (Майнинг вкл. И дельта непуста? [OK]) then (да) + :МАЙНИНГ-СТОП: MineBank по нормализованному источнику + против контраста (сид и reject-set исключены) → + signature map → прогон ОСТАНОВЛЕН (exit 3); + :Владелец: каждый терм → promote в mined_delta (approved+dst) + ИЛИ decline в mined_rejects; + :Ре-ран: драфт $0-резюм · пустая дельта → авто-континью; +else (нет / выкл) +endif + +partition "ВОЛНА РЕДАКТУРЫ [OK] (∥ по edit-единицам, ENRICHED-банк)" { + :Единица = конкатенация member-выходов драфта + (редактор НИКОГДА не пере-рендерит драфт — инвариант) · + флагнутый member ВЫБРАСЫВАЕТСЯ из редактуры (c-lite, D39.18); + :СВЕЖИЙ memory.Select по источнику единицы над ENRICHED + → CONFIRMED-констрейнты билингв-редактору + (deepseek-v4-pro ИНТЕРИМ, D39.22 · glm-5 резерв); + :runStage: тот же контур reserve→вызов→settle+чекпойнт, + ретраи/эскалация/ре-гейт — как в драфте; + :Гейты финала [OK]: intrinsic classify всегда · + санитайзер D30.3 (косметика → strip + экспорт flagged) · + глоссарный post-check (флаггер всегда, гейт opt-in) · + cheap-гейты v4 → retrieval_state (observability, НЕ вердикт); + :Repair-петля [FLAG] (пак-16, D39.24) — суб-шаг финальной + стадии: checks.RepairCandidates (позиционная детекция, + вердикт-нейтральная) → ≤N таргет-вызовов по span, + промпт prompts/<пара>/repair/<класс>.md → 6 гардов + + ПОЗИТИВНЫЙ ре-гейт + анти-удаление · + ⟦TM-NOCHANGE⟧ = успех-декляйн · фикс → derived tm-repair-v1 · + ВКЛЮЧЕНИЕ платного пути = решение владельца по замеру остатка; + :Чекпойнт финала [OK]: в TM коммитится + только прошедшее гейты · ApplyHeading на первую единицу главы; +} + +:Read-модели $0 [OK]: tmctl status (wave-aware) · +quality-report (структурный KPI + residual-скан +RepairCandidates = замер остатка для решения о repair) · +очередь флагнутых → человек (redrive точечно); +:Экспорт $0 [OK]: манифест-ре-чанк + final-строки chunk_status, +checks.ExportNormalize байт-в-байт с translate, +--pairs (source-колонка), счётчики pending/ghost/ConfigDrift; +note right + Канал B (18+) [пак-17, в дизайне]: generic + content-labels × provider-capabilities (D39.25) — + в движке НЕТ понятия «18+». Сейчас интерим: + Adult bool + channel:adult ТИП-изоляция + линт. + Ф2: голос/состояние D21, native-Gemini судья, C2/C3. +end note stop @enduml diff --git a/docs/research/18-quality-levers-chatgpt.md b/docs/research/18-quality-levers-chatgpt.md index 1a64eba7..cc346823 100644 --- a/docs/research/18-quality-levers-chatgpt.md +++ b/docs/research/18-quality-levers-chatgpt.md @@ -1,5 +1,7 @@ # Рычаги минимально-художественного zh→ru: независимый доклад ChatGPT +> ✅ **ОТРАБОТАН (отметка 25.07, оркестратор №7).** §C3-ядро дискурс-reflow графтовано в промт полигона (D36→exp14, D37); чэнъюй-рычаг дописан по аудиту D38.4; итог — editor v3 (D38.5, `0ac5f7a`). Арка «качество-первым» закрыта; промпт живёт конвенцией `backend/prompts/zh-ru/` (пак-15, D39.23г). + ## §A — Независимое заключение (ЗАМОРОЖЕНО) diff --git a/docs/research/20-bank-mining.md b/docs/research/20-bank-mining.md index b35650b5..a15b4d3a 100644 --- a/docs/research/20-bank-mining.md +++ b/docs/research/20-bank-mining.md @@ -12,6 +12,8 @@ > **ACCEPT**. §E-владельцу (мини-голд алиасов · бюджет ≤$5 · политика канона · жанр-паки · реплика ja→ru) > вынесены владельцу отдельно; §E-бэкенду — слоты дизайна, НЕ строить до итогов §D (ратифицировано D39.6). +> **→ ПОСТРОЕНО (отметка 25.07, оркестратор №7):** §D-полигон исполнен exp16 (D39.10: WHICH V-C recall 0.97, WHAT→банкнота+Палладий); детектор-лестница V-A/B/C — Go-майнер паритет-EXACT (пак-11 R2, D39.14; `backend/internal/miner/`), банкнота 12 гейт-точек — R3 (D39.14), майнер-данные → `internal/lang`+`configs/langpacks/` (D39.16), mined-delta collision-гард — пак-13 (`2f91b04`). Гейт «НЕ строить до итогов §D» снят фактом итогов. + **Сессия-ресёрчер, 2026-07-17.** Исполнение `docs/RESEARCHER_BANK_MINING_SESSION_PROMPT.md` (D39.3). Не закоммичено — лендит оркестратор. diff --git a/docs/research/21-llm-transport-survey.md b/docs/research/21-llm-transport-survey.md index 160e2b80..d884c9a7 100644 --- a/docs/research/21-llm-transport-survey.md +++ b/docs/research/21-llm-transport-survey.md @@ -4,6 +4,8 @@ **Статус: ПРИНЯТ (залендён 23.07); черновик сдан ресёрч-сессией 23.07. §5-аддендум (арх-паттерны) дописан сессией и залендён вторым коммитом — спот-чек цитат обеих сторон (`capability.go:12-18` фолд-в-снапшот, `clients.go:15` BuildClient, `requestoption.go:80-85` замыкание) подтверждён; рефактор-вердикт «транспорт не трогаем» ратифицирован (D-лог, PROGRESS 23.07).** Дата: 2026-07-23. Роль — ресёрч (полигон-профиль). Периметр: `$0`-сессия чтения кода, ни одного вызова моделей, `backend/` read-only. Материал — 11 склонированных харнессов в `/home/ubuntu/projects/tmp/`. Рекомендации применяются ТОЛЬКО после пере-прогона, отдельным решением. Все Q7-кандидаты — именно **кандидаты**: абсорбирует оркестратор ПОСЛЕ вендор-сверки (правило двух направлений, 10.07). +> **→ ПОСТРОЕНО паком-12 «транспорт-гигиена» (24.07, `7fe0a5b`; отчёт `docs/archive/reports/TRANSPORT_PACK12_REPORT_2026-07-24.md`; отметка 25.07, оркестратор №7):** §1-пункты 1–6/8a/8b/9 реализованы (quota-429→terminal · дробный Retry-After · HTTP/2 keepalive · джиттер · xAI identity-гард · GLM finish-нормализация · пин retryable-мапы · кап billed-decode · models.yaml-валидация); пункты 7 (CostSource) и 10 (луп-гард) — паком-13 (`2f91b04`). DEFER снят; Q7-абсорбция в `00-provider-quirks.md` — по-прежнему только после вендор-сверки. + ## Метод, лицензии, надёжность - **Оркестрация.** 11 репо-агентов (survey Q1–Q6) ∥ 6 провайдер-агентов (quirk-mining Q7-код) → 6 синтез-агентов (по вопросу) + Q7-дедуп → адверсариальная верификация (author≠reviewer): 57 агентов, 0 ошибок. Онлайн-жатва трекеров (Q7) — отдельно, из главной сессии (`gh` + WebFetch). diff --git a/docs/research/22-domain-harness-survey.md b/docs/research/22-domain-harness-survey.md index 4bea9d06..9fb151b4 100644 --- a/docs/research/22-domain-harness-survey.md +++ b/docs/research/22-domain-harness-survey.md @@ -2,6 +2,8 @@ > **РЕВЬЮ-ШАПКА ОРКЕСТРАТОРА (лендинг 24.07.2026).** Отчёт прошёл ДВА рубежа самой сессии (19-агентный по чужому коду + 9-агентный адверсариал собственного синтеза, поймавший её же факт-ошибки — ревизия 2 их вшила). Мой спот-чек при лендинге: 5/5 несущих клеймов сошлись байт-в-байт (наши `detectCJKLeak sanitizer.go:188/411` · `cheapgate-v4 cheapgates.go:55` · `ledger Reserve/SettleWithCheckpoint` — существуют; их AiNiee `ProofreadTask` typed-error→адресный proofread и GalTransl `GenDic` greedy set-cover — ровно как заявлено). **Флаг «D39.7-коллизия» разрешён: коллизии нет** — «риг-стандарт D39.7» в промтах/доках означает стандарт, УСТАНОВЛЕННЫЙ решением D39.7 (exp15: per-vote/полные окна/floor), а не отдельный D-номер рига; подпись в `eval/rerun2_judge/judge.py` корректна как ссылка на стандарт. Рекомендации §2 — кандидаты, абсорбция по решениям в PROGRESS/D-логе; оценка важности и маппинг в планы — отчёт оркестратора владельцу 24.07. +> **→ ПОСТРОЕНО (25.07, оркестратор №7):** разрыв Q6 «gating+repair» закрыт паком-16 (D39.24, `2d7f589`) — слой-3 diff-редактор по прецеденту AiNiee ProofreadTask: позиционная детекция `checks.RepairCandidates` (`internal/checks/repair.go`) + read-only скан остатка + машинерия ремонта за `enabled:false`; включение платного пути = решение владельца по замеру остатка; промпты ремонта — `prompts/<пара>/repair/<класс>.md`. + > **Ресёрч-сессия, 2026-07-24. Роль — ресёрч ($0: ни одного вызова моделей, чужие тулзы не > запускались, ключи не тронуты; `backend/` read-only). НЕ закоммичено — лендит оркестратор.** > **РЕВИЗИЯ 2 (после второго адверсариального рубежа, см. §0).** Сиквел research/21 (транспорт