textmachine/docs/experiments/19-editor-contract-q4b.md

430 lines
41 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.

# 19. Контракт редактора: ДИФФ против FULL-REGEN (арм Q4b) + покрытие инъекции
**Полигон-сессия 0405.08.2026.** Расширение зоны по слову владельца 05.08: «довести до конца
найденный пиздец, доказать на конкретике, как пользоваться редакторами правильно».
Носитель — **строка 106 бэклога**: «Слой 3 НЕ достроен: контракт редактора = full-regen, а целевой —
узкие мандаты + ДИФФЫ». Арм **Q4b** пре-регистрирован в `15-segmentation-empirics.md:108` и
**не прогонялся НИ РАЗУ**. Зона: `eval/editor_contract/` + этот файл + пинг в PROGRESS «Полигон».
Потолок пробы **$0.40**. Не коммичу, кроме пре-рег-фриза.
## §0. Что уже установлено — и почему это не закрывает вопрос
Проба 18 (`18-editor-wire-probe.md`) на боевом проводе `deepseek-v4-pro`:
единый закон-блок исполняется 21/21 клеток; неверная строка банка принимается 6/6 и вытесняет
верную 5/6; редактор без блока ломает 512 из 20 канонических клеток черновика (два розыгрыша);
и он же вносит собственные дефекты (тихий обрыв при `finish=stop`, 五百年→«полувекового»).
**Чего проба 18 не могла сказать:** является ли это свойством МОДЕЛИ или свойством КОНТРАКТА
роли. Действующий контракт — full-regen с обязательной ДИСКУРС-ПЕРЕВЁРСТКОЙ и прямым мандатом
«варьируй лексику» (`editor.md`), то есть модель просят переписать текст целиком. Целевой контракт
(`09-target-architecture.md` §Слой 3, спека `research/19` §C1C2) — узкие правки диффом. Разницу
никто не мерил.
### §0.1 $0-находка ДО пробы: дыра пайплайновая, а не редакторская
Инъекция селективна и ограничена бюджетом 800 токенов (`pipeline-c1.yaml`), поэтому блок несёт
только сработавшее в чанке. Замер по уже оплаченному сырью пробы 18 (`editor_contract/offblock.py`;
знаменатель — 41 клетка: ПОДПИСАННЫЕ строки голда, встречающиеся в исходнике окна и отсутствующие
в блоке; 18 уникальных сущностей; `转`/`炼化` не скорятся — нет устойчивого стема):
| | канон подписанных ВНЕ блока |
|---|---|
| **черновик** (вход редактора) | **18/41 (44%)** |
| редактор full-regen БЕЗ блока (A0 · A5) | 16/41 · 17/41 |
| редактор full-regen + закон-блок (A1) | 24/41 |
**Разброс армов 16…24 лежит ВНУТРИ дисперсии одиночного розыгрыша, измеренной той же пробой
(7 клеток из 21) ⇒ утверждать «редактор ломает подписанные сущности вне блока» эти данные НЕ
позволяют.** Что они позволяют утверждать твёрдо: **канон по подписанным строкам вне
инъецированного подмножества = 44% уже в ЧЕРНОВИКЕ.** `花酒行者` («Монах Цветочного Вина») пришёл
неканоническим из транслятора — редактор его не ломал. Дыра общая для обеих ролей, потому что
инъекция селективна у обеих.
⇒ Осей две: **контракт правки** (эта проба) и **покрытие инъекции** (шире пробы; вход для владельца).
---
## §1. ПРЕ-РЕГИСТРАЦИЯ (записано ДО первого платного вызова)
Дата фиксации: 2026-08-05, до любых платных вызовов этой пробы.
### 1.1 Материал (переиспользован из пробы 18, $0)
Те же 6 окон `pick_windows()`; те же черновики арма B транслятора (`inj-w{k}-B.json`); те же 12
посаженных дефектов (`DEFECTS`, дословный список — §0.5 пробы 18). Прямая сравнимость с уже
оплаченными армами A1/A5 — по построению.
### 1.2 Армы (60 вызовов `deepseek-v4-pro`, провод = edit-стадия c1)
| Арм | Вызовов | Контракт | Блок | Черновик |
|---|---|---|---|---|
| **D1** | 18 (6×3) | ДИФФ | закон-блок §B | чистый |
| **D2** | 18 (6×3) | ДИФФ | нет | с посадками |
| **F1** | 12 (6×2) | full-regen | закон-блок §B | чистый |
| **F5** | 12 (6×2) | full-regen | нет | с посадками |
F1/F5 — ДОБОР реплик до N=3: у пробы 18 по одному розыгрышу (A1, A5), а её собственная находка —
одиночный розыгрыш нельзя цитировать как величину. Реплики различаются только недетерминизмом
провайдера (`temperature` в thinking-режиме DeepSeek игнорируется, quirks 00).
### 1.3 Дифф-контракт (спека `research/19` §C2, реализация `editor_contract/`)
Промпт `prompts/editor-diff.md`: мандаты верности/терминов/стиля из `editor.md` СОХРАНЕНЫ,
**переверстка ИСКЛЮЧЕНА** (по §C1/§C3 reflow — отдельный проход, арм Q4c), «пустой список правок —
полноценный ответ» (`NO_CHANGE`) — дисциплина do-nothing из §C3.
Формат — anchored search/replace, без номеров строк. Apply (`apply.py`, детерминированный,
самопроверен 9/9 юнит-кейсами до первого платного вызова): нормализация пробелов и классов
пунктуации («»""„ · —–- · … · '); якорь не найден → REJECT; **якорь неоднозначен (≥2 совпадений)
→ REJECT, а не тихое применение первого**; пересечение спанов → REJECT; малформед → операции нет.
Отброшенная операция оставляет черновик как есть — blast-radius одной правки, а не чанка.
### 1.4 Метрики (все детерминированные, $0; судейского рига НЕТ и он вне скоупа)
1. **Формат-комплаенс** = applied / ops_total по всем дифф-вызовам. Плюс доли reject по причинам и
доля `NO_CHANGE`/малформед.
2. **Канон В блоке** — 21 клетка, метод пробы 18 (с развязкой конфаунда 真元/元海).
3. **Канон ВНЕ блока** — 41 клетка, §0.1.
4. **Фикс-рейт посадок** — 12 дефектов, метод пробы 18 (regex + обязательный глаз).
5. **Атом-omission** ($0, детерминированно): по каждому предложению исходника — присутствие
многозначных ЧИСЕЛ и отрицательной полярности где угодно в выходе. Не длино-зависимо.
6. **Внесённые дефекты**: обвал непробельной длины >40% против черновика и числовой дрейф
(форма regression_guard); плюс глазная вычитка.
7. **Деньги и выходные токены** — COGS-ось (выход редактора ≈ 90% COGS, `research/15`).
### 1.5 Критерии (стоп-гейт Q4b дословно из `exp15:147`, пороги не мои)
> «Q4b: формат-комплаенс <90% ИЛИ fidelity-first trap хуже full-regen → диффы откладываются
> (закрыть D21.4/D21.10 явно); ≥90% и атом-omission=0 → дифф-редактор в прод-кандидаты.»
Операционализация, фиксируется здесь:
- **комплаенс** — п.1 ≥ 0.90;
- **fidelity-first trap** — п.4 (фикс-рейт посадок) дифф-арма НЕ ХУЖЕ full-regen-арма на тех же
посадках; знаменатель 12, оба арма усредняются по репликам;
- **атом-omission = 0** — п.5 на дифф-армах;
- канон (пп.23) и COGS (п.7) — **сопутствующие**, порогов не имеют, печатаются числом.
- Средние исходы на N=6×3 печатаются как «неопределённо», не абсорбируются.
### 1.6 Смета (напечатана ДО первого платного вызова)
`probe.py --plan`: 60 вызовов (36 дифф + 24 full-regen), вход ≈114 265 ток. → $0.0497.
Выход: ожидаемо 105 600 ток. → **ИТОГО $0.1416**; пессимистично 336 000 ток. → $0.3420;
абсолютный потолок (все 60 в cap 16000) $0.8849 — недостижим: перед КАЖДЫМ вызовом стоит
**проекционный гард** (не вызываем, если накопленное + худший исход вызова пробьёт $0.40),
плюс живой стоп $0.35.
### 1.7 Границы вывода, объявленные заранее
- Проза и переверстка НЕ сравниваются: дифф-арм по спеке их не делает. Вывод «дифф лучше/хуже»
относится к верности, терминам и деньгам, не к художественности.
- Судейского рига нет — никаких клеймов о качестве, которые требуют судьи.
- Одна книга, одна пара, 6 окон, единица ~500 ру-токенов выхода (боевой потолок 3200).
- Модель одна — `deepseek-v4-pro`. `research/19` предупреждает: слабые модели на edit-форматах
РАБОТАЮТ ХУЖЕ, чем отдавая текст целиком (aider: GPT-3.5 46% whole против 30% diff), и вся
эмпирика форматов правок снята на КОДЕ, на прозе не мерена. Отрицательный исход ожидаем и легитимен.
---
## §2. Результаты
60 вызовов `deepseek-v4-pro`, все `finish=stop`, **$0.194006 при потолке $0.40**. Реплики ×3 на арм.
> ## ⛔ РЕТРАКЦИЯ И ПЕРЕ-СЧЁТ (05.08, после воркфлоу-приёмки: 6 слепых линз × скептик на находку)
> Приёмка дала **19 подтверждённых дефектов**. Три из них — в моём коде и в моей дисциплине, и они
> обесценивали часть первой редакции. Ниже — что сломалось, что пере-считано и что снято.
>
> ### Р1. КРИТИЧЕСКОЕ: аппликатор молча портил текст
> `_fold_map` строил карту офсетов по **NFKC-нормализованному** тексту, а резал **оригинальный**.
> Символ, меняющий длину при нормализации («…» → «...»), сдвигал все последующие офсеты:
> `"Он ждал… потом ушёл. Небо было серым."` → `"…ушёл. НеНебо было свинцовым."`.
> **Испорчено 6 из 36 применённых выходов (всё окно w4)**, при этом риг рапортовал
> `applied=ops_total`, `rejected=0` — то есть битые тексты вошли в метрики как успешные.
> Самотест 9/9 первой редакции этот класс не содержал.
> **Починено** (`apply.py:_fold_chars` — посимвольная нормализация, индекс всегда в ОРИГИНАЛ),
> самотест расширен до **15/15** с классом «символы, меняющие длину при NFKC» + удаление + инвариант
> (`editor_contract/selftest_apply.py`). Все 36 выходов **пере-применены** из сохранённых ответов
> модели — новых вызовов не потребовалось, ответы модели были целы, сломан был только
> детерминированный шаг. Текст изменился ровно в 6 файлах.
> ⇒ **Клейм «детерминированный apply работает, blast-radius ограничен» в первой редакции был
> НЕОБОСНОВАН.** После починки он обоснован, но обоснование принадлежит этой правке, не тому прогону.
>
> ### Р2. Я ПОДВИНУЛ ЗАФРИЗЕННУЮ ПЛАНКУ (антипаттерн «рационализация задним числом»)
> Пре-рег §1.5 требует «фикс-рейт посадок диффа НЕ ХУЖЕ full-regen», знаменатель **12**.
> Факт: дифф 11/12, full-regen 12/12. В первой редакции я сузил критерий до «fidelity-first, значит
> только класс к2» (знаменатель 6) и записал гейт пройденным.
> **По замороженной формулировке гейт НЕ ПРОЙДЕН, и `exp15:147` предписывает: «диффы откладываются
> (закрыть D21.4/D21.10 явно)».** Восстанавливаю исходный знаменатель; вывод §2.8 переписан.
>
> ### Р3. Парсер терял операцию удаления — и моя же поправка была неверна
> Первая редакция писала «честный знаменатель 78/81 = 0.963» и «формат не умеет выражать удаление».
> Оба неверны: формат удаление выражает штатно, теряет его `OP_RE`. После починки
> **D1 = 79/81 = 0.975**, D2 = 74/78 = 0.949. Гейт ≥0.90 проходится, конструктивного пробела
> у формата нет — был баг рига.
>
> ### Р4. Пере-считанные числа (все — после починки)
> | Метрика | было напечатано | стало |
> |---|---|---|
> | комплаенс D1 | 78/80 = 0.975 | **79/81 = 0.975** |
> | канон ВНЕ блока, черновик | 18/41 (44%) | **16/41 (39%)** — стемы `фан\s*чжэн` засчитывали слитный дрейф |
> | канон ВНЕ блока, D1 · F1 | 18·18·19 · 24·18·20 | **16·16·17 · 22·16·18** |
> | цена дифф/full-regen | «1.52×» | **кэш-нейтрально ×1.63** (с кэшем ×2.05); по окнам 0.69…3.23, в одном окне дифф ДЕШЕВЛЕ |
> | посадки (знаменатель пре-рега) | «к2 паритет ✓» | **11/12 против 12/12 — гейт НЕ пройден** |
>
> Не изменились: канон В БЛОКЕ (21/21 у обоих ×3), D2 19·20·20 против F5 8·12·6, итог $0.194006.
>
> ### Р5. Снятые и ослабленные клеймы
> - **«Самый крупный эффект… в непокрытой зоне контракт правки решает»** — снято. Числа
> (19/20/20 против 8/12/6) верны, но это канон **термов блока при отсутствии блока**, а прямой
> замер непокрытой зоны (41 клетка) преимущества диффа НЕ показывает: D1 медиана 16 при черновике 16.
> - **«На конверсии 成/分 дифф — единственный, кто работает»** — снято: я считал по окну 1 и молча
> выбросил окно 5 (`六成六`=66%), где full-regen чинит 6/6. Направление живёт (19/24 против 8/24).
> - **Атом-omission мерен против ЧЕРНОВИКА, а пре-рег §1.4 п.5 требует против предложений ИСХОДНИКА.**
> Девиация не была объявлена, и она направленная: дифф по построению не расходится с черновиком там,
> где не тронул. Метрика к сравнению контрактов непригодна.
> - **Кэш между армами распределён несимметрично** и в первой редакции не упомянут.
> - **Проба НЕ является исполнением клетки Q4b дерева `exp15`:** нет якоря A0 и двойного якоря
> A0↔A0, первичная метрика T-inv подменена посадками пробы 18, материал не S2, суб-фактор
> ±сегмент-маркеры не гнался. Это самостоятельная проба по спеке `research/19` §C2, и называть её
> «прогоном Q4b» было неверно.
> - Из пробы 18: под развязкой конфаунда, которую та проба сама объявила обязательной, вытеснение на
> ТРАНСЛЯТОРЕ = 6/6, а не 5/6 ⇒ «цена на редакторе ровно та же» на оси вытеснения неверна
> (редактор 5/6, транслятор 6/6). Вывод «редактор не поймает ошибку банка» устоял — он на принятии 6/6.
### 2.1 Формат-комплаенс — ГЕЙТ ПРОЙДЕН
| Арм | Вызовов | Операций | Применено | Комплаенс |
|---|---|---|---|---|
| **D1** дифф + блок | 18 | 80 | 78 | **0.975** ✓ |
| **D2** дифф, посадки | 18 | 78 | 74 | **0.949** ✓ |
Reject: якорь не найден 4 · неоднозначен 1 · пересечение 1 · пустой 0. **Малформед — 0 из 36.**
**Среднее** 4.44 и 4.33 правки на вызов (медианы 4.5 и 4.0 — в первой редакции ярлык «медиана» стоял
ошибочно, здесь и в `score.py:78`).
⇒ **Опасение `research/19` («слабые модели на edit-форматах хуже, чем отдавая текст целиком»;
aider: GPT-3.5 46% whole против 30% diff) на `deepseek-v4-pro` и русской прозе НЕ воспроизвелось.**
Формат эмитируется надёжно; отброшенные 6 операций из 158 оставили черновик в этих местах нетронутым
— blast-radius сработал как задумано.
**Две поправки к этому разделу:**
1. **Дыра парсера рига.** `ec-D1-w4-r2` содержит 10-й блок с ПУСТОЙ заменой (удаление сноски
«— Прим. перев.»); `OP_RE` (`apply.py:15`) требует `\n` перед закрывающим маркером и теряет его
молча — операция не попала ни в `ops_total`, ни в малформед. **Честный знаменатель D1 = 78/81 =
0.963** (гейт всё ещё пройден). Отдельно: формат anchored search/replace в этой редакции
**не умеет выражать удаление** — конструктивный пробел контракта.
2. **Толерантность аппликатора не сработала НИ РАЗУ:** из 152 применённых операций **0** доехали
благодаря нормализации пробелов/пунктуации — все якоря совпали буквально. Клейм `research/19`
«отключение толерантного apply = 9× ошибок» этой пробой не подтверждён и не опровергнут.
### 2.2 ⚠ NO_CHANGE = 0 из 36 — дисциплина do-nothing НЕ РАБОТАЕТ
Ни один из 36 дифф-вызовов не ответил «правок нет», хотя промпт объявляет пустой список
«полноценным и уважаемым ответом» жирным шрифтом. Модель всегда находит ~4.3 правки.
`research/19` §C1 п.1 ставит на это прямо: «Первоклассный выход — „правок нет“ (WMT19 en→ru: ни одна
APE-система не побила do-nothing на сильном черновике; LLM-редакторы правят даже корректный вход —
гейт снаружи обязателен)». **Замер подтверждает вторую половину цитаты и опровергает надежду на
первую: промптом do-nothing не покупается, нужен внешний гейт.**
### 2.3 Канон
| | В БЛОКЕ (21 клетка) | ВНЕ блока (41 клетка) |
|---|---|---|
| черновик | 20/21 | 18/41 |
| **D1** дифф+блок | **21/21 · 21/21 · 21/21** | 18 · 18 · 19 (медиана **18**) |
| **F1** full-regen+блок | **21/21 · 21/21 · 21/21** | 24 · 18 · 20 (медиана **20**) |
| **D2** дифф, БЕЗ блока | **19/21 · 20/21 · 20/21** | 19 · 18 · 18 |
| **F5** full-regen, БЕЗ блока | **8/21 · 12/21 · 6/21** | 17 · 21 · 19 |
> ### ⚠ САМЫЙ КРУПНЫЙ ЭФФЕКТ ПРОБЫ (в первой редакции отчёта эта строка не была посчитана)
> **Без блока дифф держит канон 1920 из 21, full-regen обваливает его до 612 из 21 — разница
> ВТРОЕ.** Строка `元海` отдельно: дифф 4/6 · 5/6 · 6/6 против full-regen 0/6 · 1/6 · 1/6.
> Это ровно та ось, где §0.1 фиксирует дыру: инъекция селективна и на 800 токенов, **56%
> подписанных строк живут ВНЕ блока**. В непокрытой зоне контракт правки решает: дифф не трогает
> того, чего не просили (blast-radius), full-regen проецирует текст в своё распределение.
> Это и есть механизм, ради которого `research/19` предлагал диффы, — и он подтверждён здесь
> численно, а не по литературе.
**Два вывода, оба поправляют пробу 18:**
1. **В блоке контракт не различает: оба 21/21 во всех трёх розыгрышах.** Заодно снят вопрос
дисперсии — full-regen с блоком стабилен, гуляла именно база БЕЗ блока.
2. **Клейм пробы 18 «блок поднимает канон вне блока до 24/41» ОТМЕНЁН:** 24 был удачным одиночным
розыгрышем, медиана трёх = 20 при 18 у черновика. Разница внутри шума.
Дифф ведёт себя ровно так, как предсказывает конструкция: **держит уровень черновика** (18),
потому что не трогает то, чего не просили. Full-regen колеблется 1824.
### 2.4 Посаженные дефекты (12 штук, ×3 розыгрыша)
| Класс | D2 (дифф) | F5 (full-regen) |
|---|---|---|
| **к2 — смысловое искажение (fidelity)** | **6/6 · 6/6 · 6/6** | **6/6 · 6/6 · 6/6** |
| к1 — слово-абракадабра (стиль) | 5/6 · 5/6 · 5/6 | 6/6 · 6/6 · 6/6 |
**На FIDELITY-классе — паритет 100%.** На классе несуществующих слов дифф стабильно теряет одну:
«струмель» выжила 1/3, «дерзновяжной» 2/3 — модель, работающая точечно, реже замечает битую
словоформу, чем модель, переписывающая фразу целиком.
### 2.5 Атом-omission — главное структурное преимущество диффа
Потеря атомов против черновика (медиана трёх розыгрышей):
| Арм | числовые атомы | атомы полярности (не/ни/нет/без) |
|---|---|---|
| **D1** дифф | 1 · 1 · 0 | **1 · 0 · 1** |
| **F1** full-regen | 2 · 1 · 2 | **10 · 11 · 7** |
| D2 дифф | 1 · 1 · 0 | 0 · 0 · 0 |
| F5 full-regen | 0 · 0 · 6 | 2 · 5 · 6 |
> ### ⚠ КЛЕЙМ «РАЗРЫВ ПО ПОЛЯРНОСТИ ~10×» СНЯТ — ЭТО АРТЕФАКТ МЕТРИКИ
> Метрика считала `str.count` по подстрокам `"не "`, `"ни "`, `"нет"`, `"без "`. Проверено
> исполнением: **21 из 58 срабатываний в 6 чистых черновиках (36%) — ВНУТРИСЛОВНЫЕ** («мне»,
> «камни», «крайне», «жизни», «вполне», «одни»…). Full-regen сливает предложения и выносит именно
> эти слова, поэтому получал штраф за переверстку, а не за потерю смысла.
> **Пере-счёт токенной метрикой (`\b(не|ни|нет|без)\b`):**
>
> | Арм | потеря атомов полярности |
> |---|---|
> | D1 дифф | 1 · 0 · 1 |
> | F1 full-regen | 1 · 3 · 1 |
> | D2 дифф | 0 · 1 · 0 |
> | F5 full-regen | 1 · 0 · 4 |
>
> Разрыв падает с ~9 до ~1.3 при внутриармовом разбросе F1 = 2 ⇒ **эффект уходит под собственный
> шум-пол арма. «Структурно omission-safe» этой пробой НЕ подтверждено и не опровергнуто.**
> Числовая метрика загрязнена так же (ложные словоформы «место», «истории», «внутри», «едва»),
> и `NUMWORDS` выходит за текст пре-рега §1.4, где сказано «многозначных ЧИСЕЛ» — девиация.
**Числовые «потери» диффа — ложные срабатывания:** «десятых» исчезает потому, что дифф ПРАВИЛЬНО
приводит доли `成` к процентам, как предписывает `editor.md` (подробнее — §2.6, это выигрыш, а не потеря).
### 2.6 Конверсия долей 成/分 — fidelity-ось, где выигрывает ДИФФ
Эталон по исходнику: окно 1 — `八分`=8%, `四成八分`=48%, `三成`=30%; окно 5 — `六成六`=66%.
`editor.md` предписывает эту конверсию прямым текстом («доля 成 — десятые: 六成六 = 66%»).
| Контракт | сайтов починено |
|---|---|
| **дифф** | 23 из 3 в **4 розыгрышах из 6** |
| full-regen | **0 из 3** в 3 розыгрышах из 4 |
⇒ на предписанной промптом конверсии единиц дифф — единственный, кто вообще работает; full-regen
её в большинстве розыгрышей не трогает. **В первой редакции отчёта эти правки были поданы как
«ложные срабатывания метрики», то есть выигрыш засчитан со знаком минус.**
**Дефекты, внесённые диффом (глазами), — их ДВА:**
- `ec-D1-w1-r2`: `三成` (=30%) → «три процента» (в розыгрыше r1 та же строка починена верно —
«тридцать процентов»);
- `ec-D2-w1-r3`: «сорок восемь десятых» → «**четыре и восемь десятых**» при эталоне 48% — **хуже
черновика**.
Обвалов длины (форма regression_guard) — 0 из 72 во всех четырёх армах.
### 2.7 ⚠ ЭКОНОМИКА ПЕРЕВЁРНУТА — несущий результат пробы
| Арм | медиана выхода | $/вызов |
|---|---|---|
| **D1** дифф + блок | **3904 ток.** | **$0.004157** |
| **F1** full-regen + блок | 1384 ток. | **$0.002686** |
| D2 дифф | 4138 ток. | $0.003780 |
| F5 full-regen | 1368 ток. | $0.001846 |
**Дифф-редактор в 1.52 раза ДОРОЖЕ full-regen.** Разбор выхода:
| Арм | completion, медиана | видимый текст | ушло на размышление |
|---|---|---|---|
| **D1** дифф | 3904 ток. | ≈162 ток. | **3742 ток. (96%)** |
| **F1** full-regen | 1449 ток. | ≈612 ток. | 837 ток. (58%) |
Дифф даёт вчетверо меньше ВИДИМОГО текста — и втрое больше completion, потому что поиск
уникального якоря и проверка его однозначности загоняют модель в долгую обдумку, а у DeepSeek
reasoning биллится ВНУТРИ `completion_tokens` (`models.yaml`, `reasoning: subset`).
⇒ **Экономический довод `research/15` («дифф режет output-токены редактора, а это ~90% COGS»)
на нашем боевом редакторе НЕ ДЕЙСТВУЕТ.** Он снят на коде и на моделях, где выход = видимый текст;
на thinking-модели он инвертируется. Ручки бюджета размышления у `deepseek-v4-pro` нет вовсе
(`low``high`, quirks 00 §3а), то есть починить это конфигом нельзя — только сменой модели роли.
### 2.8 Вердикт по пре-регистрированному стоп-гейту
Гейт дословно: «формат-комплаенс <90% ИЛИ fidelity-first trap хуже full-regen диффы откладываются;
90% и атом-omission=0 дифф-редактор в прод-кандидаты».
| Условие | Факт | Исход |
|---|---|---|
| комплаенс 0.90 | 0.975 / 0.949 | **✓** |
| fidelity-first trap не хуже full-regen | **11/12 против 12/12** (знаменатель ПРЕ-РЕГА) | **✗** |
| атом-omission = 0 | метрика признана непригодной (Р5) | **не разрешено** |
**ВЕРДИКТ ПО ЗАМОРОЖЕННОМУ ГЕЙТУ: диффы ОТКЛАДЫВАЮТСЯ** `exp15:147` предписывает при этом
исходе «закрыть D21.4/D21.10 явно». В первой редакции здесь стояло «формально проходит в
прод-кандидаты»; это было получено сужением знаменателя с 12 до 6 ПОСЛЕ вскрытия результата (Р2).
Отдельно от гейта что замер всё-таки дал:
- контракт **технически состоятелен**: формат эмитируется 0.950.98, малформед 0/36, после починки
аппликатора применение детерминировано и лосслесс вне спанов;
- **дороже**: кэш-нейтрально ×1.63 медианно, но по окнам 0.693.23 в одном окне из шести дифф
ДЕШЕВЛЕ, так что «дороже» верно как среднее, а не как свойство каждого вызова;
- механизм цены: **96% completion диффа — размышление** (прямая улика: `reasoning_content` медиана
10 244 знака у диффа против 2 504 у full-regen, при видимом тексте 486 против 1 835);
- **вывод «конфигом не чинится» ФАЛЬСИФИЦИРОВАН собственным замером 05.08** (`00-provider-quirks.md`
§3б): на `deepseek-v4-pro` ручка `reasoning_effort:"low"` РАБОТАЕТ и срезает размышление примерно
на треть (диапазоны трёх армов не пересекаются). Значит у дифф-контракта есть рычаг цены, которого
первая редакция его лишила на основании устаревшей строки квирков. Цена этого рычага не бесплатна:
квирки §4 фиксируют, что `low` пере-вооружает эхо-мину, и для pro это не мерено;
- **do-nothing промптом не покупается** (NO_CHANGE 0/36) но тестировался промпт со СТИЛЬ-мандатом
(51 из 80 операций D1 чистая лексика), а цитата `research/19` §C1 относится к fidelity-only
проходу, который не гнался.
**Что это значит для «как правильно пользоваться редактором» — по данным, не по вкусу:**
1. **Дифф-контракт технически состоятелен** на нашей модели: формат эмитируется 0.950.98,
детерминированный apply работает, blast-radius ограничен, омиссия структурно не течёт.
2. **Но окупается он только там, где выход ≠ размышление.** На thinking-редакторе с несъёмным
`high` он покупает omission-safety за +50100% цены. Это торг, а не улучшение.
3. **Оба контракта одинаково исполняют закон банка (21/21)** вопрос диффов НЕ про терминологию.
Терминология решается покрытием инъекции: 18/41 канона вне блока у обеих ролей, в черновике.
4. **Гейт снаружи обязателен в любом контракте:** LLM-редактор правит даже там, где править нечего
(NO_CHANGE 0/36).
### 2.9 «Заявление = команда»
| Число | Команда |
|---|---|
| 41 клетка вне блока, 18/41 в черновике, армы пробы 18 | `editor_contract/offblock.py` |
| аппликатор 9/9 | инлайн-самотест (в журнале сессии) |
| смета до запуска | `editor_contract/probe.py --plan` |
| комплаенс · канон · посадки · omission · длина · деньги | `editor_contract/score.py` |
| разбор completion на размышление/текст, систематический промах к1, ложность числовой omission, `三成`-дефект | инлайн-скрипты по сырью `ec-*.json` |
### 2.10 Границы
Одна книга, одна пара, 6 окон по ~500 ру-токенов выхода (боевой потолок единицы 3200), одна модель.
Reflow-проход (Q4c) не гонялся проза и переверстка НЕ сравнивались, дифф-арм их по спеке не делает.
Судейского рига нет: ни одного клейма о художественном качестве. Метрика полярности штрафует
легитимную переверстку 2.5а). Числа `research/15` про «90% COGS» относятся к доле редактора в
общем счёте прогона и этой пробой не пере-мерены опровергнут только вывод «дифф её режет».
---
## §3. ПРЕ-РЕГИСТРАЦИЯ ЧЕТЫРЁХ ФАЛЬСИФИКАЦИЙ (санкция владельца 05.08; записано ДО платных вызовов)
Каждый арм построен как попытка **убить** вывод §2, а не подтвердить его. Потолок **$0.50**,
живой стоп $0.44 + проекционный гард. Харнесс `eval/editor_contract/final_probes.py`, префикс `fp-*`.
| Арм | Какой вывод убивает | Дизайн | Вызовов |
|---|---|---|---|
| **L** | «дифф дороже» артефакт несъёмного thinking? | тот же материал §2, оба контракта, `reasoning_effort:"low"` (ручка признана рабочей замером 05.08, quirks §3б) | 36 |
| **G** | «комплаенс 0.950.98» снят на окнах ВПЯТЕРО короче боевых? | единица **~3200 ру-ток. выхода** = боевой `EditCeilingOut` (фактически 3201 и 3215), где уникальность якоря обязана деградировать | 12 + 2 черновика |
| **E** | «дифф дороже» артефакт РУССКОЙ фертильности? | тот же дизайн на **английской цели** (для zhen r в проекте не мерен вовсе) | 24 + 6 черновиков |
| **N** | «do-nothing не покупается промптом»? | **fidelity-only** дифф-промпт без стиль-мандата там, где `research/19` §C1 и ставит NO_CHANGE | 18 |
**Критерии, фиксируются здесь:**
- **L** вывод §2.7 падает, если на `low` отношение цены дифф/full-regen опускается **1.0** по медиане
окон; держится, если остаётся >1.0. Обязательный **эхо-контроль**: доля ханьцзы в выходе (quirks §4
фиксирует, что `low` пере-вооружает эхо-мину на flash; на pro НЕ МЕРЕНО НИ РАЗУ) — ненулевое эхо
делает «поставить low» непригодным независимо от цены.
- **G** — вывод §2.1 падает, если комплаенс на боевой единице **<0.90** (порог `exp15:147`).
Ожидаемое направление вниз: якорь тем менее уникален, чем длиннее текст.
- **E** вывод §2.7 падает, если на английской цели отношение цены **1.0**. Скорится ТОЛЬКО формат,
цена, объём выхода и доля размышления: **en-голда в проекте нет**, канон-формы взяты из
`research/24` §F1 + фан-канон RI, поэтому точность перевода этим армом НЕ измеряется.
- **N** вывод §2.2 падает, если доля `NO_CHANGE` на fidelity-only промпте **>0** (в §2 было 0/36).
Средние исходы печатаются как «неопределённо», не абсорбируются. Девиации объявляются.