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

67 KiB
Raw Blame History

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. Не коммичу, кроме пре-рег-фриза.

РЕВЬЮ-ШАПКА ПРИЁМКИ (оркестратор №15, D39.108, 06.08) — ПРИНЯТ; вердикт гейта Q4b «диффы откладываются» подтверждён ре-раном. Санкция расширения зоны подтверждена владельцем 06.08. Поправки приёмки к телу: (1) §2.1: строка «80 операций / 78 применено» и поправка-1 «честный знаменатель 78/81 = 0.963, операция-удаление потеряна молча, формат не умеет удаление» УСТАРЕЛИ против замороженного рига — score.py после ФИКС-2 даёт 81/79 = 0.975, блок-удаление парсится И применяется (значение комплаенса и вердикт гейта не двигаются). (2) Вся колонка «канон вне блока» (§0.1/§2.3) снята ДО-фризовым стемом и не воспроизводится замороженной командой §2.9: комитнутый скорер даёт черновик 16/41 (39%), A0 14 · A5 15 · A1 22, D1 16·16·17 (мед 16), F1 22·16·18 (мед 18), D2 17·16·16, F5 15·19·19; причина — ужесточение стемов (方正 «Фанчжэн» слитно выпал, и по голду НОВЫЙ стем прав). Направления не переворачиваются; вывод «блок поднимает канон вне блока» остаётся отменённым. (3) Рассинхрон с эксп-20: объяснение арма E (§6.5 «обеднён знаменатель») ОПРОВЕРГНУТО репликацией с выверенным зеркалом — эффект 6.7× сохранился (эксп-20 §3.4); «дифф дороже» сужен до пары модель×целевой-язык (dspro ru 2.83 / en 0.67). В тело не вносилось — здесь шапка первична.

Установлено твёрдо. Дифф-контракт research/19 §C1 механически исправен: формат-комплаенс 0.975 на базовых окнах и 0.966 на боевой единице (порог 0.90), малформед 0 на 90 вызовах, детерминированный аппликатор самопроверен 15/15. Вопрос «умеет ли модель в диффы на русской прозе» закрыт положительно; опасение research/19 («слабые модели на edit-форматах хуже, чем отдавая текст целиком») не воспроизвелось.

Экономика против диффа, реплицировано трижды: отношение цены дифф/full-regen = 2.913 (база) · 1.677 (арм L) · 2.468 (боевая единица, дефолтный режим, 6 клеток из 6). Размышление — 95% цены диффа, растёт с объёмом ВХОДА (×2.78 при входе ×3.24, p=0.0003) и сужением мандата НЕ снимается.

Причина удорожания НЕ вскрыта. Обе гипотезы остались непроверенными: «несъёмный thinking» — арм L не исполнен (посылка про ручку low не выдержала пере-счёта, §6.2); «русская фертильность» — арм E конфаундирован неполным зеркалом промпта на проводе (§6.5).

Что упало: «do-nothing промптом не покупается» — ПАЛО. Узкий fidelity-only мандат даёт NO_CHANGE 4/18 против 0/36 у промпта со стиль-мандатом. Сужение мандата покупает дисциплину, но не деньги.

⚠ Требует действия оркестратора. Правка 00-provider-quirks.md §3б, сделанная этой же сессией 0405.08 («ручка low на deepseek-v4-pro работает, срезает размышление на треть»), ОТОЗВАНА: решающее правило «диапазоны не пересекаются» при n=3/3 воспроизводится нулевым вмешательством. Строка §3а (lowhigh для pro) возвращена в силу; звено про xhigh устояло. Если отозванная правка процитирована где-то ещё — сверить.

Решение по строке 106. Закрывать её выводом «диффы не берём» ПРЕЖДЕВРЕМЕННО. Корректный статус: full-regen остаётся каноном не потому, что дифф-контракт плох, а потому что на этой модели и в этом режиме он дороже — при невскрытом механизме удорожания. Что домерить — §6.9.

Деньги. Базовый прогон $0.194006 из потолка $0.40; четыре фальсификации $0.349566 из $0.50; контроль glm2 к пробе 18 — $0.081326. Ни один потолок не пробит, ни одна клетка не выброшена.

Дисциплина. Пре-рег обеих проб зафризен ДО платных вызовов (4d1d9e5); прогон верифицирован инструментом (verify_run.py); результаты прошли адверсариальное ревью (5 линз × скептик, 15 находок, 4 выжили) — их правки уже внесены. Отчёт содержит §6.6 «что снято» и §6.7 «девиации».


§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 на арм.

Первая редакция §2 частично отозвана (05.08). Приёмка воркфлоу дала 19 подтверждённых дефектов; несущие: (1) аппликатор диффов молча портил 6 из 36 выходов — карта офсетов строилась по NFKC-тексту, а резался оригинал, при этом риг рапортовал applied=ops_total, rejected=0; починен, самотест расширен 9/9 → 15/15, все 36 выходов пере-применены из сохранённых ответов за $0, числа ниже — уже пере-считанные; (2) я сузил зафризенный знаменатель посадок 12→6 ПОСЛЕ результатов — возвращено, по замороженной формулировке гейт не пройден (11/12 против 12/12); (3) метрика полярности ловила не внутри слов («мне», «камни», «крайне») — 21 ложное из 58, клейм «~10× преимущество на омиссии» снят, под токенной метрикой остаётся ~1.3× в шуме; (4) выигрыш на 成/分 был посчитан по одному окну из двух — исправлено ниже. Механика проверок и воспроизведение — eval/premise_review/README.md; полный текст ретракции — в истории git (коммит 4d1d9e5), в отчёте он не воспроизводится по норме владельца 04.08.

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 нет вовсе (lowhigh, 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.69…3.23 — в одном окне из шести дифф ДЕШЕВЛЕ, так что «дороже» верно как среднее, а не как свойство каждого вызова;
  • механизм цены: 96% completion диффа — размышление (прямая улика: reasoning_content медиана 10 244 знака у диффа против 2 504 у full-regen, при видимом тексте 486 против 1 835);
  • СНЯТО адверсариальным ревью 05.08 (см. §6.2). Здесь стояло: «вывод „конфигом не чинится“ ФАЛЬСИФИЦИРОВАН собственным замером: ручка low на pro РАБОТАЕТ и срезает размышление на треть (диапазоны трёх армов не пересекаются)». Пере-счёт показал, что решающее правило «диапазоны не пересекаются» при n=3/3 воспроизводится НУЛЕВЫМ вмешательством — два блока ДЕФОЛТА на побайтно одном запросе разделяются так же и с тем же размером эффекта. ⇒ вывод «конфигом не чинится» возвращается в статус НЕ фальсифицированного (а не «подтверждённого»): рычаг цены не показан ни существующим, ни отсутствующим;
  • 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» СНЯТ по ревью 05.08 — посылка не выдержала пере-счёта, §6.2 36
G «комплаенс 0.950.98» снят на окнах ВПЯТЕРО короче боевых? единица ~3200 ру-ток. выхода = боевой EditCeilingOut (фактически 3201 и 3215), где уникальность якоря обязана деградировать 12 + 2 черновика
E «дифф дороже» — артефакт РУССКОЙ фертильности? тот же дизайн на английской цели (для zh→en 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).

Средние исходы печатаются как «неопределённо», не абсорбируются. Девиации объявляются.


§4. РЕВЬЮ ПОСЫЛКИ (сделано ДО платных вызовов, требование владельца 05.08)

Владелец 05.08: «важно ревьювить не только результат но и посылку». Поводом были два подряд дефекта посылки, невидимых в результатах: аппликатор молча портил 6 из 36 выходов, рапортуя applied=ops_total, rejected=0; арм zh→en поехал бы поверх РУССКИХ черновиков. Харнесс и воспроизведение — eval/premise_review/ (README там же), всё $0 поверх персистированного сырья.

4.1 Что доказано исполнением

Посылка Инструмент Итог
Риг пробы C воспроизводит движковые RenderBatch/Batch overlay-тест по НАСТОЯЩЕМУ движку (premise_batch_test.go.txt; в backend/ ничего не писалось) 63/63 блока байт-в-байт; DetectSeries из язык-слоя даёт те же 4 серии, что риг задавал руками; состав батчей совпал, [16,16,17,13,1], все под 6000 рун
Числа §C посчитаны верно recount.py — свой парсер, своя нормализация, свой знаменатель, ничего не импортируется из arbitrate.py воспроизвелись все 6 клеток: glm-5 25/45 · mistral 23 · flash 20 · pro 16 · terra 18 · luna 18
Посадки дефектов пробы A корректны strict_defects.py 12/12 регексов валидны (fix_rx ловит оригинал, bad_rx — нет, на посаженном наоборот); канон черновиков 20/21 воспроизведён
Аппликатор диффов selftest_apply.py 15/15, включая NFKC-классы, на которых прежняя версия ломалась
Константы боевой единицы сверка с internal/chunk/chunker.go EditCeilingOut=3200 · FertCJK=1.1978 · FertOther=0.3852, формула та же (chunker.go:95)
Запросы четырёх армов — то, что заявлено dryrun_arms.py блок закона и черновик одинаковы в diff/full, различается ТОЛЬКО контракт; плейсхолдеров нет; арм E английский

4.2 Найденные дефекты посылки

  1. Метрика посадок пробы A считала ИСЧЕЗНОВЕНИЕ, а не восстановление: зачёт шёл по not re.search(bad_rx, out), поэтому удаление фразы целиком засчиталось бы как правка. Пере-считано строго (снят И fix_rx совпал): восстановлено 47 из 48 клеток по четырём армам, «выпало» 3. Дефект метрики реален, вывод не двигается.
  2. Асимметрия reasoning-режимов в §C — объявлена в отчёте 18 §D п.5, но замером не закрыта. Закрыта 05.08 контролем glm2 (18 §C.5): чемпион с мышлением 24/45 против 25/45 без него.
  3. since_ch: 0 в риге против непустого значения в проде: блок короче на 12 руны на кандидата, а батч 2 стоит на 5967/6000 ⇒ в проде граница батча могла бы сдвинуться. На сравнение моделей не влияет — батчи у всех кандидатов одни и те же.
  4. long_units набирает абзацы ЗА потолок (3201 и 3215 ру-ток.), тогда как движок группирует ДО превышения (chunker.go:370). Разница в один токен, но направление противоположное.
  5. Английский черновик нельзя делать боевым zh-ru/translator.md: он параметризован лишь в строке 1, а в строках 9/10/14 русский зашит ПРОЗОЙ («по нормам русского языка», «Пиши живым литературным русским языком», «опираясь на существующие русские переводы»). Первый прогон дал черновики на русском (E0: 1499 знаков кириллицы против 22 латиницы) — арм измерял бы русскую фертильность под видом английской. Заведено зеркало prompts/translator-en.md, черновики пере-сняты: 0 кириллицы, канон-формы блока соблюдены.

4.3 Ложные тревоги (проверены, дефекта нет)

  • parse_common.py «отсутствует» — живёт в eval/bank_autonomy/, путь добавляется в sys.path.
  • parse_common «теряет» aliases/related/since_ch — этих полей в bank-stop нет вообще.
  • Знаменатель §A «21 вместо 27» — 元海 исключён намеренно, он скорится отдельно (в A2 инъецирован неверной формой): 27 клеток 6 окон = 21.
  • Первая версия dryrun_arms.py объявила у fidelity-промпта «стиль-мандат» — подстрочный регекс поймал ЗАПРЕТ («Стиль… НЕ ТРОГАЙ ВООБЩЕ»). Тот же класс ложных срабатываний, что не внутри «мне/камни» в §2.5. Проверка исправлена на полярность.

§5. ПРОГОН ЧЕТЫРЁХ ФАЛЬСИФИКАЦИЙ: верификация исполнения

Владелец 05.08: «после прогона так же понять, что он прошёл правильно». Проверялась не осмысленность результатов, а санитария — eval/premise_review/verify_run.py, $0.

Проверка Итог
П1 множество тегов ровно запланированное, без пропусков и лишних 90 вызовов, L 36 · N 18 · G 12 · E 24
П2 нет обрывов по потолку вывода finish=stop на всех 90
П3 модель на проводе одна deepseek-v4-pro ×90
П3а режим арма L — ПРЯМО из артефакта, а не косвенно extra_body={"reasoning_effort":"low"} на всех 36 вызовах L, {} на N/G/E
П4 у каждого диффа есть файл применения пропусков нет; отказы: notfound 1, ambiguous 5, overlap 0, empty 0, малформед 0
П5 деньги сходятся вторым путём вызовы $0.344919 + черновики $0.004647 = $0.349566, совпало с печатью скрипта до 1e-6
П6 короткие дифф-ответы объяснены 9 коротких, все 9 — настоящий NO_CHANGE

Потрачено $0.349566 из потолка пре-рега $0.50; проекционный гард не срабатывал, ни одна клетка не выброшена.


§6. ВЫВОДЫ ЧЕТЫРЁХ ФАЛЬСИФИКАЦИЙ (после адверсариального ревью 05.08)

Результаты прогона прошли второй рубеж: пять независимых линз атаковали выводы на убийство, каждая находка проверялась скептиком на состоятельность. 15 находок, 4 выжили, все с вердиктом «убивает». Три из них бьют по формулировкам автора, одна — по правке источника истины, сделанной этой же сессией. Ниже — уже исправленные формулировки; что именно снято, перечислено в §6.6.

6.1 Механизм: размышление масштабируется с ВХОДОМ, а сужением задачи не снимается

Доля reasoning_chars в выходе дифф-контракта медианно 0.95 (ec-D1 0.953 · ec-D2 0.942 · fp-LD 0.955 · fp-N 0.979 · fp-GD 0.980 · fp-ED 0.992) против 0.55 у русского full-regen (ec-F1 0.573 · ec-F5 0.515, n=24). Видимый текст диффа — единицы процентов его цены.

  • Сужением МАНДАТА размышление не покупается. Fidelity-only промпт срезал правки 4.50→1.94 на вызов (81/18 → 35/18) и видимый текст 486→244 зн., а размышление не упало: 10244→11301 медианно, MW p=0.752, среднее 11868→10128, выросло в 3 окнах из 6 ⇒ эффект не показан ни в одну сторону.
  • От объёма ВХОДА зависит, и сильно. На боевой единице prompt_tokens 2084→6761 (×3.24), размышление диффа 10244→28511 (×2.78, MW p=0.0003) при неизменном видимом выходе (486→428 зн.).
  • От найденной работы тоже зависит: внутри ec-D1 Спирмен rho(размышление, правки)=+0.781 (p=0.0003) и rho(размышление, длина выхода)=+0.651 (p=0.003).

Правильная формулировка: размышление масштабируется с объёмом входа и с найденной работой, но не снимается сужением задачи. Поэтому дифф не даёт той экономии выхода, ради которой затевался.

⚠ Прежняя формулировка автора — «размышление не зависит от объёма работы» — опровергнута: она строилась на одном контрасте (широкий→узкий мандат) и игнорировала корреляцию с входом и с правками.

6.2 Арм L — НЕ исполненная фальсификация; и посылка, и правка квирков отозваны

Измеренное отношение цены дифф/full — 1.677 по медиане окон (w0 1.94 · w1 3.72 · w2 2.55 · w3 1.42 · w4 1.07 · w5 0.53; медиана клеток 1.396; 11 клеток из 18 >1). Число верно и воспроизведено.

Но фальсификация не проведена, потому что её посылка — «ручка reasoning_effort:"low" на deepseek-v4-pro признана рабочей замером 05.08 (00-provider-quirks.md §3б)» — не выдержала пере-счёта по всему доступному сырью:

Улика Что показывает
Решающее правило §3б «диапазоны не пересекаются» при n=3/3 минимально достижимый двусторонний p=0.100 — дизайн не может достичь значимости по построению
Нулевой контраст: два блока ДЕФОЛТА на побайтно одном запросе (sha 92924c85b5fc) разделяются ТАК ЖЕ (p=0.100) и с тем же размером ×1.47, что и «эффект ручки» (13421/9125=1.47)
Объединённый пул на побайтно одном входе, дефолт n=6 против low n=6 диапазоны ПЕРЕСЕКАЮТСЯ, MW p=0.589 и по completion_tokens, и по reasoning_chars
По арму целиком дифф думает 8.1% (p=0.367), full-regen +29.0% (p=0.983) — разнонаправленно, что несовместимо с механизмом «срезает треть»
prompt_tokens при побайтно одинаковых messages 2124 у дефолта И у low, 2203 у xhigh ⇒ провайдер серверно реагирует на xhigh и НЕ реагирует на low
По всей папке: 12 sha-групп, разыгранных обоими армами (39 вызовов) low ниже дефолта лишь в 7 из 12, MW p=0.379

⇒ Гипотеза «премия диффа — артефакт несъёмного thinking» остаётся НЕПРОВЕРЕННОЙ. Арм L засчитывается как вторая независимая репликация вывода «дифф дороже» на 36 свежих вызовах (параметр ушёл на провод 36/36 в обеих подветвях ⇒ отношение внутренне контролируемо; клетки LD/LF разнесены на 22110 с и дрейфом не объясняются), а НЕ как выдержанная проверка гипотезы.

Мощность оговаривается явно: утверждать «ручка нулевая» данные не позволяют — MW при n=6/6 ловит истинный эффект ×0.67 лишь в 37% случаев (бутстрап 20k). Корректный статус — воздействие не верифицировано, при том что бремя лежит на посылке: клейм «работает» сделан на n=3/3 и воспроизводится нулевым вмешательством.

Опора, которая переживает падение статуса арма L. «Дифф дороже» реплицирован трижды, причём один раз на дефолтном эффорте и новом материале:

Замер Отношение дифф/full Клеток >1
база §2 (ec-D1/ec-F1) 2.913 по окнам (2.313 по клеткам) 10 из 12
арм L (low) 1.677 по окнам 11 из 18
арм G, боевая единица, extra_body={} 2.468 6 из 6

6.3 Арм G — вывод §2.1 УСТОЯЛ, но арм слабее, чем кажется

Комплаенс на боевой единице 28/29 = 0.966 ≥ 0.90: notfound 1, ambiguous 0, overlap 0, малформед 0. Пре-регистрированный порог не пробит, деградации уникальности якоря не видно.

Обязательный хвост: знаменатель — 29 операций с 5 результативных вызовов на 2 текстах (шестой, fp-GD-u1-r1, дал NO_CHANGE и вышел из знаменателя как 0/0). «Неоднозначных 0 из 29» при верхней 95% границе Клоппера–Пирсона 11.9% и базовой доле 1/81 = 1.2% означает: арм не отличает 0% от десятикратного к базе. Утверждать можно «катастрофической деградации нет», но не «деградации нет».

6.4 Арм N — вывод §2.2 ПАЛ: do-nothing покупается сужением мандата

NO_CHANGE 4 из 18 на fidelity-only промпте против 0 из 36 на промпте со стиль-мандатом. Дисциплина «ничего не делать, если черновик хорош» уговорами не берётся, а сужением мандата — берётся. Это ровно то, что research/19 §C1 и предписывал тремя узкими проходами.

Атрибуция причины переписана по §6.1: сужение мандата покупает NO_CHANGE и режет правки, но размышление им не срезается — то есть узкий проход даёт дисциплину, а не дешевизну.

6.5 Арм E — формально пал, НЕ засчитан; причина пере-обоснована ПО ПРОВОДУ

Медиана отношения цены 0.617 по 12 парам (0.629 по-оконно), 10 клеток из 12 <1 — по букве критерия вывод §2.7 на английской цели падает. Не засчитан из-за неполного зеркала промпта.

⚠ Названная автором причина — «в зеркале нет ПРИМЕРОВ перевёрстки» — была ложной: примеров не было и у русского компаранда, потому что editor_wire_probe.py:43 FEW_SHOT = False дропает блок ---FEWSHOT--- (проверено на 48/48 русских full-вызовов). Настоящее различие — на проводе:

Что ru full en full
системный промпт 3071 зн. / 16 непустых строк 1174 зн. / 10 строк (0.38)
блок ДИСКУРС-ПЕРЕВЁРСТКА (editor.md:15-19) есть, 1199 зн. = 39% отсутствует вовсе
размышление full-regen 2183 зн. (ec-F1+F5) 14711 зн. (×6.7)
размышление диффа 10244 зн. 8650 зн. (×0.84)

Прорежение асимметрично именно по контрактам: отношение en/ru системного промпта 0.38 на full против 0.65 на диффе ⇒ обеднён преимущественно знаменатель. Дифф на английском ведёт себя как на русском (даже думает чуть меньше), а «перевернулся» full-regen. ⇒ вопрос пре-рега («премия диффа — артефакт русской фертильности?») остаётся без ответа; для ответа нужен полный en-компарандум.

6.6 Что снято этим ревью

  1. Слово «УСТОЯЛ» у арма L — фальсификация не проведена (§6.2).
  2. 00-provider-quirks.md §3б, звено (а)low на pro срезает размышление на треть, бюджет управляем») — отозвано; строка §3аlowhigh для pro») НЕ опровергнута и возвращается в силу до замера с мощностью. Звено (б) про xhigh сохраняется и усиливается: min(xhigh) 17588 > max(дефолта) 15720, p=0.0238.
  3. Баннер «вывод „конфигом не чинится“ ФАЛЬСИФИЦИРОВАН» — снят; вывод возвращается в статус НЕ фальсифицированного (не «подтверждённого»).
  4. Квалификатор в дизайне арма L «ручка признана рабочей замером 05.08» — удалён.
  5. Обоснование эхо-девиации «единичные знаки — цитаты в сносках» — ложно, заменено (§6.7 п.1).
  6. Формулировка §6.1 «размышление не зависит от объёма работы» — опровергнута корреляциями.

6.7 Объявленные девиации и оговорки

  1. Девиация от эхо-критерия. Пре-рег: «ненулевое эхо делает low непригодным независимо от цены»; скорер применил порог 5%. Наблюдено 2 вызова, 4 знака. fp-LD-w4-r1 (修行) — дословный SEARCH-якорь по сноске САМОГО черновика, REPLACE пуст, операция сноску удаляет ⇒ модель знаков не порождала. fp-LF-w3-r2 (潜能, доля 0.117%) — сносок в выходе нет, знаки внутри повествования («символом жизненной潜能»), черновик в этом месте несёт корректное «жизненного потенциала» ⇒ порождённая моделью микро-утечка исходника. Порог 5% строже боевого гейта (disposition.go cjkEchoThreshold = 0.15) и на два порядка выше наблюдённого; явление quirks §4 (выход исходником целиком, доля 0.830.999) не наблюдалось. Low-специфичность НЕ показана: на дефолтном эффорте ханьцзы тоже есть (ec-D1 2/18, ec-D2 1/18 — та же сноска черновика). ⇒ по БУКВЕ пре-рега рекомендация «поставить редактору low» остаётся закрытой независимо от цены.
  2. Две конвенции медианы в одном скорере: арм L — медиана по-оконных медиан, арм E — медиана клеток. Обе устойчивы (L по клеткам 1.396; E по окнам 0.629), вердикты не переворачиваются, но конвенции надо привести к одной.
  3. Межсессионный дрейф крупный и реальный. Шесть дефолтных розыгрышей побайтно одного запроса в хронологическом порядке: 1952 → 9104 → 10818 → 11157 → 13421 → 15720 знаков размышления, строго монотонно (вероятность 1/720). Любое сравнение блоков, разнесённых во времени, конфаундировано; защищены только парные внутриблочные отношения.
  4. Дыра в самом ревью посылки: §5/П3а проверяло, что параметр УШЁЛ на провод, но не что он ПОДЕЙСТВОВАЛ. Через неё посылка арма L и проехала. Инструмент под П3а дописан (verify_run.py), предупреждение об этом различии печатается в самом отчёте прогона.
  5. Контроль §C.5 отчёта 18 (glm2) добавлен после прогона и вне пре-рега — объявлен там же.

6.8 Что это даёт продукту (строка 106)

  • Дифф-контракт механически исправен. Формат-комплаенс 0.975 на базе, 0.966 на боевой единице, малформед 0 на 90 вызовах, аппликатор 15/15 на самотесте. Контракт research/19 §C1 работает — вопрос «умеет ли модель в диффы» закрыт положительно.
  • Экономически он проигрывает full-regen, и это реплицировано трижды (2.913 · 1.677 · 2.468), включая боевой размер единицы на дефолтном режиме.
  • Причина проигрыша НЕ установлена. Обе гипотезы остались непроверенными: «несъёмный thinking» (арм L не исполнен, §6.2) и «русская фертильность» (арм E конфаундирован, §6.5). Установлено только, что размышление — 95% цены диффа, растёт с входом и не снимается сужением мандата.
  • Узкий проход покупает дисциплину, а не деньги: fidelity-only даёт NO_CHANGE 4/18 против 0/36, но размышление не режет.

Строку 106 закрывать выводом «диффы не берём» ПРЕЖДЕВРЕМЕННО. Правильный статус: полный ре-ген остаётся каноном не потому, что дифф-контракт плох, а потому что на этой модели и в этом режиме он дороже — при том, что механизм удорожания не вскрыт, а два его кандидата не проверены.

6.9 Что домерить, чтобы закрыть по-настоящему

  1. Отличимость low от дефолта — интерливинг дефолт/low в ОДНОМ блоке (защита от дрейфа §6.7 п.3), n≥10 на арм. До этого замера 00-provider-quirks.md §3а остаётся в силе.
  2. Полный en-компарандум — зеркало editor-en.md с блоком дискурс-перевёрстки, чтобы вопрос фертильности получил ответ.
  3. Дифф на модели без несъёмного размышления — единственный прямой тест гипотезы §6.2.
  4. Качество правок — ни один арм его не мерил; дифф может быть дешевле или дороже и при этом делать ХУЖЕ. Судейского рига в скоупе не было и нет.