textmachine/docs/architecture/09-target-architecture.md

151 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Целевая архитектура и дорожная карта (арх-ресет 2026-07-13)
> **Статус:** проектный документ оркестратора, ратифицирован **D39** (`05-decisions-log.md`). Рождён из арх-ресета
> (`../archive/prompts/ORCHESTRATOR_ARCH_RESET_PROMPT_2026-07-13.md`, 5 концернов владельца) и синк-аудита «сломанного телефона»
> (`../archive/architecture/08-sync-audit-ledger.md`, 65 находок, адверсариально верифицированы; архивирован 25.07 как отработанный). Решения владельца по подходу:
> **фазовый** (build-now ∥ ресёрч, пере-прогон после) + **слой пар языков = сеам сейчас, контент только zh→ru**.
>
> Это карта «куда и почему», а не пошаговая спека. Спеки — в хендофф-промтах сессий; контракт — в D-логе.
> ⚠ **КАК ЧИТАТЬ ШАПКУ (освежена 05.09 — оба пака 05.09 отражены в строках слоёв: `81a89e9` движковый «денежный стоп», акт D39.206; `7e2226a`+`3e84716` платформенный «пустить внутрь можно», акт D39.201).** Таблица «слой → статус → пак/D» ниже — единственный статус-борд этого файла: она БЬЁТ тело документа, а D-лог бьёт её. **Хроники лендингов паков здесь больше нет** — кто что построил и когда живёт в журнале решений: `05-decisions-log.md` + реестр `05-decisions-index.md` + слайсы `../archive/architecture/` (эры D39.100D39.190 покрывают всю стройку платформы, шва, писателя книги и числа согласия).
> ⚠ **ЗАКОН РАСКРЫТИЯ (D39.181) — норма зоны `backend/`, а не пункт одного пака:** число, которое движок публикует, обязано ехать со СВОИМ БАЗИСОМ, а присутствие поля не может быть булевым признаком, если оно перестало им быть. Из него же — `config_drift_basis` в `status --json` и леджер доставки в кадре `finished` (`StreamVersion` 1.2, D39.182 §4). **D39.182** («деньги и честность выдачи») добавил класс BANK в разложение денег и `noteSourceVintage`.
> ⚠ **ПОСТРОЕНО, но в семь слоёв НЕ укладывается** (движковые оси рядом со слоями — читать шапку как полную нельзя без них): объёмный потолок оплаченной работы `--max-units`/`VolumeStop` (`backend/internal/pipeline/volume.go`, D39.170; ратифицированная единица продажи — D39.165 §1) · гейт схемы движка (`backend/internal/store/sqlgate_test.go`, D39.173: каждый SQL-оператор компилируется против схемы, поднятой продовой цепью миграций) · дверь правок банка `POST /books/{bookId}/bank/corrections` смонтирована синхронно (D39.162) · ключи деплоя доезжают до движка аргументом `--keys-file` (строка 211 ЗАКРЫТА, блокером живого прогона больше не является) · полоса прогресса СКВОЗНАЯ, подпись стадии — второе исключение границы (D39.162/163) · пере-проход можно КУПИТЬ (D39.166) · инъекция банка не теряется на провайдере с одним системным слотом (D39.164) · **ЧИСЛО СОГЛАСИЯ НА ПУТИ ВТОРОЙ ПОКУПКИ (03.09, D39.187):** пере-покупка прайсится по модели, которую стадия резолвит СЕЙЧАС, с округлением ВВЕРХ и оговоркой в тексте согласия (D39.150 п.1) — а **обещание точности снято с провода** во всех пяти местах, где стояло: контракт механизма теперь «не точность, а НАПРАВЛЕНИЕ ошибки — никогда не занизить молча»; фигура едет с базисом двумя новыми полями `status --json` (`rebill_historical_rows` · `rebill_model_moved_rows`) · **слот объёмного гранта (вторая половина строки 232):** юнит, начатый прежним прогоном и не отгруженный по оси `finalStageWave`, дописывается ВНЕ гранта и слота повторно не тратит ⚠ **следствие денежное и НЕ ратифицированное:** грант `--max-units N` оплачивает ДО 2N выходных юнитов (замер приёмки: грант 2 → четыре юнита, шесть вызовов провайдера), слово владельца 03.09 — «подумаем на этот счёт», до его решения `--max-units` держит СЛОТЫ, а деньги держит только `--ceiling-usd` (эррата 03.09-а к D39.170).
> ⚠ **Канон контракта — 0.12.0** (`D39.211`, лендинг 06.09: заказ по размеру перестал притворяться заказом в главах), не 0.11.0, не 0.10.0, не 0.9.0 и не 0.4.0. Носители — `docs/architecture/14-api-contract/openapi.yaml` и `platform/internal/httpapi/capabilities.go`, они сходятся гейтом.
>
> ⚠ **ПЛАТФОРМЕННЫЙ ШОВ — что построено 03.09 (D39.188, пак P13).** Оплаченный прогон продолжается на ТЕ деньги, за которые продан: `reopen` читает бюджет ИЗ ХОЛДА первой попытки, а прогон без холда отвечается ОШИБКОЙ, не цифрой (прежде бюджет пере-выводился по текущей ставке — `PD-168`) · **владение потоком переживает проход свипа:** чтение ОСТАНАВЛИВАЕТСЯ на чужом handshake'е (`ErrForeignStreamAhead`), потому что до этого чужие события ложились на оплаченную попытку — чужой `ceiling` ставил `paused` живому прогону, `unit_done` писал непокупленные главы (`PD-438`, major) · операторские ручки: `run unquarantine` и колонка QUARANTINE · условия хоста батареи ВЫВОДЯТСЯ из тестовых исходников (`make conditions`), а не держатся списком в прозе · два гейта в `platform/internal/gates/`: перечень условий против исходников и класс «тревожный ряд ушёл из счёта незамеченным». ⚠ **Бамп формы манифеста безопасного порядка деплоя НЕ ИМЕЕТ ни в одну сторону** (`PD-436`): гейт интейка — строгое равенство одной константе, окна двух форм нет ⇒ стоп-мир. Пока окно двух паков открыто, форма ЗАМОРОЖЕНА (D39.190 п.5).
>
> **ВХОДНАЯ ДВЕРЬ ШВА ПОСТРОЕНА** (D39.158): закон двери — `17-seam-inbound-law.md`, онтология банка, который она обслуживает, — `18-bank-ontology.md`. **Шапка — не переписывание: тело ниже = замысел арх-ресета 13.07**, и при расхождении тела с шапкой первична шапка.
> | Слой | Статус | Пак / 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; **включение платного пути = решение владельца по замеру остатка**; эмпирика контракта: диффы ОТЛОЖЕНЫ (D39.108, экспы 19/20; D21.4/D21.10 закрыты), full-regen ПОДТВЕРЖДЁН, точечная починка как ЗАМЕНА редактора отклонена и принята формой «механический пре-гейт ПЕРЕД редактором» (D39.117; строка 142, строка 106 понижена) | пак-16 (D39.24), **D39.108**, **D39.117** |
> | 4 Память | ✅ ПОСТРОЕН + ДОСТРОЕН паком-20 + ✅ **ВХОДНАЯ ДВЕРЬ ПОСТРОЕНА (D39.158)**: $0-глагол `tmctl bank-apply` (проекция `--dry-run`, всё-или-ничего, байтовый no-op идемпотентен), писатель решений `internal/membank/decisions.go`, стоп банка — ФЛАЖОК, который движок чтит сам (память предъявления `bank_stop_presented`, схема store v16), класс отказа 15 `write_incomplete`. Роли носителей и поток «источники → вид → проекции» — `18-bank-ontology.md`; состав пака-20 (ТЕРМИНОЛОГ · флаговый стоп `--verify-bank` · двухсекционная редакторская инъекция · точечная ре-редактура · банкнота отдельным шиппинг-файлом · языковой экран `target_script`) — D39.4145/5053; ⚠ D39.104 п.2 ВНЕСЁН (испр. 05.09): инъекция схлопнута в ЕДИНЫЙ закон-блок, маркер ⟨проверить⟩ с провода СНЯТ — отработано вайр-батчем, пак принят D39.199 (`74ffe4f`), строка 134 закрыта; жанровый словарь ОТМЕНЁН (D39.47) | пак-1 · пак-11 · **пак-20 (D39.4145/47/5053)** |
> | 5 Качество | ✅ детерм. часть: `QualityReport` · число/omission-гард · DC/пак-13-чекеры · repair-остаток; семантический span-судья/полярность — НЕ строился (защита = editor-swap, D38.4) | D39.2 · D38.3 · пак-13 (`2f91b04`) · пак-16 |
> | 6 Export | ✅ **ПЛАТФОРМЕННАЯ половина ПОСТРОЕНА 06.09** — что именно и с какой ценой, ОДНИМ носителем: `15-money-path.md` §3 (акт `D39.208`). Здесь только статус, механика не дублируется. ✅ ДВИЖКОВАЯ половина ПОСТРОЕНА: `checks.ExportNormalize` на каждом финале; санитайзер-классы strip+export · **писатель книги: `internal/bookfile` + `tmctl build` (EPUB 3 + txt, D39.175)**; холодный прогон 31.08 предъявил собранный EPUB настоящего перевода, `epubcheck` 0/0/0/0. ✅ **ПЛАТФОРМЕННАЯ половина ПОСТРОЕНА 04.09, ЦИКЛ ЗАМКНУТ ЖИВЬЁМ** (`adf5e53`, D39.194): пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0. Дверь — три адреса (`createExport`/`getExport`/`downloadExport`), `202`+`Location`, поллинг с `Retry-After`, Range 206, TTL с уборкой, идемпотентность. Проверка вместо счёта: `grep -rn 'createExport\|getExport' platform/internal/ --include=*.go` → НЕ пусто; операций в каноне 21, смонтировано **19** (испр. 05.09: `updateBook` смонтирован платформенным паком `7e2226a`). ⚠ **СТЕНА ДЕСЯТИ ГЛАВ СНЯТА 05.09, НО ПОЛ ОСТАЛСЯ — ДОЧИТАТЬ ДО КОНЦА ПО-ПРЕЖНЕМУ НЕЛЬЗЯ.** — движковый пак `81a89e9` (акт D39.206) снял стену: отказ резервации ЗАЩЁЛКИВАЕТ волну, а обязательный вызов ЖДЁТ settle; порог «короче десяти глав не переводится» СНЯТ, остаточный пол — одна резервация (~3 главы) и он ВЫВЕДЕН, не замерен. Разбор — `15-money-path.md`, греп `ЭРРАТА 05.09`. ⛔ **Инвариантный пол: даже при ОДНОМ воркере прирост потолка `2 × $0.03 = $0.06` меньше одной редакторской резервации (~$0.07), то есть ПОСЛЕДНИЕ ~2 ГЛАВЫ любой книги не покупаются** (`15-money-path.md`, греп `даже при ОДНОМ воркере`). Защёлка тут не помогает — она делает стоп штатным, а не финансирует последний вызов. Снимается ПЛАТФОРМЕННОЙ половиной (потолок ДЕНЬГАМИ, `D39.196`, строка 280), которая НЕ построена: `git grep -lE "StepMax|step_max" -- platform/` → пусто. ⚠ **Пол ВЫВЕДЕН, не замерен** (платного прогона не было — D39.206 п.6). ⇒ `PD-440` жив в ЭТОЙ половине: его волновая часть починена движком, денежная — нет | D39.2 · D38.3 · D39.175 · D39.178 |
> | 7 Гигиена | ✅ ПОСТРОЕН: реестр role→инъекция · вынос `foldModelWire` · снос сирот/`gatesEnabled` · **target-aware гейты ПО ДАННЫМ — П1 «цель-шов» (фаза 2, D39.64: `isRuTarget` удалён, `TargetActive`/`TargetScriptNonLatin`, токенизатор цели из `word_script`); остаток — ё-фолд/segmentation за подписью (бэклог-строка 14)** | D39.2 · паки 1116 · **фаза 2 (D39.64)** |
>
> **Общность (фаза 2) ИСПОЛНЕНА И ПРИНЯТА — D39.64**, отчёт `../archive/reports/GENERALITY_PHASE2_2026-08-01.md`: П0 хеш эмбед-данных (`embedded_version` в снапшоте) · П1 цель-шов (слой 7) · П2 скрипт-шов источника (`lang-script.txt`) · П3 нарезка/оценка (один дом `DenseScript`) · П4 манифест-по-каналам (`packAlgoVersion` не бампался); голден вердикт-нейтрален (0/172); П5 майнер гейтится второй книгой; 9 флагов §5 — очередь владельца (бэклог-строка 14). **Карта языковой привязки ВСЕГО движка — `../archive/reports/GENERALITY_RESEARCH_2026-07-31.md` (D39.60)**; пак-19 «голос/состояние» — D39.5456.
> **Снято из тела как прожитое, адреса — здесь.** §1 «как есть 13.07» (const-чанкер · glm-редактор · мёртвые `STMDepth`/`OverlapTokens` — ничего этого в коде больше нет): пофакторный разбор каждой находки — `../archive/architecture/08-sync-audit-ledger.md`. §4 «дорожная карта» отработана целиком: трек A = слои таблицы выше, трек B исполнен (exp15/exp16 — программа ЗАВЕРШЕНА, D39.7/D39.10), гейт пере-прогона пройден фактом rerun2 (D39.20; планка ≤2 НЕ пройдена, эксп ЗАКРЫТ D39.22, редактор = deepseek-v4-pro интерим). Канал B — пак-17 **ЗАКРЫТ ЦЕЛИКОМ** (дизайн D39.26 · стройка D39.27 · дельта D39.28: действия `route|allow|terminal`, `permissive`/`Stage.Channel`/D4.1-блок отставлены, `failover.go` удалён; вокабуляр = ПАРА `violence`/`sexually-explicit`; `accepts_labels` fail-closed); ⚠ **испр. 28.08 (D39.168): факты ToS предъявлены, поля ЗАПОЛНЕНЫ у трёх эндпоинтов (`backend/configs/models.yaml`, греп `accepts_labels`) — механизм fail-closed жив, но «пусты у всех» больше не факт.** Инженерная форма — **D39.25**: в движке НЕТ понятия «18+», есть generic content-labels × provider-capabilities, refusal причино-агностичен; «18+ линия» в §6 читать как продукт-линию, не механизм движка.
---
## 0. Стратегический вывод аудита (почему ресет)
Потолок художественности сейчас — **в НАШЕЙ организации пайплайна, а не в моделях.** Эмпирика (exp1214b) и
код-аудит сошлись: дефекты, которые владелец назвал «крайне слабо художественно» (рубленые абзацы + «непонимание
связей»), рождаются из **нарезки, структуры редакторских проходов, контракта переводчик/редактор и отсутствия
меж-чанковой когезии** — всё это архитектура, не выбор модели. Это подтверждает трек «дешёвые модели сейчас»
(D30.7) и переопределяет источник следующего прироста качества: **он архитектурный.**
Ключевое свойство проблемы: **рычаги сцеплены.** Редактор репараграфизует ВНУТРИ ~1500-токенного чанка → он
физически не может чинить когезию через границу чанка → нарезка (концерн 2) жёстко ограничивает потолок
дискурс-переверстки, которую мы требуем от редактора (концерн 1). Поэтому чинить их порознь = снова получить
локальный оптимум на неверно нарезанном тексте (ровно «слабый тест» exp14). **Концерны 1, 2, 4 проектируются
вместе.**
## 0.1 Инвариант общности (поправка владельца, 2026-07-13) — НЕСУЩИЙ
**Цель — перевод ЛЮБОЙ книги, ЛЮБОЙ пары языков, написанной ПО-РАЗНОМУ.** Ни один компонент не смеет предполагать
структуру конкретной книги (蛊真人) или конкретную пару (zh→ru). Из этого:
- **Чанкер = ОБЩИЙ адаптивный модуль:** характеризует структуру КАЖДОГО входа в рантайме (плоский CJK line-per-
sentence · сцен-маркированный · длинно-абзацный европейский роман · ja-ранобэ · смешанный) → выбирает стратегию
границы → фоллбек-лестница. Он обязан работать корректно на всём спектре, а не на одной форме.
- **Разница «продукт» vs «эксперимент»** (моя ошибка, которую поправил владелец): чтобы ИЗМЕРИТЬ рычаг эмпирикой,
нужен тест-текст, который его задействует — это ограничение ДИЗАЙНА ЭКСПЕРИМЕНТА (валидируй на разнообразном
корпусе), и оно **никогда** не переносится в scope продукта («книга плоская → урежем нарезку» — ЗАПРЕЩЕНО).
- **Пер-язык (слой 2)** — та же логика: строим ОБЩИЙ сеам, контент наполняем инкрементально (zh→ru сейчас); новая
книга/пара = данные (пакет конвенций), не переделка кода. «Бэкенд только под русский/под одну книгу» = антицель.
- **Эмпирика валидирует ОБЩНОСТЬ** (корректность+near-оптимум на структуро- и языко-разнообразном корпусе), не
оптимизирует под книгу на стенде.
---
## 1. Снимок «как есть» на 13.07 — СНЯТ
Раздел описывал состояние ДО стройки (const-бюджет чанкера 1500 в символах источника · билингв-редактор glm-5 с 4 мандатами одной перегенерацией · мёртвые config-кнобы `STMDepth`/`OverlapTokens` · zh→ru-промпты фикс-путём) — ничего этого в коде больше нет, статусы построенного см. в таблице шапки. Пофакторный разбор того состояния, находка за находкой (`L1-*`/`L2-*`/`L3-*`/`L4-*`), — `../archive/architecture/08-sync-audit-ledger.md`, карта находок → слои — §3 ниже. Столпы, которые аудит велел НЕ ломать (деньги/durability, snapshot-дисциплина, эталонные сеамы `config→stage-list` и `baseRequestLog`, дословный перенос техник Ван Цуй, структурные few-shot, разделение переводчик/редактор), — §6.
---
## 2. Целевая архитектура — 7 слоёв с чистыми сеамами
> ⚠ **ЧИТАТЬ КАК ЗАМЫСЕЛ 13.07, А НЕ КАК ДЕЙСТВУЮЩЕЕ ПРЕДПИСАНИЕ** (баннер дописан 22.08 аудитом
> доков: у §1 и §4 такие оговорки были, у §2 не было — и его читали как норму). Что этот раздел
> предписывает, а стройка с тех пор отменила, видно из ШАПКИ-ТАБЛИЦЫ ЭТОГО ЖЕ ФАЙЛА: например
> меж-единичная когезия («оживить `STMDepth`/`OverlapTokens`») — эти кнобы УДАЛЕНЫ, эффекты замерены
> под флором и когезия НЕ строится (D39.7/D39.8, слой 1). **При расхождении раздела с шапкой первична
> шапка, при расхождении шапки с D-логом — D-лог.**
Вместо 65 заплаток — слои, каждый первоклассный, независимо конфигурируемый и снапшот-folded. Ровно они закрывают
5 концернов.
### Слой 1 — Сегментация (чанкер-модуль) · концерны 1+2
- Размер бюджета — **снапшот-folded config-кноб в ВЫХОДНЫХ токенах** (не const, не в símволах исходника), чтобы
пре-регистрированная кривая полигона могла приземлиться как настройка. Механизм fold уже есть (`coverageSnap`).
- **Стратегия границы** — first-class ось: `greedy` (как сейчас) | `logical` (сцена/диалог/тема) — с фоллбек-лестницей
и инвариантом «никогда не резать предложение». Наполнение стратегии `logical` — по интернет-best-practices + ресёрч.
- **Декаплинг edit-единицы от draft-единицы** (бывший фантомный «D35.7»): черновик — мелкий чанк (COGS/coverage/
выравнивание); reflow/edit — крупная дискурс-единица (глава/сцена), где антецеденты со-встречаются.
- **Меж-единичная когезия**: оживить `STMDepth`/`OverlapTokens` — running bilingual summary + carryover соседних
единиц как read-only контекст. (⚠ exp14 «крупнее лучше» и research/18 §A «мелкий чанк + carryover» **конфликтуют**
решает ресёрч-матрица, см. §4.)
### Слой 2 — Конвенции пары языков (pair-keyed pack) · концерн 4
> Консолидированная заметка по всей промпт-теме (инвентарь, статусы, открытое) — `10-prompt-architecture.md`.
- Версионируемый пакет, ключ `src→tgt[×genre]`, снапшот-folded (правка = громкий `--resnapshot`, как `chunkerVersion`).
- Держит: дискурс-правила, few-shot (в языке пары), транскрипцию/хонорифики, **и язык самого промпта** (свойство
пакета — не хардкод русского).
- Стадия резолвит промпт/правила из слоя по паре книги, а не из фикс-пути. `Book.LangPair()` оживает как ось выбора.
- **Высота сейчас (решение владельца):** построить СЕАМ, наполнить только zh→ru; другие пары — когда придёт книга.
Убирает латентный баг (ja-книга едет через «китайский паратаксис»-промпт) и разблокирует расширяемость дёшево.
- **⟶ Что из этого ПОСТРОЕНО** (статусы и номера паков — таблица шапки): данные-часть вынесена в `internal/lang`+`configs/langpacks/`
с компиль-enforced границей и резолвом по `Book.LangPair()` (D39.16), пар-калибровки `configs/pairs/` и промпт-конвенция
`prompts/<пара>/<роль>.md` — паки 14/15 (D39.23г). Открытым остаётся извлечение правил из ТЕЛА промтов (дискурс-нормы, few-shot);
форсинг-функция — ja→ru-реплика. `x/text/language.Tag` для гейт-предикатов ОТВЕРГНУТ (CLDR-инстабильность в снапшот-вердиктах) —
исполнено иначе D39.64: `TargetActive`/`TargetScriptNonLatin` из данных пары.
### Слой 3 — Контракт переводчик/редактор (роли = узкие проходы) · концерн 1
- research/07 предписывает **узкие мандаты + диффы, а не полную перегенерацию** — сейчас ровно наоборот (4 мандата,
full-regen), что и породило хвост инверсий.
- Целевой контракт: переводчик отдаёт **структурный ~верный черновик**; редактор — узкая правка смысла+стиля,
в идеале **diff-based** (search/replace-спаны + детерм. Go-apply → ограниченный blast-radius, дешевле, аудируемо,
структурно omission-safe). Между проходами — гейт.
-**Арм «переводчик отдаёт структуру» ДО СИХ ПОР не тестировался** — это Q4c (reflow отдельным проходом), единственное неизмеренное плечо; измерены только соседи: Q4a (верность на translate-стадии не покупается, D39.9) и Q4b (диффы ОТЛОЖЕНЫ, D39.108), топологию решил эксп-21 (D39.117). ⚠ испр. 02.09: «решает ресёрч-матрица §4» СНЯТО — §4 отработан, маршрут вопроса теперь `10-prompt-architecture.md` §4 п.4 + `experiments/19-editor-contract-q4b.md` §«Границы».
### Слои 47 — тело замысла СНЯТО, адреса здесь
Слой 4 «Память» · 5 «Измерение качества в контуре» · 6 «Export-contract» · 7 «Гигиена расширяемости» стояли здесь предписанием 13.07; всё предписанное построено либо отменено, действующие статусы с номерами паков — **строки 47 шапки-таблицы**, пофакторный разбор находок с диспозициями — `../archive/architecture/08-sync-audit-ledger.md`, эталонные сеамы `config→stage-list`/`baseRequestLog` — §1 и §6. Единственный код-факт, которого шапка не несёт: редакторский блок памяти рендерится src→dst-мэппингом, CONFIRMED-only, форма зафолжена в снапшот — D1-моно-рационализация убрана, «давать ли билингв-редактору src→dst» больше не открытый вопрос (`internal/membank/memory.go`, греп `RenderEditorConstraintBlock` и `RenderFormatVersion`; D39.13, пак-11 WS2).
---
## 3. Карта находок → слои (полный ледджер — `../archive/architecture/08-sync-audit-ledger.md`)
Пофамильный перечень `L1-*``L8-*`/`H1``H5`/`H12`/`H14` по слоям 17 СНЯТ: все они закрыты стройкой (статусы — шапка-таблица), а тела находок с диспозициями живут в ледджере. Живой остаток — только процессная строка:
| Слой | Несущие находки (HIGH, CONFIRMED) |
|---|---|
| Процесс (к.5) | `H18-no-standing-findings-ledger-process` + незакрытые владельческие: `H6` running-summary, `H7` input-size-limit, `H8` abuse-prescreen, `H9` parallelism/speed (V4-п1), `H15` glossary-auto-build (V4-п4), `H10` user-stop, `H16` self-improvement |
---
## 4. Дорожная карта 13.07 — ОТРАБОТАНА (тело снято)
Статус обоих треков и гейта пере-прогона — в шапке; фантом «D35.7» формализован (D39 п.4, разбор `../archive/architecture/08-sync-audit-ledger.md`). Что из трека B переживает статус: граница `logical`**не рычаг НА ЭТОМ МАТЕРИАЛЕ**, когезия под флором (**D39.7/D39.10**), и **скоуп замера — книги класса zh-вебновелла, а не весь спектр §0.1**; конфликт exp14 ↔ research/18 §A решён этими же нотами; методика-guard замеров — **D32.4** (fidelity-first · leave-one-out · катастроф-скрин: полигон трижды собирал ложную сходимость).
⚠ Ограничение дизайна эксперимента, которое НИКОГДА не переносится в продукт (§0.1): плоский тест-срез не задействует рычаги границы/когезии, поэтому «не сработало на нём» ≠ «не нужно в движке».
---
## 5. Процесс против «сломанного телефона» (концерн 5)
Постоянный **findings-ledger** — замысел ИСПОЛНЕН и повторяется: первый экземпляр `../archive/architecture/08-sync-audit-ledger.md` (там же словарь диспозиций и правило «трекать до закрытия»), сегодня — `../DOC_CLEANUP_PLAN.md` (⚠ испр. 05.09: `DOC_REVISION_FINDINGS.md` живым больше не существует, он в `../archive/reports/DOC_REVISION_FINDINGS_2026-09-02.md`; живой findings-ledger сегодня — строки бэклога), `backend/docs/SEAM_PACK_FINDINGS.md`, реестр нот D39.126.
**Живой остаток:** вопросы «к бэкенду» из ресёрча маршрута обратно так и не получили (`research/18` §D, п.7 помечен «вопрос бэкенду»).
---
## 6. Что НЕ демонтируется
Столпы (деньги/durability, snapshot-дисциплина, детерминированный банк памяти как ставка, echo-гейт, 18+ линия,
дешёвый трек, конфиг-первое ядро) — целы. Целевая архитектура — это **декомпозиция и до-стройка** существующей
машинерии по чистым сеамам, а не переписывание. Фронтир-тир остаётся «потом» (новый yaml, не переделка кода).