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

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

§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. Результаты

(заполняется после прогона)