textmachine/docs/experiments/18-editor-wire-probe.md

212 lines
21 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.

# 18. Редакторский провод под доктриной закона (D39.104) + фронтир-пасс по голду
**Полигон-сессия 04.08.2026.** Исполнение `docs/POLYGON_EDITOR_WIRE_PROBE_SESSION_PROMPT.md`
(оркестратор №13, санкции владельца D39.103/104). Зона: `eval/bank_arbitration/` + этот файл + пинг
в PROGRESS «Полигон». Сырьё durable `~/books/gu-zhenren/bank-arbitration/`, префикс `edp-*`.
Не закоммичено, кроме пре-рег-фриза (CLAUDE.md, единственное исключение полигона).
Потолки: проба A ≤ $0.30, проба C ≤ $0.50.
---
## §0. ПРЕ-РЕГИСТРАЦИЯ (записано ДО первого платного вызова этой сессии; норма D39.46/D39.61)
Дата фиксации: 2026-08-04, до любых платных вызовов. Всё ниже — фриз; расхождение исполнения с
этим текстом печатается как девиация с обоснованием.
### 0.1 Провод пробы A (byte-faithful edit-стадии `pipeline-c1.yaml`)
| Поле | Значение | Провенанс |
|---|---|---|
| модель | `deepseek-v4-pro` | `pipeline-c1.yaml` stages[edit].model (ИНТЕРИМ D39.22) |
| промпт | `backend/prompts/zh-ru/editor.md`, блок `---FEWSHOT---` ДРОПНУТ | stages[edit].few_shot: false |
| temperature | `0.4` (шлётся; thinking-режим её молча игнорирует — quirks 00) | stages[edit].temperature |
| reasoning | параметр **НЕ шлётся вовсе** ⇒ вендор-дефолт `high` | deepseek = `ReasoningNone` (`llm/capability.go:177-180`), stages[edit].reasoning:"off" ⇒ ключа на проводе нет; quirks 00 §3а |
| max_tokens | `16000` | `models.yaml:166` capabilities.min_max_tokens (флор v4-pro) |
| раскладка | `system(editor.md core)``system(банк-блок)``user(text+draft)` | `render.go` MessagesWithInjection |
| формат строк блока | `- src → «dst»` | `membank/memory.go:815` editorLines |
**Байт-сверка провода — исполнением, ДО платных вызовов.** Overlay-тест (`go test -overlay`, файлы
живут в скрэтчпаде, в `backend/` не пишутся) прогнал РЕАЛЬНЫЕ `LoadPromptTemplate`+`SystemFor(false)`+
`MessagesWithInjection` и `RenderEditorConstraintBlock` на окне w3 и напечатал sha256 каждого
сообщения. Совпадение с Python-харнессом побайтное:
```
Go WPMSG 0 role=system sha=cef8aba86410f996ab4624f6839f2acbf98a31ededa6a12a8070c03abb739645
Py PYMSG 0 role=system sha=cef8aba86410f996ab4624f6839f2acbf98a31ededa6a12a8070c03abb739645
Go WPMSG 1 role=system sha=775604eddb3346c0b566ff01d0affd7b222d00fd37684afa9104639ae83e107d
Py PYMSG 1 role=system sha=775604eddb3346c0b566ff01d0affd7b222d00fd37684afa9104639ae83e107d
Go WPMSG 2 role=user sha=547d516465c885890438b4e001c8d6d6a7c48641ce28701b6b6385bad66940fa
Py PYMSG 2 role=user sha=547d516465c885890438b4e001c8d6d6a7c48641ce28701b6b6385bad66940fa
Go WPBLOCK sha=775604eddb3346c0b566ff01d0affd7b222d00fd37684afa9104639ae83e107d (RenderEditorConstraintBlock, текущий editor_header)
```
Сверялся блок с ДЕЙСТВУЮЩИМ `editor_header`; кандидат-заголовок §B отличается от него ровно
вставкой оговорки (ниже дословно), строки блока не трогает.
### 0.2 Окна и черновики
Те же 6 окон источника, что `inject_probe.py` (`pick_windows()`, детерминирован, `coldrun-a` только
чтение): w0@para534 · w1@para709 · w2@para488 · w3@para372 · w4@para101 · w5@para274.
Черновики — **арм B того же сырья** (`inj-w{k}-B.json`, транслятор под ВЕРНЫМ законом, $0, уже
персистированы, все `finish=stop`): канон-конформный черновик = сильнейший тест вытеснения.
### 0.3 Заголовки (кандидат-редакции §B промта; в движок НЕ вносятся)
База — действующий `editor_header` (`backend/internal/lang/data/injection.txt` строка 7), дословно.
**Единый закон-блок с оговоркой области** (армы A1, A2, AM-clause):
> КАНОНИЧЕСКИЕ ПЕРЕВОДЫ имён и терминов (в черновике термин исходника слева ДОЛЖЕН быть передан именно указанной формой справа — приводи к ней любые расхождения, склоняя по контексту; не вводи иных вариантов и не меняй ничего другого; глоссарий обязателен для употреблений термина КАК термина: игру слов, разбор знаков, буквальное прочтение передавай по смыслу пассажа, сохраняя узнаваемость канонической формы):
**Закон БЕЗ оговорки** (арм AM-noclause) = действующий `editor_header` без единой правки:
> КАНОНИЧЕСКИЕ ПЕРЕВОДЫ имён и терминов (в черновике термин исходника слева ДОЛЖЕН быть передан именно указанной формой справа — приводи к ней любые расхождения, склоняя по контексту; не вводи иных вариантов и не меняй ничего другого):
Секция `editor_unverified_header` НЕ рендерится (двухсекционка сворачивается в одну — §B промта);
маркер `⟨проверить⟩` на проводе НЕ рендерится (поведенчески пуст, research/24 §C).
### 0.4 Армы (26 платных вызовов v4-pro + 1 транслятор-вызов на черновик AM)
| Арм | Вызовов | Блок | Что мерит |
|---|---|---|---|
| **A0** | 6 | нет | изолированный контроль (его не было НИКОГДА) |
| **A1** | 6 | закон+оговорка, все строки ВЕРНЫЕ | исполнение закона на редакторе |
| **A2** | 6 | закон+оговорка, строка `元海 → «Юаньхай»` НЕВЕРНАЯ | цена неверного закона + межоконная консистентность |
| **AM** | 2 | закон+оговорка / закон без оговорки | работает ли оговорка области и не течёт ли |
| **A5** | 6 | нет | чинит ли редактор дефекты черновика |
**Девиация от дизайна §C (обоснованная):** research/24 §C РОТИРОВАЛ неверный терм по окнам. Здесь
неверная строка ОДНА И ТА ЖЕ во всех 6 окнах — `元海`, единственный терм, присутствующий во всех
шести окнах (пересечение множеств термов = {元海}) и отрендеренный верной формой во всех шести
черновиках. Без этого метрика «судьба ОДНОЙ строки одинакова во всех 6 окнах» (§A промта)
неизмерима. Инъецируемая неверная форма — `Юаньхай` (реестр `TERMS` `inject_probe.py`).
**AM — метаязыковое окно, НАТУРАЛЬНОЕ (не синтетика):** параграфы 517521 источника — выбор
本命蛊 в шкафу гу. Несёт (а) `蛊名月光` — имя названо КАК ИМЯ («имя гу — Лунный свет»), при том что
канон-форма `月光蛊 → «Гу лунного света»`; (б) `弯弯如月` — буквальное «изогнут, как месяц»;
(в) обычные терминные употребления `月光蛊` в тех же 5 строках. Блок окна содержит ровно те термы
реестра, что встречаются в окне.
Черновик AM: 1 вызов транслятором проводом арма B (`deepseek-v4-flash`, `reasoning_effort:"low"`,
temp 0, ВЕРНЫЙ блок), тег `edp-AMdraft`. **Правило ветвления, фиксируется ЗДЕСЬ:** если черновик
передаёт `蛊名月光` ПО СМЫСЛУ (не приклеивает канон-форму к слову «имя») — идёт как есть; если
канонизировал — сажаю смысловой вариант «Имя этому гу — Лунный свет» и объявляю посадку в отчёте
(файл `edp-AMdraft-planted.txt`), результат помечается как посаженный.
### 0.5 A5 — посаженные дефекты черновика (дословный список)
По одному дефекту каждого класса в каждое из 6 окон, итого 6+6. Арм без банк-блока.
к1 = слово-абракадабра (несуществующее слово); к2 = смысловое искажение против ОРИГИНАЛА.
| Окно | Класс | Было в черновике | Стало (посадка) | Против чего в исходнике |
|---|---|---|---|---|
| w0 | к1 | `также поразительна` | `также взгрумительна` | — |
| w0 | к2 | `они не выдержат такого непрерывного расхода` | `они легко выдержат такой непрерывный расход` | 再多的元石也**经不起**…消耗 |
| w1 | к1 | `сокровище природы` | `мреязное сокровище природы` | — |
| w1 | к2 | `на глазах неуклонно поднимался` | `на глазах неуклонно опускался` | 元海水位…不断**攀升** |
| w2 | к1 | `словно натянутая струна` | `словно натянутая струмель` | — |
| w2 | к2 | `Увы, тот так и не показался` | `Увы, тот в первую же ночь и показался` | 可惜,**就是不见**那酒虫 |
| w3 | к1 | `но при этом необычайно густой` | `но при этом необычайно гущавой` | — |
| w3 | к2 | `Фан Юань, не оборачиваясь, развернулся и пошёл обратно` | `Фан Юань обернулся и остался стоять на месте` | 方源直接**转身往回走** |
| w4 | к1 | `волна дерзновенной отваги` | `волна дерзновяжной отваги` | — |
| w4 | к2 | `была вполне приемлемой платой` | `была совершенно недопустимой утратой` | 春秋蝉的损失**完全可以接受** |
| w5 | к1 | `оттенок суровой удали` | `оттенок суровяглой удали` | — |
| w5 | к2 | `он наконец не смог идти дальше` | `он зашагал ещё быстрее` | 一直走到三十六步,终于**走不动了** |
Скоринг A5: regex-предпроход («дефект ещё в выходе» / «смысл восстановлен») + **обязательная
глазная сверка каждой из 12 единиц; при расхождении авторитет — глаз**, regex печатается рядом.
### 0.6 Скоринг A0/A1/A2 и развязка regex-конфаунда
Метод — тот же regex-скорер, что `inject_probe.py --score` (нормализация NFKC · casefold · ё→е ·
схлоп пробелов). **Найденный и развязанный конфаунд (проверка потребована промтом на классе
元海/真元):** голд-rx `真元` = `истинн\w* ци` матчится ВНУТРИ верной формы `元海` = «море истинной ци».
Развязка: перед поиском `真元` из нормализованного выхода вырезаются все вхождения голд-формы `元海`.
Ре-ран research/24 §C по персистированному сырью ОБОИМИ методами — числа §C не двигаются
(см. §A.0 ниже); конфаунд задевает 2 клетки (w1 армы C/D), и обе лежат в колонке НЕВЕРНОГО терма,
которая в знаменатель «верных строк» не входит.
Знаменатели: «верные строки» = все термы блока кроме `元海` = 21 клетка (6+6+5+4+3+3 = 27 минус 6).
### 0.7 Критерии (успех/провал, зафиксированы ДО запуска)
1. **«Закон исполняется»** — A1 ≥ **5/6** окон, где ВСЕ верные строки окна пришли канонической
формой. Печатается также поклеточно (x/21) для сравнимости с §C.
2. **«Цена ошибки»** — A2: принятие неверной формы и вытеснение верной печатаются ЧИСЛОМ без
порога (это цена, не экзамен).
3. **«Консистентность держится»** — единогласие ≥ **5/6** однонаправленных решений по строке `元海`
в A2 (все 6 окон приняли ЛИБО все 6 отвергли).
4. **«Оговорка работает»** — метаязыковый пассаж передан ПО СМЫСЛУ при законе+оговорке И сломан
(канон-форма приклеена) при законе-без-оговорки.
5. **«Оговорка ТЕЧЁТ»** — ≥ **2/6** окон A1/A2 с отклонением от закона по ВЕРНЫМ строкам ⇒
формулировку сузить и пере-гнать ТОТ арм, где leakage зафиксирован (в потолке).
6. **A5** — «X из Y» по каждому классу, порога НЕТ (первый замер класса).
7. Средние исходы (ровно 4/6 и т.п.) — «неопределённо на N=6», печатаются, не абсорбируются.
### 0.8 Смета пробы A (напечатана ДО первого платного вызова)
Калибровка токенизатора: cl100k → фактические `prompt_tokens` DeepSeek ×**0.612** (по 6 вызовам
сырья §C, разброс 0.5970.622). Вход всех 26 вызовов ≈ **52 602** ток. → **$0.0229**.
Выход: нижняя оценка (только содержательный текст) 23 400 ток. → **$0.0432**; ожидаемая
104 000 ток. → **$0.1134**; абсолютный потолок (ВСЕ 26 вызовов упираются в 16 000) 416 000 ток. →
$0.3848. **Ожидаемая смета $0.110.14 < потолка $0.30.** Абсолютный потолок выше $0.30 достижим
только при 26/26 упоров в cap, поэтому в харнесс вшит **живой стоп $0.28**, проверяемый ПЕРЕД
каждым вызовом ⇒ потолок непробиваем механизмом, а не дисциплиной. Плюс 1 транслятор-вызов на
черновик AM ≈ $0.002.
---
## §0C. ПРЕ-РЕГИСТРАЦИЯ ПРОБЫ C (фронтир-пасс по голду; потолок $0.50, «go» владельца D39.103 п.3)
**Слаги — live `/models` 04.08.2026, не со слуха.** Владелец назвал «терра»/«луна»; в листинге
OpenAI (124 слага) присутствуют ровно `gpt-5.6-terra` и `gpt-5.6-luna` (плюс `gpt-5.6-sol`, которого
владелец НЕ называл — в пробу не берётся). Опознание однозначное, СТОП+релей не требуется.
DeepSeek-листинг: `deepseek-v4-flash`, `deepseek-v4-pro` — прежние два.
**Цены — ТОЛЬКО прайс-страница вендора** `developers.openai.com/api/docs/pricing` (снято 04.08.2026),
за 1M токенов, короткий контекст / длинный контекст:
| Слаг | in | cached in | out | (long) in | cached | out |
|---|---|---|---|---|---|---|
| `gpt-5.6-terra` | $2.00 | $0.20 | $12.00 | $4.00 | $0.40 | $18.00 |
| `gpt-5.6-luna` | $0.20 | $0.02 | $1.20 | $0.40 | $0.04 | $1.80 |
| `gpt-5.6-sol` (не в пробе) | $5.00 | $0.50 | $30.00 | $10.00 | $1.00 | $45.00 |
| `deepseek-v4-pro` | $0.435 | $0.003625 | $0.87 | — | — | — |
(v4-pro — `models.yaml`, prices_checked 2026-07-10, подтверждено quirks 00 «цены пост-катовера не
изменились».) Батчи ростера ≈4.5k ток. ⇒ применяется КОРОТКИЙ контекст-тир.
**Протокол** — тот же, что research/24 §B3: `consilium_probe.py`-ростер (45 голд-термов в банке +
18 экстра-поверхностей = 63 строки), 5 батчей, engine-faithful `RenderBatch`, боевой
`terminologist.md`, добавка CONF_NUM (как у пасса `glm1`, иначе несравнимо), temp 0 где применимо.
Чемпион для сравнения — `glm1` = **25/45** (пере-считано из сырья: ds1 20 · ds2 20 · ds3 21 ·
dsw 18 · glm1 25 · mis1 23 · gro1 12).
**Wire-квирк, который НЕ гадаю (правило двух направлений, quirks 00 шапка):** вендор-дока GPT-5.6
описывает `reasoning.mode` + `reasoning.effort` (none…max) для **Responses API**; поддержка плоского
`reasoning_effort` в Chat Completions в доке не заявлена, а прецедент exp08 (xAI) — вложенная форма в
Chat Completions МОЛЧА ГЛОТАЕТСЯ. Поэтому ДО основных вызовов идёт **микро-wire-проба** (≈$0.002):
на каждом слаге по 2 крошечных вызова с эффортами `none` и `high`; ручка считается ЖИВОЙ, только если
`reasoning_tokens` между ними различаются. Транспорт основного прогона выбирается по её результату
(Chat Completions при живой ручке; иначе Responses API), выбор печатается в отчёт.
Прочее по квиркам: `max_completion_tokens` вместо `max_tokens`, `temperature` не слать.
Эффорт основного прогона: **low** для terra/luna (дешёвый тир, зеркало ds1); для `deepseek-v4-pro`
reasoning-параметр НЕ шлётся (`low` на pro маппится в `high` — ручки бюджета у pro нет, quirks 00 §3а).
**Смета C:** вход ≈19k ток. на пасс. v4-pro: $0.008 вход + выход (высокий эффорт, оценка 30k ток.)
$0.026 ≈ **$0.034**. luna: $0.004 + $0.048 ≈ **$0.05**. terra: $0.038 + (оценка 8k ток.) $0.096 ≈
**$0.13**. Итого ожидаемо **≈$0.22** при потолке $0.50; живой стоп харнесса **$0.45**.
**Критерий (фриз):** «фронтир оправдан для роли» — парное преимущество кандидата над `glm1`
(термы «кандидат прав ∧ glm1 неправ» минус обратные) ≥ **+5** на 45 голд-термах **И** названа
цена/книга по методике research/24 §B5. Меньше +5 — «не оправдан» (легитимный исход).
**Data-sharing** на ключе OpenAI отключён — слово владельца, D39.103 п.3 (со слов промта
оркестратора; сессия это не верифицировала).
---
## §A. Проба A — результаты
*(заполняется после прогона)*
## §C. Проба C — результаты
*(заполняется после прогона)*