From 9181a3aa8fa941b49e848c9f35dcb93ca2173608 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 00:19:08 +0300 Subject: [PATCH 1/7] Collapse variants that are merely shortened forms of one another: the stem match counted Gao Van and Gao Vany as two renderings where the text has one --- eval/dovodka/dreif.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/eval/dovodka/dreif.py b/eval/dovodka/dreif.py index 3319a952..df6f048c 100644 --- a/eval/dovodka/dreif.py +++ b/eval/dovodka/dreif.py @@ -122,19 +122,36 @@ def measure(arm): return per_term, fired, bk +def collapse(variants): + """Схлопнуть варианты, где один — лишь укороченная форма другого. + + ⚠ ЗАМЕРЕННАЯ ЛОЖНАЯ ТРЕВОГА, а не предосторожность. Сопоставление идёт по НАЧАЛУ слова + (падеж меняет хвост), и потому основа короткого варианта находится ВНУТРИ длинного: + · «Гао Ван» (основа «Гао В») находится в «Гао Вань» — в тексте 82 вхождения ТОЛЬКО + «Гао Вань/Ваня/Ванем», «Гао Ван» отдельно не встречается ни разу; + · «женщина-гу蛊师» (основа «женщина-гу») находится в «женщина-гу-мастер». + Обе пары прибор объявлял дрейфом: 2 ложные тревоги из 12 (17%) на руке `p9-low`. + """ + out = [] + for v in sorted(variants, key=len, reverse=True): + if not any(longer.lower().startswith(v.lower()[: max(4, len(v) - 2)]) for longer in out): + out.append(v) + return set(out) + + def stats(per_term, fired): """Две величины: разных передач на термин и сколько терминов меняют форму МЕЖДУ главами.""" multi = 0 # термин показал >1 передачи за отрезок switched = 0 # доминирующая передача сменилась от главы к главе measured = 0 for term, bych in per_term.items(): - allv = set().union(*bych.values()) if bych else set() + allv = collapse(set().union(*bych.values())) if bych else set() if not allv: continue measured += 1 if len(allv) > 1: multi += 1 - doms = [sorted(v)[0] for ch, v in sorted(bych.items()) if v] + doms = [sorted(collapse(v))[0] for ch, v in sorted(bych.items()) if v] if len(set(doms)) > 1: switched += 1 return {"terms_fired": len([t for t in fired if fired[t]]), "measured": measured, From 81a95540383b8815821a01edc28cbb6b6730633c Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 00:24:42 +0300 Subject: [PATCH 2/7] Record that the active null was ratified in July as the D39.7 floor gate, so phase D bought back a norm it already owned, and tie the result to the owner's three questions --- eval/dovodka/NORMY-ZAMEROV.md | 125 ++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 eval/dovodka/NORMY-ZAMEROV.md diff --git a/eval/dovodka/NORMY-ZAMEROV.md b/eval/dovodka/NORMY-ZAMEROV.md new file mode 100644 index 00000000..142d07e3 --- /dev/null +++ b/eval/dovodka/NORMY-ZAMEROV.md @@ -0,0 +1,125 @@ +# Нормы судейских замеров: что фаза Д подтвердила ценой денег и четырёх суток + +**02.09, полигон.** Не новые нормы. **Почти всё ниже проект уже знал** — и фаза Д собрала грабли +заново. Файл заведён именно поэтому: норма, записанная там, где её не читают перед работой, +не работает. + +## 0. Главное признание: активный ноль был ратифицирован в июле + +**D39.7 (18.07)** несёт риг-стандарт: *per-vote персист · полно-evidence окна · **floor-гейт***. +Дословно оттуда: «все floor-относительные; **floor судейского шума = 0.126 per-cell, A0↔A0′ +matched full-chunk**». `A0↔A0′` — это два прогона ОДНОЙ конфигурации, то есть **ровно тот активный +ноль**, который фаза Д «открыла» 02.09, купив реплику `low₂` за $0.659678. + +`eval/README.md:9` перечисляет этот стандарт первым инвариантом полигона. + +⇒ Первая редакция слепого чтения нарушила ратифицированную норму, объявила результат +(18:6 «дешёвая рука лучше») и **сняла его только после того, как норма была исполнена**. +Стоимость незнания: реплика + две панели (219 судей) + четверо суток. + +## 1. Что обязана нести любая судейская панель + +| Норма | Носитель | Как её нарушила фаза Д | +|---|---|---| +| **Активный ноль (floor-гейт)** — пара прогонов ОДНОЙ руки, того же размера, что боевая выборка | D39.7, `eval/README.md:9` | в редакции 1 отсутствовал; результат оказался неотличим от шума | +| **Полно-evidence окна** — судье показан ВЕСЬ материал, к которому относится вопрос | D39.7 | судьям показывали 55–79% черновика в 10 юнитах из 15 | +| **Оба порядка** — пара судится и как (A,B), и как (B,A) | норматив оркестратора | нарушено в ОБЕИХ редакциях | +| **per-vote персист** | D39.7 | исполнено ✅ | +| **Слепые метки авто-QA** | D39.20 | исполнено ✅ (имена файлов обезличены после того, как первая раскладка называла их `p7-…`/`null-…`) | +| **Детерминированный скорер > судьи, где возможен** | норматив оркестратора | не применялся вовсе; применён только 02.09 (`dreif.py`) | +| **Вывод на агрегате до вскрытия единиц запрещён** | D39.61 | вывод редакции 1 сделан на агрегате | + +## 2. Что фаза Д добавляет к норме (этого в носителях не было) + +1. **Ничья определяется ПОРОГОМ, а не совпадением текстов.** Схема первой панели давала судье + поле «тексты идентичны», и ничья фактически привязалась к побайтному совпадению: на активных + нулях судьи объявили победителя в **29 голосах из 30**, потому что два непустых текста всегда + чем-то различаются. Ничья обязана быть исходом «различие ниже порога», иначе её не будет. +2. **Потолок списка дефектов становится метрикой.** В схеме стоял `maxItems: 6`; в **73 голосах + из 74** побеждал вариант с меньшим числом претензий, а половина списков упиралась в потолок. + Судья считал дефекты, а счётчик насыщался — вердикт стал функцией потолка. +3. **Мощность гарда объявляется вместе с гардом.** Гард нулей на 10 парах берёт порог значимости + только на раскладах 9:1 и 10:0; перекос 8:2 он пропускает. Непрохождение такого гарда + **не есть доказательство исправности прибора**, и это надо печатать рядом с ним. +4. **Правило решения обязано покрывать ВСЁ пространство исходов.** Первая редакция дала 60% при + пороге 70% и p<0.05 — исход не попал ни в одну ветку, и выбор ветки стал свободой после чисел. +5. **Знаменатель фиксируется один.** Доля бралась из n=30, а значимость из n=24; при + последовательном счёте срабатывала ветка с ПРОТИВОПОЛОЖНОЙ диспозицией. +6. **Тест, где ничьи в знаменателе, а H₀=50%, — невалиден:** при доле ничьих 0.20 ошибка I рода + 17.8%, а не 5%. + +## 3. Нормы для детерминированных приборов (из `dreif.py`) + +1. **Шум-пол печатается рядом с КАЖДЫМ числом**, а не в конце отчёта. Порог — консервативный + (наибольшая из шумовых оценок): ось, где шум случайно вышел 0.0%, иначе объявит значимым любое + ненулевое различие. +2. **Гейт на нулевой знаменатель и на пустой разбор.** Прибор напечатал «дрейф 0%», потому что + парсер искал `src:` вместо формата «ключ⇥передача» и не совпал ни разу. Ноль на заведомо + непустом входе — **отказ прибора**, а не результат. (Тот же класс: Д50, гейт `assert_measured`.) +3. **Второй, независимый путь к тому же числу.** Дрейф считается и сопоставлением по тексту, и + полем `spread`, которое печатает сам движок. +4. **Прибор проверяется на себе.** Замер ложных тревог `dreif.py`: 2 из 12 (17%) — основа «Гао Ван» + находилась внутри «Гао Вань», где в тексте 82 вхождения и все одной формы. Починено + схлопыванием укороченных форм. +5. **Печатать, чего прибор НЕ проверяет** — секцией в самом выводе. + +## 4. Как это повлияло на три вопроса владельца + +Вопросы — по `eval/dovodka/PLAN-22-08.md` §1. + +### Вопрос 0 (метавопрос, главный): живой русский с консистентными терминами по ВСЕЙ книге + +Состояние знания до фазы, дословно: «**на вопрос 0 не отвечает ни один наш прибор**. Все панели +мерят художественность ОДНОЙ главы; консистентность тысячи — ортогональная ось, и она не мерилась +ни разу». + +**Что изменилось.** Впервые есть **прибор** на эту ось и первые числа — бесплатно, на уже +оплаченном: 9–12% терминов имеют больше одной передачи, 6–8% меняют форму между главами; +независимым путём (`spread` движка) — **30 записей банка из 102 несут >1 передачу, максимум 7 форм +у одного ключа** (`元石`: юаньши · камень юань · изначальный камень · первородный камень…). +Реальный дрейф после чистки ложных тревог: «Фан Юань / Фанъюань», «Мо Бэй / Мобэй», +«гу-мастер / мастер гу», «дом Мо / клан Мо / род Мо». + +**И жёстко подтверждено, что судьями эту ось не взять:** панель на изолированном куске +доказанно реагирует на шум так же, как на сигнал. + +⚠ Прибор меряет 17 глав = 0.74% книги, а дрейф накопителен. Ось открыта, но не пройдена. + +### Вопрос 1: оптимальная архитектура пайплайна + +Фаза **не испытывала топологий** (это бумажные ресёрчи `research/29`). Продвижение — в другом: + +- **Локализация проблемы.** Дрейф терминов **не зависит от режима редактора**: разница между + режимами 0.5–1.8% против шум-пола 2.4%. Значит консистентность рождается на стадии черновика + и банка, и искать её надо там, а не в редакторе, куда уходит 85–95% денег. +- **Найден разрыв в цепи, а не в механизме.** Штатный детектор консистентности не просто выключен + (`coverage.enabled: false`) — **у него не было входа**: из 102 записей банка ни одна не доведена + до `approved`, `decl` пуст у всех. Механизм построен, цепочка не замкнута. +- **Гибридная политика оценена без единой траты:** дешёвая рука падает в $0-гейт в 2 клетках из 60 + (3.3%) ⇒ книга $96 против $90 чистого дешёвого и $269 дорогого. Страховка стоит 7%. + +### Вопрос 2: связка моделей без привязки к вендору + +Здесь фаза дала **острый негативный урок, прямо в цель вопроса**. + +«Дорогой режим» в нашем замере — это **не наш выбор уровня, а вендорский умолчальный**: параметр +не эмитится вовсе, едет собственный дефолт DeepSeek, который вендор **двигал дважды за лето** +(31.07 и 30.08), и фактический уровень нигде в артефактах не записан (`reasoning_tokens`=0). + +⇒ Мы сравнивали с движущейся мишенью, и замер **невоспроизводим** в строгом смысле. Для вопроса 2 +это точный ответ на «зависит ли архитектура от вендора»: **езда на вендор-дефолте есть скрытая +привязка к вендору** — не по API, а по поведению, и она не видна ни в конфиге, ни в логе. + +Второй факт той же оси: единственная не-DeepSeek рука (`glm-5`) дала **дефект целевого языка** — +шесть непереведённых «cultivation» в русском тексте, которых **не поймал ни один $0-гейт**. +Мультивендорность требует гейтов на язык вывода, которых сейчас нет. + +⚠ Чего фаза по вопросу 2 НЕ дала: связка мерена на ОДНОМ вендоре в двух режимах плюс один ценовой +контроль. Ни бейк-офа вендоров, ни проверки «худший вендор на нашей архитектуре против лучшего на +чужой» не было. + +## 5. Что из этого — работа, а что запись + +Записью закрывается только §1–§3. **§4 не закрывает ни один из трёх вопросов**: вопрос 0 получил +прибор и первое число, вопрос 1 — локализацию и цену политики, вопрос 2 — предупреждение. +Три вопроса остаются открытыми, и это правильный статус, а не осторожность. From 199745006664473e2822270000db3327511a761f Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 00:38:46 +0300 Subject: [PATCH 3/7] Correct my own ping: the chain from mining to post-check breaks in four places, not two, and term is a fallback class rather than a decision --- docs/PROGRESS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index e55599c6..d9ae21e2 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -273,6 +273,13 @@ * **РЕШЕНИЯ ВЛАДЕЛЬЦА 02.09 (ратификация за оркестратором).** (1) **Дефолт редактора — `low`**, бремя доказательства на том, кто включает дорогой режим. (2) Вопрос «`off` против `low` по качеству» **закрыт как неизмеримый этим прибором** — судейских реплик не покупать. (3) Питон-прибор дрейфа пишет полигон (сделано), **настоящий прибор — в движок, это пинг ниже**. (4) Покупка 50 глав на длину **отложена до прогона в бэкенде** (слово владельца). * **⚠ ВХОД 1 — офлайн-пересчёт по уже оплаченному тексту (`tmctl recheck` или равное).** Проверки движка исполняются ТОЛЬКО в момент генерации; готовый текст в базе перепроверить нечем, и потому частота ложных тревог пост-чека не измерима без покупки. Полигон закрыл дыру питон-двойником (`dreif.py`), но **это не тот же прибор**: у движка стеммер целевого языка и сохранённые формы, у двойника — сопоставление по началу слова. Два «детерминированных» прибора с разными ответами — тихий дрейф нормы; строку в бэклог просит полигон, решение за оркестратором. +* **⚠ ПОПРАВКА К ЭТОМУ ПИНГУ (02.09, позже в тот же день): входов НЕ ДВА, А ЧЕТЫРЕ, и «включить гейт» из них самый мелкий.** Разбор начат вопросом владельца («в бэкенде нет майнинга term — „мастер гу“ не замайнится»). Проверено исполнением: **майнинг term РАБОТАЕТ** (68 записей класса `term`, `蛊师 → гу-мастер` в банке есть), но владелец прав по сути — цепочка «намайнил → классифицировал → подписал → инжектнул как закон → проверил» рвётся в ЧЕТЫРЁХ местах, и замеренный дрейф (30 ключей из 102 несут >1 передачу, максимум 7 форм) — их следствие. + * **(1) `term` — класс-умолчание, а не решение.** `backend/internal/pipeline/banknote.go:79` дословно: «bankTypeOK is the accepted type set; **anything else falls back to "term" (a benign default)**». Две трети банка пробы (68 из 102) сидят в этом умолчании. + * **(2) Классификатор умеет различать `term`, но в пробе НЕ ДОБЕЖАЛ.** Определение в `backend/prompts/zh-ru/classifier.md:20-23` точное («реалия, понятие, предмет, материал, вещество, класс существ — всё, что переводится ПО СМЫСЛУ», пример `元石 term`). Однако лог пробы: `batches_planned=8 · batches_running=6 · classify_batches_dropped=4` при `budget_usd=0.05` против `estimate_usd=0.0978`; итог `unanswered=7`, `reclassified=5`. Движок сам предупредил: «this bank is PARTIALLY consolidated — a budget cut a pass, so some terms were never offered to the role at all». ⇒ типы выставила банкнота или умолчание кода, а не тот механизм, который умеет. + * **(3) Промпт банкноты недоспецифицирует класс `term`.** `backend/prompts/zh-ru/translator-banknote.md`: просит «новых имён собственных и терминов», список типов даёт, но **определения `term` нет, а единственный пример — `师父 наставник title`**, то есть образец уводит в титулы; лимит «не более 20 строк» на фрагмент вытесняет понятия в пользу имён (имена заметнее). Правка промта — не Go и пары не касается. + * **(4) Инжект фильтрует по ПОДПИСИ, а не по классу.** `backend/internal/membank/memory.go:663`: `status == "approved"` → `Confirmed`, иначе `Ambiguous`; `priorityRank` (там же, ниже) вытесняет неподписанное первым при token-бюджете (`glossary_token_budget: 800` на 102 записи). При `approved=0` весь банк едет «неуверенным кандидатом» — форма не объявлена законом, и удерживать её нечему. Это и есть механизм дрейфа `蛊师` («гу-мастер» / «мастер гу») и `元石` (семь форм). + * **⚠ (5) НАБЛЮДАЕМОСТИ НЕТ на редакторской стадии.** `retrieval_state` в базах пробы держит **35 строк, все под DRAFT-снапшотом** (`8d5721f65596`), под edit-снапшотом (`b76ab168d95b`) — **НОЛЬ строк**. Доехал ли банк до редактора и сколько записей вытеснено бюджетом, из артефактов узнать НЕЧЕМ. Все счётчики на черновой стадии нулевые закономерно: банк рождается ИЗ черновика, на нём его ещё нет. + * **Порядок, который из этого следует** (предлагается, решение за оркестратором): наблюдаемость инжекта на edit-стадии → бюджет классификатора (пять центов режут половину работы) → определение и пример `term` в промте банкноты → подпись банка и заполнение форм → и только потом жёсткий режим гейтов. * **⚠ ВХОД 2 — пост-чек банка не имел ВХОДА, а не только был выключен.** В пробе `gates.coverage.enabled: false` и блока `gates.glossary` нет — это известно; но сверх того: из 102 записей банка **ни одна не доведена до `approved`, и `decl` пуст у ВСЕХ**. Пост-чек проверяет подписанные термины (`membank/mempostcheck.go`), значит молчал он по двум причинам сразу. Условие включения жёсткого режима записано в самом коде — «после того, как владелец подтвердит точность», а точность мерить не на чем, пока банк не подписан. Порядок для бэкенда: подписать банк → заполнить формы → замер ложных тревог → решение владельца. * **ИТОГ СЛЕПОГО ЧТЕНИЯ (две редакции, 219 судей Opus, $0.66 на реплику `low₂`).** Редакция 1 дала 18:6 «дешёвая рука лучше» — **вывод СНЯТ**: судьям показывали усечённый черновик (стадия `edit` склеивает несколько draft-чанков; в 10 юнитах из 15 опора покрывала 55–79%). Редакция 2 на склеенном по манифесту черновике (покрытие 99–100%) плюс **активные нули** (`low₁` против `low₂`): **судьи назвали победителя в 29 голосах из 30 на чистом шуме**, перекос на шуме (80%) БОЛЬШЕ боевого (70%). Первичные исходы: точность 12:10:8 (p=0.842), художественность 19:8:3 (p=0.070, Холм **0.141**) ⇒ **различие НЕ ПРЕДЪЯВЛЕНО**. Механика вскрыта: в **73 голосах из 74** побеждал вариант с меньшим числом претензий, а счётчик упирался в потолок в половине голосов. Текстовый шум одной руки (0.799) больше межрежимного (0.820). * **ПРИБОР ДРЕЙФА, первые числа ($0, на уже купленном).** Терминов с более чем одной передачей в тексте — 13–16% от измеренных; сменивших форму между главами — 6–8%. Независимым путём (поле `spread`, считает сам движок): **30 записей из 102 несут >1 передачу, максимум 7 форм у одного ключа** (`元石`: «юаньши · камень юань · изначальный камень · первородный камень…»). ⚠ Разброс МЕЖДУ режимами (0.3–1.9%) **не превышает шум-пола** (2.4%, снят по паре реплик одной руки) ⇒ дрейф на этом отрезке — свойство черновика и банка, **не редактора**; экономия на редакторе к нему отношения не имеет. From 8dba78da70d412b8c397e633957cce3d2e2e0db4 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 00:59:40 +0300 Subject: [PATCH 4/7] Correct three of my own claims after the consilium checked them, and record the heavier hole it found: a chapter rendered wholly in English passes every free gate because target-script share is computed nowhere --- docs/PROGRESS.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index d9ae21e2..f1217d03 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -280,6 +280,11 @@ * **(4) Инжект фильтрует по ПОДПИСИ, а не по классу.** `backend/internal/membank/memory.go:663`: `status == "approved"` → `Confirmed`, иначе `Ambiguous`; `priorityRank` (там же, ниже) вытесняет неподписанное первым при token-бюджете (`glossary_token_budget: 800` на 102 записи). При `approved=0` весь банк едет «неуверенным кандидатом» — форма не объявлена законом, и удерживать её нечему. Это и есть механизм дрейфа `蛊师` («гу-мастер» / «мастер гу») и `元石` (семь форм). * **⚠ (5) НАБЛЮДАЕМОСТИ НЕТ на редакторской стадии.** `retrieval_state` в базах пробы держит **35 строк, все под DRAFT-снапшотом** (`8d5721f65596`), под edit-снапшотом (`b76ab168d95b`) — **НОЛЬ строк**. Доехал ли банк до редактора и сколько записей вытеснено бюджетом, из артефактов узнать НЕЧЕМ. Все счётчики на черновой стадии нулевые закономерно: банк рождается ИЗ черновика, на нём его ещё нет. * **Порядок, который из этого следует** (предлагается, решение за оркестратором): наблюдаемость инжекта на edit-стадии → бюджет классификатора (пять центов режут половину работы) → определение и пример `term` в промте банкноты → подпись банка и заполнение форм → и только потом жёсткий режим гейтов. + * **⚠ ТРИ ПОПРАВКИ К МОИМ ЖЕ УТВЕРЖДЕНИЯМ ВЫШЕ, найдены консилиумом 02.09 и пере-проверены мной исполнением.** + · **(5) сформулирован неверно в ПРИЧИНЕ.** «Ноль строк под edit-снапшотом» — не разрыв, а схема: `PRIMARY KEY (book_id, chapter, chunk_idx)` **без snapshot_id** (`store/migrate.go`), редактор мержит в ту же строку, и `snapshot_id` в ней — просто последнее записанное. Вывод «наблюдаемости нет» ОСТАЁТСЯ верным, но дыра в другом: счётчики инжекта редакторской волны не пишутся никуда (`pipeline/chunkrun.go:202`). + · **«ни один $0-гейт не поймал латиницу» — неточно.** Детектор латиницы ЕСТЬ и вызывается всегда (`checks/cheapgates.go:192`, `lintLatinResidue`), но по построению он **наблюдатель, а не вердикт**: дословно `cheapgates.go:22-27` — «They are OBSERVABILITY, never hard gates… never changes a chunk disposition». Гейт видел и молчал, потому что так устроен. + · **Источник «cultivation» — НЕ glm-5.** Пере-проверено по стадиям: слово рождается в ЧЕРНОВИКЕ (`deepseek-v4-flash`, 7 клеток) во ВСЕХ руках, потому что черновик общий; редакторы DeepSeek его вычищают (**0** в финальных текстах `p9-low`/`p7-off`), а `glm-5` — нет (3 клетки на edit, **2 доживают до финала**). Значит это дефект не породителя, а фильтра, и прежняя формулировка «glm-5 опознаётся по латинице» верна по факту, но неверна по причине. + * **⛔ И ГЛАВНОЕ, ЧЕГО В ПИНГЕ НЕ БЫЛО: полный провал ЯЗЫКА ЦЕЛИ движку невидим.** `books/dovodka/dv-i-z8-fb9ed5709e.json` — глава пары zh→**ru** переведена целиком **на английский**: пере-считано мной, **7104 латинских знака, 0 кириллицы**, `finish=stop`, и все $0-гейты молчат. Причина: **доля скрипта ЦЕЛИ не считается нигде** — единственный вызов считает долю скрипта ИСХОДНИКА (`runner.go:349`). Это тяжелее всех четырёх разрывов выше: банк ловит дрейф формы, а тут теряется весь язык. Гейт строится из данных (`lang-script.txt` уже несёт `en latin`, `ru cyrillic`), Go по паре не ветвится. * **⚠ ВХОД 2 — пост-чек банка не имел ВХОДА, а не только был выключен.** В пробе `gates.coverage.enabled: false` и блока `gates.glossary` нет — это известно; но сверх того: из 102 записей банка **ни одна не доведена до `approved`, и `decl` пуст у ВСЕХ**. Пост-чек проверяет подписанные термины (`membank/mempostcheck.go`), значит молчал он по двум причинам сразу. Условие включения жёсткого режима записано в самом коде — «после того, как владелец подтвердит точность», а точность мерить не на чем, пока банк не подписан. Порядок для бэкенда: подписать банк → заполнить формы → замер ложных тревог → решение владельца. * **ИТОГ СЛЕПОГО ЧТЕНИЯ (две редакции, 219 судей Opus, $0.66 на реплику `low₂`).** Редакция 1 дала 18:6 «дешёвая рука лучше» — **вывод СНЯТ**: судьям показывали усечённый черновик (стадия `edit` склеивает несколько draft-чанков; в 10 юнитах из 15 опора покрывала 55–79%). Редакция 2 на склеенном по манифесту черновике (покрытие 99–100%) плюс **активные нули** (`low₁` против `low₂`): **судьи назвали победителя в 29 голосах из 30 на чистом шуме**, перекос на шуме (80%) БОЛЬШЕ боевого (70%). Первичные исходы: точность 12:10:8 (p=0.842), художественность 19:8:3 (p=0.070, Холм **0.141**) ⇒ **различие НЕ ПРЕДЪЯВЛЕНО**. Механика вскрыта: в **73 голосах из 74** побеждал вариант с меньшим числом претензий, а счётчик упирался в потолок в половине голосов. Текстовый шум одной руки (0.799) больше межрежимного (0.820). * **ПРИБОР ДРЕЙФА, первые числа ($0, на уже купленном).** Терминов с более чем одной передачей в тексте — 13–16% от измеренных; сменивших форму между главами — 6–8%. Независимым путём (поле `spread`, считает сам движок): **30 записей из 102 несут >1 передачу, максимум 7 форм у одного ключа** (`元石`: «юаньши · камень юань · изначальный камень · первородный камень…»). ⚠ Разброс МЕЖДУ режимами (0.3–1.9%) **не превышает шум-пола** (2.4%, снят по паре реплик одной руки) ⇒ дрейф на этом отрезке — свойство черновика и банка, **не редактора**; экономия на редакторе к нему отношения не имеет. From 7b9e1a69407dc21fb087b3309273055da2b30325 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 02:19:12 +0300 Subject: [PATCH 5/7] Record the plan reconciliation: ten of eleven consilium proposals were already ordered work, three contradict ratified notes, and the proofreading yields evidence for open backlog lines rather than a new list --- docs/PROGRESS.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index f1217d03..6e8afca8 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -284,7 +284,14 @@ · **(5) сформулирован неверно в ПРИЧИНЕ.** «Ноль строк под edit-снапшотом» — не разрыв, а схема: `PRIMARY KEY (book_id, chapter, chunk_idx)` **без snapshot_id** (`store/migrate.go`), редактор мержит в ту же строку, и `snapshot_id` в ней — просто последнее записанное. Вывод «наблюдаемости нет» ОСТАЁТСЯ верным, но дыра в другом: счётчики инжекта редакторской волны не пишутся никуда (`pipeline/chunkrun.go:202`). · **«ни один $0-гейт не поймал латиницу» — неточно.** Детектор латиницы ЕСТЬ и вызывается всегда (`checks/cheapgates.go:192`, `lintLatinResidue`), но по построению он **наблюдатель, а не вердикт**: дословно `cheapgates.go:22-27` — «They are OBSERVABILITY, never hard gates… never changes a chunk disposition». Гейт видел и молчал, потому что так устроен. · **Источник «cultivation» — НЕ glm-5.** Пере-проверено по стадиям: слово рождается в ЧЕРНОВИКЕ (`deepseek-v4-flash`, 7 клеток) во ВСЕХ руках, потому что черновик общий; редакторы DeepSeek его вычищают (**0** в финальных текстах `p9-low`/`p7-off`), а `glm-5` — нет (3 клетки на edit, **2 доживают до финала**). Значит это дефект не породителя, а фильтра, и прежняя формулировка «glm-5 опознаётся по латинице» верна по факту, но неверна по причине. - * **⛔ И ГЛАВНОЕ, ЧЕГО В ПИНГЕ НЕ БЫЛО: полный провал ЯЗЫКА ЦЕЛИ движку невидим.** `books/dovodka/dv-i-z8-fb9ed5709e.json` — глава пары zh→**ru** переведена целиком **на английский**: пере-считано мной, **7104 латинских знака, 0 кириллицы**, `finish=stop`, и все $0-гейты молчат. Причина: **доля скрипта ЦЕЛИ не считается нигде** — единственный вызов считает долю скрипта ИСХОДНИКА (`runner.go:349`). Это тяжелее всех четырёх разрывов выше: банк ловит дрейф формы, а тут теряется весь язык. Гейт строится из данных (`lang-script.txt` уже несёт `en latin`, `ru cyrillic`), Go по паре не ветвится. + * **Улика к строке 46, а НЕ находка: полный провал языка цели.** `books/dovodka/dv-i-z8-fb9ed5709e.json` — глава пары zh→**ru** переведена целиком **на английский**: пере-считано мной, **7104 латинских знака, 0 кириллицы**, `finish=stop`. ⚠ **Прежняя формулировка «главного, чего в пинге не было» СНЯТА 03.09: это уже заказанная работа.** Строка бэклога **46** называет ровно этот случай дословно — «Экран целевого языка: „полный связный перевод на английский" проходит»; дизайн пака **заморожен владельцем** (D39.92 п.1 closed-set + D39.93 изолированный модуль), предгейт — строка **113** (фикстура ~20 off-target). ⇒ ценность вычитки здесь — не гейт придумать, а **дать строке 46 живую улику с боевого прогона**. + +* **📌 03.09 · СВЕРКА С ПЛАНОМ ПОСЛЕ ЗАМЕЧАНИЯ ВЛАДЕЛЬЦА — 10 «предложений» из 11 оказались уже заказанной работой.** Владелец: «вы рассуждаете без оглядки на ту архитектуру и код, что уже построена или ЗАПЛАНИРОВАНА». Замечание верное: консилиуму давали код и данные вычитки, но НЕ давали целевую архитектуру, ЕДИНЫЙ БЭКЛОГ и журнал решений. Тот же консилиум, подняв прежний контекст, прочитал план и снял свои же предложения. Сверено мной по носителям. + * **Уже в плане:** вынести вердикт-поля из хеша = строка **49** (спека `backend/docs/D15.2-content-addressed-resume-spec.md`) · экран языка цели = строка **46** · заголовки глав = строки **160/161/162** и **201** (гейт пал словом владельца 15.08, D39.136 п.3) · петля ремонта = **построена** за `enabled:false`, включение — строка **13** (владелец) · морфо-гейт рода = строка **82** · числа и меры = строка **12** через триггер D39.79 п.4 · критик = строка **2** (владелец). + * **Уже ПОСТРОЕНО:** род `neuter` end-to-end — **D39.69 §3** (`13-tech-debt-anchors.md`: «носитель ПОСТРОЕН»). Остаток по роду «гу» — **две строки ДАННЫХ** в сиде стенда (`guzhenren-seed-v2.yaml:291-300`: `allow_short: false`, поля `gender` нет) плюс ключ `glossary_seed`. + * **⛔ Противоречит ратифицированному:** патч-протокол редактора ↔ **D39.108 п.1** «диффы откладываются» · критик как стадия движка ↔ **D38.4 п.2** «семантический span-судья — ОТКАЗ» · подпись ~30 ключей поимённо ↔ **D39.144** «подписывается ВЕСЬ банк ОДНИМ ОК; пер-термная масс-подпись = инерция» · канал идиом врезкой dst ↔ **D38.4 п.1** «глоссарий-сидинг чэнъюй НЕ делаем» · таблица мер ↔ **D39.79 п.4** «HARD-value-детектор НЕ строить». + * **Что вычитка дала по-настоящему:** улики к уже открытым строкам — **46** (глава на английском), **82** (7 дефектов рода), **142/13** (классы для точечной починки), **160** (6 глав из 17 без названия ⇒ ~800 на книгу), **12** (триггер реопена по числам НАЖАТ: #46/#13/#11). Это подтверждение заказанного, а не новый список. + * **Метод-урок, дороже находок:** сутки ушли на переоткрытие бэклога, потому что план не был подан консилиуму. **Любой панели, обсуждающей ЧТО СТРОИТЬ, план подаётся вместе с кодом** — иначе она уверенно переизобретает заказанное. ⚠ Для полигона отсюда следует и граница: строки 46/49/82/142/160/12 — **зона бэкенда**, полигон в них не лезет; его законная часть — улики и замер (см. ниже). * **⚠ ВХОД 2 — пост-чек банка не имел ВХОДА, а не только был выключен.** В пробе `gates.coverage.enabled: false` и блока `gates.glossary` нет — это известно; но сверх того: из 102 записей банка **ни одна не доведена до `approved`, и `decl` пуст у ВСЕХ**. Пост-чек проверяет подписанные термины (`membank/mempostcheck.go`), значит молчал он по двум причинам сразу. Условие включения жёсткого режима записано в самом коде — «после того, как владелец подтвердит точность», а точность мерить не на чем, пока банк не подписан. Порядок для бэкенда: подписать банк → заполнить формы → замер ложных тревог → решение владельца. * **ИТОГ СЛЕПОГО ЧТЕНИЯ (две редакции, 219 судей Opus, $0.66 на реплику `low₂`).** Редакция 1 дала 18:6 «дешёвая рука лучше» — **вывод СНЯТ**: судьям показывали усечённый черновик (стадия `edit` склеивает несколько draft-чанков; в 10 юнитах из 15 опора покрывала 55–79%). Редакция 2 на склеенном по манифесту черновике (покрытие 99–100%) плюс **активные нули** (`low₁` против `low₂`): **судьи назвали победителя в 29 голосах из 30 на чистом шуме**, перекос на шуме (80%) БОЛЬШЕ боевого (70%). Первичные исходы: точность 12:10:8 (p=0.842), художественность 19:8:3 (p=0.070, Холм **0.141**) ⇒ **различие НЕ ПРЕДЪЯВЛЕНО**. Механика вскрыта: в **73 голосах из 74** побеждал вариант с меньшим числом претензий, а счётчик упирался в потолок в половине голосов. Текстовый шум одной руки (0.799) больше межрежимного (0.820). * **ПРИБОР ДРЕЙФА, первые числа ($0, на уже купленном).** Терминов с более чем одной передачей в тексте — 13–16% от измеренных; сменивших форму между главами — 6–8%. Независимым путём (поле `spread`, считает сам движок): **30 записей из 102 несут >1 передачу, максимум 7 форм у одного ключа** (`元石`: «юаньши · камень юань · изначальный камень · первородный камень…»). ⚠ Разброс МЕЖДУ режимами (0.3–1.9%) **не превышает шум-пола** (2.4%, снят по паре реплик одной руки) ⇒ дрейф на этом отрезке — свойство черновика и банка, **не редактора**; экономия на редакторе к нему отношения не имеет. From 27c46897f530b8f447c940d0829b98d01d5819f4 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 11:36:53 +0300 Subject: [PATCH 6/7] Record the proofreading of seventeen chapters and the unfed signed canon, so the research filter rests on repository carriers instead of session memory --- docs/PROGRESS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 6e8afca8..522d1df5 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -286,6 +286,17 @@ · **Источник «cultivation» — НЕ glm-5.** Пере-проверено по стадиям: слово рождается в ЧЕРНОВИКЕ (`deepseek-v4-flash`, 7 клеток) во ВСЕХ руках, потому что черновик общий; редакторы DeepSeek его вычищают (**0** в финальных текстах `p9-low`/`p7-off`), а `glm-5` — нет (3 клетки на edit, **2 доживают до финала**). Значит это дефект не породителя, а фильтра, и прежняя формулировка «glm-5 опознаётся по латинице» верна по факту, но неверна по причине. * **Улика к строке 46, а НЕ находка: полный провал языка цели.** `books/dovodka/dv-i-z8-fb9ed5709e.json` — глава пары zh→**ru** переведена целиком **на английский**: пере-считано мной, **7104 латинских знака, 0 кириллицы**, `finish=stop`. ⚠ **Прежняя формулировка «главного, чего в пинге не было» СНЯТА 03.09: это уже заказанная работа.** Строка бэклога **46** называет ровно этот случай дословно — «Экран целевого языка: „полный связный перевод на английский" проходит»; дизайн пака **заморожен владельцем** (D39.92 п.1 closed-set + D39.93 изолированный модуль), предгейт — строка **113** (фикстура ~20 off-target). ⇒ ценность вычитки здесь — не гейт придумать, а **дать строке 46 живую улику с боевого прогона**. +* **📌 03.09 · ВЫЧИТКА 17 ГЛАВ БОЕВОГО ПЕРЕВОДА ($0, 17 агентов Opus, по агенту на главу с исходником).** Материал — `p9-low` (дефолт редактора по решению владельца 02.09), экспорт `tmctl export --pairs`. Инструкция вычитчику разделяла ДВА уровня: «читатель споткнётся» (против них меряется планка владельца ≤2 на главу, D39.20) и «мелочь корректора». + * **Планка НЕ взята: 59 блокирующих претензий на 17 глав = 3.5 на главу.** В планку уложилась 1 глава из 17. При этом все 17 вычитчиков независимо ответили «читается как книга» = ДА. + * **Классы (всего / из них ловится детерминированно):** смысл-искажён 12/0 · имя-термин-непоследователен 10/10 · translationese-грубый 9/2 · род-гу 7/6 · логика-действия 6/1 · иное 5/3 · язык-не-тот 4/4 · пропуск 3/3 · меры 3/3. ⇒ **механизируемо 32 из 59 (54%) ПО ОЦЕНКЕ ВЫЧИТЧИКОВ**; ⚠ оценка завышена: прогон существующих `RunCheapGates` по 11 цитатам дал 1 срабатывание из 11 (сегодняшний код берёт заметно меньше). + * **Остаток, который не берёт ни один детерминизм: 12 искажений смысла + 6 сломанных мизансцен = 1.1 на главу** — то есть НИЖЕ планки владельца. Образец (гл.1): «перекрыл им путь, **сделав шаг в сторону**» — по-русски «посторонился», фраза противоречит себе; в оригинале 横跨一步 = шагнул НАПЕРЕРЕЗ. + * **⛔ Найдено проверкой самих вычитчиков (системнее, чем они доложили): заголовки глав теряются.** Исходник даёт `第二十六节:一切组织的本质` — номер И название; движок кладёт в заголовок только номер (`chunk/chunker.go` `stripHeading`/`ApplyHeading`), название сваливается в тело как обычная строка. Дальше как повезёт: **название уцелело у 11 глав из 17, потеряно у 6** ⇒ на 2283 главах это ~800 глав без названия вперемешку с озаглавленными. Ловится тривиально: заголовок состоит только из номера. Улика к строкам бэклога **160/161/162** и **201**. + * Сырьё вычитки: `/tmp`-экспорт не сохранён (волатилен), воспроизводится командой `tmctl export --config arms/p9-low.book.yaml --pairs`; вердикты 17 агентов — в задаче воркфлоу `wfofkln2i`. + +* **📌 03.09 · КАНОН СУЩЕСТВУЕТ, ПОДПИСАН И НЕ ПОДАН В СТЕНД (проверено исполнением).** `~/books/gu-zhenren/guzhenren-seed-v2.yaml` — **58 записей, из них 53 `status: approved`**, 16 с полем `gender`. В нём ровно те термины, на которых спотыкались вычитчики: `资质 → талант` (канон владельца D39.21), `元石 → первобытный камень` (а в пробе намайнилось 7 форм), `甲等/乙等/丙等 → класс А/Б/В` (а в переводе «категория **C**» ЛАТИНИЦЕЙ), `蛊师 → гу-мастер`. **В `~/books/gu-zhenren/probe-4axes/book.yaml` ключа `glossary_seed` НЕТ — 0 вхождений**, и шапка стенда объявляет это сознательно: «Сид НЕ подключается — банк рождается майнером + банкнотой, как в холодном прогоне». + ⇒ **Прежняя формулировка «банк не подписан» (запись 02.09) НЕТОЧНА и настоящим уточняется:** не подписан МАЙНЕНЫЙ банк, а подписанный канон просто НЕ ПОДКЛЮЧЁН. Весь измеренный дрейф (30 ключей из 102 с >1 передачей) — дрейф конвейера с отключённым каноном. Контр-факт на той же книге: с подписанным банком эффективная консистентность **99.3–100%** (Д50.2, 375–548 пар). + ⚠ Записи `蛊` в сиде НЕ ХВАТАЕТ поля `gender` (средний род прописан прозой в `note`) и стоит `allow_short: false` при `minKeyLenHan=2` ⇒ односимвольный ключ структурно вне автомата. Это две строки ДАННЫХ, не код. + * **📌 03.09 · СВЕРКА С ПЛАНОМ ПОСЛЕ ЗАМЕЧАНИЯ ВЛАДЕЛЬЦА — 10 «предложений» из 11 оказались уже заказанной работой.** Владелец: «вы рассуждаете без оглядки на ту архитектуру и код, что уже построена или ЗАПЛАНИРОВАНА». Замечание верное: консилиуму давали код и данные вычитки, но НЕ давали целевую архитектуру, ЕДИНЫЙ БЭКЛОГ и журнал решений. Тот же консилиум, подняв прежний контекст, прочитал план и снял свои же предложения. Сверено мной по носителям. * **Уже в плане:** вынести вердикт-поля из хеша = строка **49** (спека `backend/docs/D15.2-content-addressed-resume-spec.md`) · экран языка цели = строка **46** · заголовки глав = строки **160/161/162** и **201** (гейт пал словом владельца 15.08, D39.136 п.3) · петля ремонта = **построена** за `enabled:false`, включение — строка **13** (владелец) · морфо-гейт рода = строка **82** · числа и меры = строка **12** через триггер D39.79 п.4 · критик = строка **2** (владелец). * **Уже ПОСТРОЕНО:** род `neuter` end-to-end — **D39.69 §3** (`13-tech-debt-anchors.md`: «носитель ПОСТРОЕН»). Остаток по роду «гу» — **две строки ДАННЫХ** в сиде стенда (`guzhenren-seed-v2.yaml:291-300`: `allow_short: false`, поля `gender` нет) плюс ключ `glossary_seed`. From 3a3753ac33838eb8dc0888ecfed54e906fead707 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 3 Sep 2026 15:49:20 +0300 Subject: [PATCH 7/7] Land the architecture answer as research/30, correcting four formulations this session itself got wrong, including that the editor rewrites only four to six percent of characters --- docs/research/30-arhitektura-otvet.md | 304 ++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 docs/research/30-arhitektura-otvet.md diff --git a/docs/research/30-arhitektura-otvet.md b/docs/research/30-arhitektura-otvet.md new file mode 100644 index 00000000..65f432ab --- /dev/null +++ b/docs/research/30-arhitektura-otvet.md @@ -0,0 +1,304 @@ +# research/30 — Ответ на два вопроса владельца: оптимальна ли связка и что даёт качество на длине + +> **Полигон-сессия фазы Д, 03.09.2026.** Написано по прямому указанию владельца («давай это оформим +> в ресёрч, чтоб не потерялось»). ⚠ `docs/research/` — зона ОРКЕСТРАТОРА; файл заведён полигоном по +> слову владельца, ревью и ратификация за оркестратором. +> +> **Основание:** ресёрч-2 (54 агента, 1198 обращений к первоисточникам, 38 находок), полная вычитка +> его результата (9 срезов, 176 пунктов упущенного), три круга адверсариальной правки промтов +> Fable-скептиком, вычитка 17 глав боевого перевода (17 агентов Opus), проба редактора по четырём +> осям ($6.17 из $9.50), слепое чтение в двух редакциях (219 судей Opus). +> +> **Как читать:** §1 — исправления к тому, что сама эта сессия успела сказать неверно. §2–3 — ответы +> на два вопроса. §4 — что нашлось снаружи. §5 — план. Числа без ссылки в этом файле не приводятся. + +--- + +## 1. ⛔ ЧЕТЫРЕ ФОРМУЛИРОВКИ, КОТОРЫЕ НАДО СНЯТЬ ПЕРВЫМИ + +Все четыре ходили внутри проекта как факты, в том числе в докладах этой сессии владельцу. +Каждая опровергнута НАШИМ ЖЕ замером, а не внешним источником. + +### 1.1 «Сильная модель ПЕРЕПИСЫВАЕТ ВЕСЬ ТЕКСТ» — неверно + +Замерено: редактор меняет **4.0–5.8% знаков** черновика, касаясь **~40% предложений** +(`23-editor-tier.md:15` и `:7471`; `eval/dovodka/KONSILIUM-30-08.md` п.1: «Редактор — ремонтник +ЛЁГКОГО КАСАНИЯ»). + +⇒ **Развилка «точечная правка против полного переписывания» — ложная.** Наш редактор уже +**точечный по объёму и сплошной по охвату**. Всякий раз, когда мы обсуждали «заменить перепис на +дифф-интерфейс», мы обсуждали замену механизма на его же поведение с другим протоколом доставки. +Это же снимает половину доводов за V6 п.5 и за патч-протокол. + +### 1.2 «Единственное внешнее число подтверждает связку» — неверно, и своё число сильнее + +У нас есть СОБСТВЕННЫЙ факторный замер на замороженных черновиках: +**A/F3 +2.50 (Холм 0.0004)** и **A_law/F3 +2.81 (Холм 0.0098)** (`21-role-topology.md`, §2.1). +Внешнее 88.9 против 85.7 (arXiv:2605.13368 Table 6) — не единственное и не главное. + +⚠ И оно не одно с другой стороны: на художественном материале есть **минусовые** внешние числа — +пост-редактура поверх слабого черновика сохраняет 31% эмоциональных пиков против 46% у самого +черновика (Emotion Profiling, Table 3), а по COMET постредактура ухудшает обе модели GPT +(Table 2). Слово «единственное» из отчётов убрать. + +### 1.3 «K7 не мерен ни разу» — неверно: одна его нога измерена и пала + +`K7` = однопроходка → майнинг банка из её выхода → канон-фиксер. **Нога «канон-фиксер по флагам» +замерена и опровергнута:** `C2/A_law −3.75` (Холм 0.0006), `C2/F3 −0.94` — «при реальной детекции +не лучше черновика, который чинит» (`21-role-topology.md:1121-1148`, §17). Обещание эксп-20 +«$0.0002 чинит всё» мерилось **при идеальных флагах** на посаженных дефектах и пало на реальной +детекции. + +⇒ K7 остаётся кандидатом только как **«однопроходка + источник банка»**, без ноги фиксера. + +### 1.4 «Связка = черновик → банк → редактор → гейты → судья» — судьи в движке нет + +**Судья в боевом коде не построен и не вызывался ни разу**; все судьи проекта — полигонный стенд. +Всё, что говорилось про «→ судья», описывает эксперименты, а не движок. + +--- + +## 2. ВОПРОС 1: оптимальна ли связка «черновик + перепис под банк памяти» + +### 2.1 Прямой ответ + +**Лучшая из испытанных. Не доказанный оптимум. Доказать оптимум нельзя материалом, а не деньгами.** + +При истине у нижней границы доверительного интервала нужно **n≈128–192**, а в корпусе после дедупа +**всего 60 уникальных единиц** (`21-role-topology.md:670-671`). Маршрут «доказать» закрыт. + +### 2.2 Что связка покупает на самом деле — три измеренных механизма + +Это главное содержательное уточнение сессии: **связка покупает не «качество прозы», а три +конкретные вещи**, и каждая замерена. + +1. **Буфер под слабого жильца.** `glm-5` РЕДАКТОРОМ над боевым черновиком неотличим от + `deepseek-v4-pro`; он же ОДНОПРОХОДКОЙ различимо хуже. Вердикт устоял в трёх замерах. + ⇒ связка покупает **устойчивость к дешёвому жильцу**, а не превосходство как таковое. +2. **Источник банка.** Без черновика терминологу не из чего собирать банк (контр-довод владельца, + записан и не опровергнут): «на одной главе банк не нужен, на книге в 1500 глав имена разъедутся». + Это механическая, а не эстетическая причина, по которой связка не сводится к однопроходке. +3. **Вынесенный из скрытого канала артефакт.** У `deepseek-v4-pro` медиана **96% предложений + финального текста встречается в трейсе размышления ДОСЛОВНО**. ⇒ черновик — не лишний шаг, а тот + же самый черновик, который дорогая модель всё равно пишет внутри себя, только вынесенный наружу + и переиспользуемый. Самый сильный внутренний аргумент за топологию. + +### 2.3 Отказной режим связки — и он есть только у неё + +**Эхо-мина дешёвого черновика:** связка покрыла **9 из 10** подряд идущих глав против **10/10** у +однопроходки. ⇒ связка не безусловно лучше: у неё есть режим отказа, которого у однопроходки нет, +и движку нужен фолбэк (вариация ре-гена · эскалация модели черновика · деградация в однопроходку). +Фолбэк не построен. + +### 2.4 Экономика — 90% денег в одной роли, и есть замена в 6 раз дешевле + +| | на книгу 1500 глав Гу | +|---|---| +| боевая связка | **$127**, из них **редактор $114 (90%)** | +| тот же черновик + редактор `glm-5` | **$20** (×6.3 дешевле) **при неразличимом качестве** | +| однопроходка `pro` | $62 | + +⚠ Правило сметы: считать **по `total_tokens`, а не по длине перевода** — иначе любая новая идея +будет оценена неверно (размышление биллится внутри `completion_tokens`). +⚠ Ходившее по докам «редактор = 73% денег» — **фантом**; реальных знаменателя два: 49.3% всего +прогона и 81.3% внутри порции П1. Причина большой доли **не установлена**. + +### 2.5 Что связка НЕ покупает + +**Ось верности она не двигает** — редакторская стадия покупает беглость и термин. Обратное +утверждение («платим верностью за беглость») было выдвинуто и снято той же сессией 31.08. +И **кросс-главный эффект банка — центрального узла связки — не замерен ничем**. + +### 2.6 Внешний мир: связки, которая бьёт нашу, не найдено + +Поиск 03.09 по шести областям с журналом запросов: **ни одной работы**, показывающей обратное +любому из наших чисел на художественном или длинном тексте. Три кандидата разобраны: + +- **AIDA Agents** (`2026.eamt-2.4`): NMT-черновик под тем же постредактором **лучше** LLM-черновика + (zh 48.1 против 41.5), а параллельные черновики с арбитром хуже одиночного. ⚠ Знак **против нас**, + но прибор — только BLEU, человека в Table 1 нет, а в Table 2 (единственной с человеком) **инверсия: + по BLEU система выигрывает 6/6, по человеческой оценке проигрывает 5/6**. Своей контр-улики на + прозе у нас нет — это честная открытая угроза, а не отбитая. +- **ReflectMT** (`2604.19144`): требует своих весов (LoRA + RL), единица — предложение. И в его же + Table 1 явный второй проход поверх готовой модели обыгрывает RL-интернализованный. +- **AIDAterm** (`2026.acl-industry.63`): батчевая подача глоссария роняет точность на 22.4 п.п., + **но в той же Table 4 поднимает консистентность 87.3 → 89.8** — по нашей целевой функции работает + против собственного вывода. + +--- + +## 3. ВОПРОС 2: качество и консистентность на длине + +### 3.1 Где мы сейчас — по вычитке 17 глав боевого перевода + +**59 блокирующих претензий на 17 глав = 3.5 на главу** при планке владельца ≤2 (`PROGRESS.md`, +«Полигон» 03.09). В планку уложилась 1 глава из 17. При этом все 17 вычитчиков независимо ответили +«читается как книга» = да. + +**Остаток, который не берёт никакой детерминизм: 12 искажений смысла + 6 сломанных мизансцен = +1.1 на главу** — ниже планки. То есть **потолок механизации известен**. + +### 3.2 Три дыры прибора, каждая с готовой дешёвой починкой + +1. **Дрейф ВНУТРИ составного имени невидим** ни пост-чеку движка, ни presence-метрике: + `古月方源 → «Гу Юэ Фан Юань»` при каноне «Гуюэ» (`23-editor-tier.md:7609`, Д50.3). + Починка названа там же: **проверять алиас-ключ на собственную канонную форму**. + Внешний урок того же класса — BOOKCOREF Table 3: MUC **83.1** при CEAFφ4 **2.4** на одном выходе + ⇒ **прибор консистентности обязан печатать две метрики парой**; расходятся — вердикта нет. +2. **$0-гейты насыщены нулём:** род 0/15, язык 0/15 у всех четырёх армов (`KONSILIUM-30-08.md` п.5); + прогон `RunCheapGates` по 11 цитатам вычитки — **1 срабатывание** (`PROGRESS.md:292`). + Вывод «зелено по гейтам ⇒ приемлемо» — **мёртв** (там же, п.6). +3. **Глоссарный чекер: precision 0.067** — 14 ложных на 1 верное (N=3015, ратифицировано D39.39). + Внешняя планка: QE обязана достичь **>80% F1**, прежде чем помогать, иначе подсветка якорит + правки в 2–4.6× независимо от точности (`16-reader-ide-alignment.md:80-84`). + ⇒ **чинить или отключать до того, как строить что-то поверх.** + +### 3.3 Банк памяти: не подан, течёт, и его форма подачи — измеримая ось + +- **Подписанный канон существует и не подключён:** сид 58 записей / 53 `approved`, ключа + `glossary_seed` в конфиге стенда нет (`PROGRESS.md`, «Полигон» 03.09). + При подписи банк даёт **99.3–100%** консистентности (Д50.2, 375–548 пар). +- **Но «канон в сид» замерен как несработавший** у автора `booktrans`: «разведка молча переименовала + заглавие при живом каноне, а бюджет промпта обрезал цикл на второй книге из четырёх» — + и заменён **принудительным детерминированным гейтом** (`pipeline.py:3061-3070`). + ⇒ сид подаётся **как вход гейта, а не как инструкция модели**. +- **Хвост майнера невидим навсегда:** 2110 ранжированных → 442 годных → **117 внутри окна потолка**, + **325 невидимы постоянно** (строка бэклога 223); кап инъекции при этом **течёт на 40–60%**. +- **Форма подачи — измеримая ось, а не данность.** Внешний контролируемый A/B: батчевая подача + роняет точность на **22.4 п.п.**, посегментная — нет; разбавление глоссария **верными, но + нерелевантными** записями роняет точность по нужным терминам до **50.1**. + ⚠ Наш `research/15:149` «контролируемого A/B форматов глоссария не существует» — **опровергнут**. + ⚠ И по нашей целевой функции число 22.4 работает **против** переделки: консистентность у батча выше. +- **Внешнее предупреждение:** механизм памяти этого класса умеет **ухудшать** консистентность + (+415.75% ошибок связности на одной из клеток ConWriter). ⇒ любой замер банка обязан нести + **активный ноль «без банка»**. + +### 3.4 Наш прибор терминов измеряет не то, что мы думаем + +Внешний замер против человека (n=500, 3 эксперта): **exact-match точность терминов τ 0.195**, +хуже COMET (0.322) и много хуже LLM-судьи (0.514). И сам вопрос «термин верен» ненадёжен даже у +экспертов (**κ 0.58–0.61**), тогда как «термин не переведён» надёжен (**κ 0.94–1.0**). + +⇒ Наши «взвешенные промахи 0.23% / эффективная консистентность 100.0%» измеряют **совпадение +строки**, а не то, что человек назовёт верным термином. Практический вывод для промтов: спрашивать +**«пропущен / не переведён»**, а не «верен ли». + +### 3.5 Прибор translationese: переводность ≠ качество + +Набор из 45 морфосинтаксических признаков отличает переводной русский от непереводного с +**macro-F1 0.92–0.94**, но на задаче «хороший/плохой перевод» **проигрывает тупому классификатору** +(68% против 73%). При книго-раздельных фолдах абсолютные числа падают с 89–99% до **59.44–84.44%**. + +⇒ Правиловый детектор (образец — `inkos/ai-tells.ts`: чистые правила, язык вынесен в данные, пороги +по вариативности длин и частоте хеджей) годится как **дескриптор и как $0-гейт грубого брака**, но +**не как гейт качества** — и не как замена суждению. Формулировку «валидировано на русской художке» +из `29-...-codex.md:368` надо снять: она стоит на наивном 10-fold. + +--- + +## 4. ЧТО НАШЛОСЬ СНАРУЖИ И ЧЕГО У НАС НЕТ + +Все пункты — механизмы, не выводы; переносится конструкция, не число. + +1. **AskQE** (`2504.11582`) — прототип **прибора верности**: вопросы генерируются из ИСХОДНИКА, + ответы берутся по ПЕРЕВОДУ, эталон не нужен. Это ровно класс нашего непостроенного прибора. + ⚠ Числа не переносить (другой домен); брать **конструкцию**. + ⚠ И ограничение, замеренное на художественном тексте: прибор понимания (10 вопросов) **упирается + в потолок** — как дискриминатор качества на художке Q&A не работает. ⇒ строить как + **двусторонний** (пропущенное И приписанное), а не как тест на понимание. +2. **Long-CIRT** — готовая форма измерения **потери фактов на длине**: обратный прогон при + фиксированном решателе, печатается **собственный пол на непереведённом исходнике**, ось разложена + по длине 0.5k–16k. Ровно та форма («отрицательный результат только с положительным контролем»), + которую требует наш `NORMY-ZAMEROV.md`. +3. **Привязка упоминаний к канону имён** (BOOKCOREF): при **известном списке имён** — то есть в нашей + ситуации, у нас банк — Character Linking **F1 86.3**, CoNLL **80.5 на полной книге**, а дешёвый + детектор по шаблонам — точность **95.6**. Числа 41–47, которые сессия сперва подала как + отрезвляющие, относятся к системам **без** списка имён. +4. **Четыре механизма `wenyi`**, которых нет ни в одной строке наших доков: индекс улик с подсчётом + вхождений термина (`BookEvidenceIndex` / `term_occurrences`), **детектор циклов** в ревью-петле, + учёт **伏笔** (заготовок-предвестий) и **half-life** — затухание веса памяти. + ⚠ Их же ограничение: пулловый индекс **не опрашивается**, пока дешёвый локальный критик не нашёл + кандидата ⇒ термин, испорченный единообразно по всей книге, не находится никогда. +5. **Нормы выборочной вычитки** (LifeBook): `n ≥ ln(1−conf)/ln(1−q)` на страту, доверие релиза = + минимум по стратам, **новый сид после починки**. ⚠ Наши 17 глав — **сплошной блок 26–42**, один + кластер: книжного доверия он не даёт **ни при каком исходе**, и повтор по тем же главам после + починки запрещён. +6. **Жюри с обучёнными весами** (один вес отрицательный, −1.29) окупается **асимметрией исправлений**, + а не точностью. ⚠ Наш вывод «консилиум моделей не окупается» (D39.102) замерен на **равноправном** + совете — этот режим он не покрывает, формулировку надо сузить. + +### 4.1 Что снаружи протухло за пять недель + +`LinguaGacha` (★2396) с 31.07.2026 **строит агентный редактор**: 305 коммитов за 25.07–03.09, 104 из +них в агентных каталогах, восемь скилов, обзор по четырём осям. Наш `research/22:285` печатает +обратное: «явно НЕ в мульти-агент/редактор». ⇒ **эррата в `research/22` и `29`** (зона оркестратора); +срок годности харнесс-обзора — **недели, а не месяцы**. + +--- + +## 5. ПЛАН + +Порядок задан не ценностью, а **зависимостями**: каждый следующий шаг бессмыслен без предыдущего. + +### Шаг 0 — то, без чего остальное неизмеримо ($0, полигон) + +1. **Починить или отключить глоссарный флаг** с precision 0.067. Пока он даёт 14 ложных на 1 верное, + любая затравка ревью гейтами приедет с мусорным входом. +2. **Починить измеритель критика:** подтверждения критика уходят фиксеру как задания (18.3% и 23%, + два независимых замера). Лечение уже написано на соседней ветке (`zakhod.py:142`). + Без этого **любой замер критик→фиксер завышен на ~20% шума** — включая тот, которым мы его + отвергли. +3. **Алиас-ключ на собственную канонную форму** — закрывает дыру «дрейф внутри составного имени». +4. **Пара метрик в приборе дрейфа:** presence и выравнивание идентичности печатаются рядом с + шум-полом; расходятся — вердикт не печатается. + +### Шаг 1 — прибор верности ($0, назван в наших доках и не построен) + +`23-editor-tier.md:7897-7900`: **двусторонний контроль объёма** (гейт ловит обрушение длины, а рост — +нет) плюс **счётчик добавленного содержания на абзац**. Конструкция AskQE берётся как образец +двусторонности, **не как источник чисел**; форма отрицательного результата — от Long-CIRT +(собственный пол на непереведённом исходнике). + +⚠ Ограничение назвать сразу: контроль длины — **известный источник ложных срабатываний** +(в индустриальных чекерах цель длиннее на 20% флагается по умолчанию). + +### Шаг 2 — бэкенд, по уже заказанным строкам (зона оркестратора) + +Экран целевого языка (строка 46) · заголовки глав (160/161/162, 201) · включение петли ремонта +(13, решение владельца) · морфо-гейт рода (82) · вынос вердикт-полей из хеша запроса (49, спека в +`backend/docs/`). +⚠ И **ратифицированный, но не построенный** механический пре-гейт перед редактором (D39.117): брак +5 клеток против 10/23 при **половинной цене**. Он выше в очереди, чем любой непроверенный K7. + +### Шаг 3 — покупка длины (~$2, после шагов 0–1) + +15 глав подряд с засеянными характер-листами (Д38.6). ⚠ Со **стратами** (заголовок · диалог · +описание · имена и термины · числа) и **случайным сидом**: сплошной блок книжного доверия не даёт. + +### Шаг 4 — только с прибором в руках + +`K7` **без ноги фиксера** (она измерена и пала): однопроходка как **источник банка**, а не как +замена связке. И **фолбэк на эхо-мину** — режим отказа, который есть только у связки. + +### Чего не делать + +- Не строить дифф-интерфейс и патч-протокол: редактор **уже** правит 4–6% знаков, менять протокол + доставки того же поведения — трата (и D39.108 «диффы откладываются»). +- Не покупать судейских панелей: парный судья назвал победителя в **29 голосах из 30 на чистом шуме**. +- Не переносить внешние числа: 38 находок из 38 содержали число, работающее против собственного + вывода карточки. +- Не считать «китайские и русские источники недоступны»: четыре китайских открыты полным текстом; + барьером был отказ инструмента, а не отсутствие источника — тот же класс ошибки уже описан в + `research/29` §5.3. + +--- + +## 6. ЧЕГО ЭТА РАБОТА НЕ ДАЛА + +- **Ни архитектуры, ни прибора** — только кандидаты в замер и порядок их проверки. +- **Внешнее подтверждение планки владельца ≤2 претензии на главу** — издательских норм в доках нет, + планка не откалибрована ничем. +- **Кривой деградации консистентности на сотнях глав** по-прежнему нет ни у кого; наш прибор дрейфа + на 17 главах (0.74% книги) остаётся единственным в переводческой постановке. +- **Классы источников, не тронутые вовсе:** отраслевые отчёты локализации, издательская наука, + препринт-площадки. Китайская и русская индустрия задеты частично.