# 34. Банк памяти и качество перевода — что он держит, чего не держит и что доработать > ## ⚠ РЕВЮ-ШАПКА — прочти прежде содержимого > > **Статус: ФАКТУРА, НЕ РАТИФИЦИРОВАНА.** При конфликте с журналом решений побеждает журнал. > > **Откуда взялось.** Вопрос владельца 11.09: «что для качества перевода надо в банке памяти доработать». > Разобрано веером из 21 агента (2.7 млн токенов, 958 обращений к инструментам) — пять читателей по осям, > затем адверсариальная верификация КАЖДОЙ находки с мандатом «опровергни». > > **Дисциплина, с которой это читать.** Верификация **отвергла 14 находок из 15** — и почти все не за > ложность, а за **завышенный вес** или **нулевую новизну** (предмет уже стоит строкой бэклога либо объявлен > в том же доке, откуда взято число). Формально подтверждена ОДНА (`K3`, вопрос пост-проверки). Синтез ниже > написан ПОСЛЕ верификации и несёт её поправки — в частности, снято утверждение «канон ни разу не подан в > прогон» (неверно: ключ `glossary_seed` задан в 18 конфигах дерева). > > **Чего здесь нет:** суждений о качестве перевода на целевом жанре. Всё ниже — про МЕХАНИЗМ и его > наблюдаемость. > > ⚠ Числа сняты 11.09 на дереве `f9216cd`. Адреса `file:line` пере-снимать командой: движок двигали пять > паков за неделю. # ЧТО В БАНКЕ ПАМЯТИ НАДО ДОРАБОТАТЬ ДЛЯ КАЧЕСТВА ПЕРЕВОДА ## 1. Что банк гарантирует сегодня Одну вещь, и делает её сильно: **там, где термин ЕСТЬ в банке и его поверхность выстрелила в куске, модель видит одну и ту же строку.** Это подтверждено четырьмя независимыми A/B: переводческий провод 43 % → 95 % (`docs/research/24-bank-arbitration.md` §C, 21 клетка, 6 окон), редакторский 8–15/21 → 21/21 (`docs/experiments/18-editor-wire-probe.md` §A.1), 0.53 → 0.92 на 163 упоминаниях и 0.566 → 0.820 на 228 (`docs/experiments/21-role-topology.md` §14, §16.1). Заголовочные «99,3–100 %» дала именно эта **инъекция**, а не проверка. Чего он **не** держит — шесть границ, каждая названа кодом или замером: - **Второй передачи рядом с канонной не видит.** Вопрос пост-проверки — «есть ли dst где-нибудь в куске», а не «какой формой отрендерён термин» (`backend/internal/membank/mempostcheck.go:139` → `if present { continue }`). «Фан Юань» и «Фанъюань» в одном абзаце дают 0 промахов (исполнено на копии). Сплошной дрейф — ловит. - **Неверного dst, которому модель послушалась, не видит по построению** — код сам называет это BLIND SPOT (`mempostcheck.go:18-26`). - **Термина, которого в банке нет, не видит вовсе** — молчание неотличимо от успеха. Порог добычи: реже 5 раз в книге термин не предлагается никогда (`backend/internal/miner/miner_emit.go:26`), потолок предложений — 200 на книгу (`:31`). - **Книжного вопроса не задаёт ни разу.** Все 4 не-тестовых вызова проверки — по чанку или правочной единице (`waverun.go:618`, `:738`, `repair.go:630-631`); книго-широкое — это суммы поколоночных счётчиков (`quality.go:270-272`). Никто не сравнивает главу 12 с главой 901. - **Остановить отгрузку может ровно одно место — `export.go:463` — и оно выключено везде:** `postcheck_gate` — 0 вхождений в `backend/configs/` при живом блоке `gates:` в 4 конфигах из 4 (пере-замерено мной); 0 из 281 сохранённого снапшота прогона нёс его включённым. 317 подтверждённых промахов глоссария отгружены. - **Голоса до модели не доезжают вообще:** `InjectVoice` — константа `false` без ручки (`bankmaterialize.go:295`), в промте переводчика 9 плейсхолдеров и 0 про персонажа, `gates.voice` — 0 в конфигах, а сам флаггер объявлен «PURE observability». Одной фразой: **банк — это замок на входе в запрос и счётчик на выходе. Замка на выходе нет, книжного вопроса нет, и половина того, что вы называете каноном («голоса»), до запроса не доезжает.** ## 2. Что доработать в банке — пять предметов **(1) Книжный свод расхождений — $0, день. Без него приоритет непроверяем в принципе.** Мера «сколько РАЗНЫХ форм дал один термин» уже построена: `Spread` и `Variants` в `backend/internal/pipeline/mining.go:383-384`. Но считается она по ЧЕРНОВИКУ, на стопе майнинга, ДО редакторской волны, и читает её только человеческая таблица подписи. Перенести тот же счёт на **отгружаемый текст** и печатать отчётом сборки: «термин X отдан тремя формами в главах 12, 340, 901». Ни одного платного вызова, переиспользование готового. Предмет не пуст: полигонный прибор на стенде дал 13–16 % терминов с более чем одной передачей и 6–8 % сменивших доминирующую форму (`docs/archive/PROGRESS-2026-09-07-16-backend-packs.md:2908`). Это единственная работа, которая делает качество ПРЕДЪЯВИМЫМ. **(2) Спросить проверку о правильном — день (дешёвая половина).** Сегодня проверяется присутствие в куске; надо — форма на месте срабатывания и наличие конкурирующей рядом. Живой экземпляр измерен: `古月方源` заведён алиасом записи `方源` («Фан Юань»), выход «Гу Юэ Фан Юань» её содержит ⇒ промаха нет, а ваш подписанный канон `古月 → Гуюэ` (`books/gu-zhenren/guzhenren-seed-v2.yaml:38-39`) нарушен внутри составного имени. Дешёвое лечение названо самим полигоном: проверять алиас-ключ на СОБСТВЕННУЮ канонную форму. Дорогая половина (детектор значения по исходнику) — за замером, не сейчас. **(3) Досеять ДАННЫЕ банка — день, и это прямо чинит точность. Не Go.** Три дыры в данных, из-за которых прибор врёт: (а) глагольные и многословные термины засеяны с пустыми формами — один `炼化` дал 7 ложных промахов и в одиночку пробил метрику прогона; (б) односимвольный ханьский ключ структурно вне автомата без `allow_short` (порог 2 знака, `membank/memory.go:71`), а это самый частый класс канона в китайском ранобэ — 蛊, 道, 气; (в) сид-линт об этом молчит. Цена бездействия измерена: у глоссарного класса чекера **точность 0,067 — 1 верное срабатывание на 14 ложных (n=258)**, и из 14 ложных **6 приходятся на один односимвольный `转`, ещё 4 на `蛊虫`** (`books/gu-zhenren/labels/metrics.json`). Именно из-за этой цифры гейт и не включают. **(4) Редактор — источник разнобоя, а не страховка поверх банка. День + один заказ.** Замерено дважды: без закон-блока редактор ломает 5–12 из 20 уже ВЕРНЫХ клеток черновика (exp18 §A.1), а с подключённым банком боевой редактор держит ХУДШЕЕ покрытие канона в панели — 0.882 против 0.909 у черновика, который он правит (exp22 §6.2, чистый материал, 1124 упоминания). Два механических носителя: черновая волна выбирает по БАЗОВОМУ банку с исключением намайненного (`bankmaterialize.go:329`) — то есть на первом прогоне книги черновик идёт вообще без добытого банка; а редакторская волна, единственная с полным банком, теряет липкость между правочными единицами внутри главы (`waverun.go:717`, `nil`) при **86 % многоединичных глав (1962 из 2283)**. Закон-блок должен стать инвариантом конфига, а не следствием выбора модели редактора. **(5) Голоса — узел без провода. Это не «доработать», это сначала ваш ответ (см. §4).** Мёртв в четырёх местах сразу: нет данных (0 непустых секций `voices:` из 47 сид-файлов дерева), нет производителя (майнер профили не эмитит — 0 упоминаний в 10 его файлах), нет инъекции (константа), нет запущенной проверки. И **ни одного числа за всю историю проекта**: носитель журнала обращений живёт в 6 Go-файлах и не встречается ни разу в 66 полигонных и ресёрч-доках (контроль: слово «канон» в тех же 66 файлах — 333 раза). Чего в списке НЕТ намеренно: бюджет инъекции. Ходящее число «кап течёт на 40–60 %» считает ЭМИССИОННЫЙ кап майнера, а не бюджет провода. Бюджет не выбросил ни одной строки ни в одном прогоне дерева: **сумма вытеснений по 161 базе = 0** при живых соседних колонках (5885 точных попаданий, 2979 липких, 510 неоднозначных). Тратить на это не надо. ## 3. Что нельзя решить работой — ждёт замера на настоящей книге Это определяет, что закладывать в прогон. - **Точность и полнота проверки на подписанном каноне.** Сегодня 0,067 (выше), и ложные срабатывания сконцентрированы в одном классе: односимвольные и общеупотребительные ключи. ⚠ **Здесь ратифицированная формулировка неточна и это надо поправить прежде, чем строить по ней порядок работ:** «канон ни разу не подан в прогон, весь дрейф — дрейф с отключённым каноном» верно ТОЛЬКО про исследовательский стенд (там 0 из 30 конфигов несут ключ сида). В дереве 18 конфигов задают подписанный сид, пять прогонов держат 36–57 подписанных строк, а весь размеченный корпус — 91 единица — снят с прогонов С каноном. Дрейф ПРИ каноне тоже наблюдён (тот самый `古月方源`). Значит переизмерение — это не «сперва подключить канон», а «разметить класс, которого в корпусе не было», и стоит оно $0 на уже оплаченных артефактах плюс новый прогон. - **Впервые встретить настоящий объём.** Максимальный банк за всю историю дерева — 102 строки на 25 главах; потолок предложений 200, бюджет провода 800 токенов (≈141–180 строк). На 2283 главах оба потолка встретятся с реальностью впервые. **Снять с прогона, а не выводить.** - **Дрейф от потери банка между правочными единицами.** Экспозиция замерена (86 % глав; на срезе 25 глав теряется 49 банковых строк на 12 единицах), самих инцидентов — ноль наблюдений. Правка без замера была бы стрельбой вслепую. - **Кривая деградации по главам.** Её нет ни у кого, включая внешние харнессы. Нужен ряд «глава → число терминов с более чем одной передачей». Снимается $0 ПОСЛЕ прогона — но только если свод из §2.1 построен ДО. - **Порог частоты.** «Реже 5 раз — не предлагаем» ставился на 15 главах пилота. Какая доля канонических терминов настоящей книги живёт на частоте 3–4 — не спрошено ни разу. - **Активный ноль.** Ни один замер банка не нёс контроля «та же книга без банка». Направление подтверждено четырежды, ВЕЛИЧИНА «99,3–100 %» — ни разу. **Что заложить в прогон конкретно:** подписанный сид с досеянными формами и явным `allow_short` у односимвольных; флаг остановки на подпись (иначе банк едет неподписанным по умолчанию); сохранять расхождение форм по ФИНАЛЬНОМУ тексту, а не по черновику; хотя бы один непустой профиль голоса, иначе голосовая половина снова вернётся с нулём, неотличимым от чистоты; книга целиком, а не срез. ## 4. Что требует вашего слова 1. **Стоп или флаг.** Сегодня разъехавшийся термин отгружается: механизм остановки построен и работоспособен, но выключен, и включается ОДНОЙ строкой данных без правки Go. Вы сами отложили это до замера ложных срабатываний («если он ложно положительно будет стрелять — это плохо, очень плохо»). Рекомендация: не включать до §3.1, но решить сейчас, что стоп делает — держит кусок целиком (сегодня это пустая отгрузка) или зовёт точечную перегенерацию; актуатора у промаха нет вовсе. 2. **Входит ли голос в приоритет №1.** Ратифицированный список от 05.09 ставит в №1 ТОЛЬКО термины, голос — №3; канон проекта говорит «термины/голоса». Пока это не одно требование, сессия, собранная по такой формулировке, будет строить от неверной цели. И следом: **подпись профилей вы сняли, а реестр физически заполняла только она — если не подпись, то кто?** 3. **Один перевод у неподписанного термина.** Ваше слово записано, но исполнено только для подписанных. Неподписанных — 92 % строк по всему корпусу баз, 15 % после дедупа по книге (оба числа верны, считают разное: первое — файлы, второе — книги). Три детектора противоречия только пишут в лог. Оба выхода стоят денег: уронить оплаченный прогон либо двинуть версию памяти и пере-купить редакторскую волну. 4. **Накапливать ли банк между прогонами.** Авто-банк переписывается целиком из топ-200 текущего прогона; выпавшие поимённо названы в логе, подписанные защищены тремя стражами, но неподписанная строка едет на провод как закон и может смениться между главами. Слияние двигает версию памяти ⇒ пере-покупка. Код прямо адресует это вам. 5. **Остановка на подпись — опция или свойство продукта.** Сегодня по умолчанию «никогда не останавливаться» (`backend/cmd/tmctl/invocation.go:141`), на API это галочка пользователя. Без неё движок пишет свои строки в банк и отдаёт редактору неподписанный канон — то есть «человек утверждает термины» сегодня не является свойством продукта. --- ## ЗАМЕРЕНО · ВЫВЕДЕНО · НЕ СПРОШЕНО **ЗАМЕРЕНО** (приборы названы; звёздочкой — пере-проверено мной лично в этой сессии, остальное — пятью читателями): - ★ `postcheck_gate` и `voice` в `backend/configs/` — по 0 вхождений при контроле: 5 yaml на верхнем уровне, 8 рекурсивно, блок `gates:` найден в 4 из 4 боевых конфигов. - ★ `injection.txt` несёт РОВНО один целевой ключ `ru` при контроле — 5 ключей (en ja ko ru zh) в соседнем `lang-script.txt`. На любой другой цели оба банк-блока рендерятся в 0 байт (исполнено на копии: ru 366+542 байта, en 0+0, de 0+0). - ★ Не-тестовых вызовов пост-проверки — 4, все по чанку/юниту (`waverun.go:618,738`, `repair.go:630,631`) плюс определение. - ★ По 162 базам дерева: 161 с таблицей состояния выборки, 4865 строк, **сумма вытеснений 0** при контроле 5885 точных попаданий / 2979 липких / 510 неоднозначных; подтверждённых промахов глоссария 317. - ★ Точность глоссарного чекера: n=258, верных 1, ложных 14, пропусков 0 — и все 14 ложных разложены: `转` ×6, `蛊虫` ×4, `元石` ×2, `凡人`, `甲等`; все пять прогонов-источников — С подключённым каноном. - Снапшотов прогонов с включённым гейтом — 0 из 281 (18 «без поля» вскрыты: ручные пробы, не конвейер). - «99,3–100 %» воспроизведены байт-в-байт на копии (375/98.9/100.0 · 390/98.5/99.5 · 531/97.4/99.6 · 548/96.9/99.3) и разобраны: предикат — присутствие принятой формы в чанке, единица — пара «термин × чанк». - Пробы на копиях: смесь двух форм в одном куске → 0 промахов; сплошной дрейф → 1 промах; термин вне банка → 0/0; односимвольный ключ без `allow_short` не выстреливает. - Данные: 47 сид-файлов с терминами, 22 с секцией голосов, 21 из них пустая, непустых живых — 0. Субстрат майнера: zh 48 кандидатов из 120 рун против en 0/504, ko 0/200, катакана 0/160. **ВЫВЕДЕНО** (не замер, помечаю честно): - Что кап 200 и бюджет 800 встретятся с настоящим объёмом: экстраполяция со 102 строк на 25 главах на 2283 главы. - Что потеря липкости между правочными единицами даёт дрейф в тексте: замерена только экспозиция (86 %), инцидентов ноль. - Что вторая передача распространена в отгруженном тексте: 13–16 % сняты на стенде БЕЗ канона; тем же прибором по подписанному прогону не ходили. - Что голоса входят в приоритет №1: канон и ратификация расходятся — поэтому это ваш вопрос, а не вывод. **ЧЕГО ПЯТЬ ЧИТАТЕЛЕЙ НЕ СПРОСИЛИ:** 1. **Полисемия по книге.** Банк — один исходный термин, один перевод, замороженный на прогон. Сцена, где 气 не «ци», в модели банка не существует, и ни один прибор её не ищет. Для 2283 глав это не теоретический класс. 2. **Ёмкость человека.** Весь механизм консистентности упирается в вашу подпись, а сколько предложений на главу выдаст майнер на полной книге и сколько это минут — не смоделировано никем; в реестре рисков эта позиция стоит с пометкой «дыра» и не имеет носителя ни в одном трекере. 3. **Цена самого свода.** Работу из §2.1 все оценивают «день», но время прохода по 5071 чанку полной книги никто не прикинул. 4. **Вторая книга той же пары.** Классификатор типа термина — тот, что решает «транслитерировать или переводить» — обучен на каноне 蛊真人 прямо в общем промте пары (`backend/prompts/zh-ru/classifier.md`, шесть книжных поверхностей плюс два few-shot-ответа). Смещение на другой zh→ru книге не мерил никто. 5. **Ретроактивность подписи.** Два прогона ОДНОЙ книги разошлись в самом каноне — 元石 «первокамень» против «первобытный камень», 真元 «истинная энергия» против «истинная ци», обе записи подписаны. Прибор удостоверяет верность тому канону, который загрузили, а не стабильность канона. Что делать с главами, отгруженными до того, как вы поменяли подпись на 300-й главе, — не спросил никто.