# ХЕНДОФФ: полигон, фаза Д эксп-22/23 — состояние на 15.08 > ⚠⚠ **СНИМОК НА 15.08, ПЕРЕКРЫТЫЙ ЗОНОЙ. Живое состояние фазы Д — НЕ здесь** (баннер дописан > оркестратором №18 22.08 при актуализации доков; тело ниже не переписано). > > Зона с тех пор ведёт свою цепь носителей в `eval/dovodka/` — планы 16.08 → 17.08 → 21.08 → 22.08, > ревью и консилиум; какой из них ЖИВОЙ, зона называет сама. Прежде чем читать этот файл как > инструкцию, спроси у владельца, что сейчас живой носитель курса. > > **Чем именно этот снимок опровергнут деревом** (сверено аудитом доков 22.08): (1) п. 3 отправляет > в `docs/PROGRESS.md` секцию «Полигон» за записями 15.08 — они срезаны в > `archive/PROGRESS-2026-08-10-15.md`; (2) список «что осталось» разошёлся с деревом минимум по трём > пунктам — часть работ зона с тех пор сделала; (3) денежная рамка снимка отстала от фактической цепи > потолков, которая живёт в `eval/dovodka/money_d.py` (`PACK_CEILING`/`CEILINGS`), а не в тексте. > > Что в файле по-прежнему полезно: устройство приборов, грабли отладки и незакрытое требование Д5. > Приёмка фазы — у ПАРАЛЛЕЛЬНОГО оркестратора. Передача следующей сессии. Что снято, что осталось, на чём споткнёшься, чего не принимать за твёрдое. Развёрнутая версия с историями отладки — в git-истории коммитов фазы. --- ## 1. Старт 1. `CLAUDE.md` → `docs/POLYGON_EXP2223_REDO_SESSION_PROMPT.md` — **заказ, 207 строк, читать ЦЕЛИКОМ**. Прошлая сессия читала грепом и потеряла целый пункт заказа (внешнюю подпись Sol). 2. Отчёт `docs/experiments/23-editor-tier.md`: Д0 пре-рег · Д4 zh · Д3 en · Д6 ja · Д1 gemini · Д7 · Д9 сводка · Д10 наклон · Д11 исправления финального аудита · Д12–Д13 два семейства. 3. `docs/PROGRESS.md` секция «Полигон», записи 15.08. 4. Гейт заказа: `eval/.venv/bin/python eval/conformance.py eval/dovodka/requirements.md` — **красный** (12 без улики, 3 провала). Это правда, а не сломанный гейт. 5. `git log --oneline --since="14.08" -- eval/` — 23 коммита, обоснования в сообщениях. Перечитывание их 15.08 нашло живой баг (см. §5 п.6). --- ## 2. Где что лежит | что | где | |---|---| | код | `textmachine/eval/` | | **сырьё и судейство** | `~/books/` — **отдельный git-репозиторий**, закоммичен целиком (`4c3ff02`, 1295 файлов) | | клетки фазы | `~/books/dovodka/dv-*.json` (579) + карантин `.ERROR .LENGTH .TWIN .STALE` | | слепые ключи | `~/books/dovodka/blind-keys-{d1,d3,d4,d6}` и `-sol` — **по семействам**; соль отдельными `SALT-*.txt` | | судейство | `~/books/judging/sud-{d1,d3,d4,d6}` (claude) и `sol-*-work` (Sol) | | **адъюдикация zh** | `~/books/judging/adjud-d4/` (7 заданий, 7 ответов) + ключ истины `~/books/dovodka/adjud-key.json` — **адъюдикатору НЕ давать** | | внешняя подпись Sol | `~/books/editor-tier/sol-tier/` (16), `sol-border/` (32) | | банки | `role-topology/bank-en.json` · `dovodka/bank-ja.json` · `tenant-panel/bank.json` (zh) | | журнал gemini | `~/books/dovodka/d1-attempts.jsonl` | | счётчик сессий | `~/books/dovodka/agent-runs.json` — **64 из 80** | Запуск: `eval/.venv/bin/python` из корня репо. Флаги: `--axis=d4|d3|d6|d1`, `--fam=claude|sol`, `--wide-plants`, `--no-twins`. Шум `SyntaxWarning` фильтровать. --- ## 3. Результаты Три новые оси отсужены **двумя семействами** (claude — суб-агенты; Sol — харнесс владельца). | ось | claude | Sol | правило П-1 | |---|---|---|---| | **Д6 ja** (разведка, n=9) | +2.83, порог 2.10 — перешёл | +3.28, порог 2.97 — перешёл | **CONFIRM** | | **Д3 en** (несущая, n=16) | +1.31, порог 0.90 — перешёл | +1.78, порог 1.94 — ниже | **ЭСКАЛАЦИЯ К АДЪЮДИКАЦИИ** | | **Д1 gemini** (n=15) | −0.10, порог 1.47 | +2.53, порог 4.18 | не подтверждено ни одним | Панель Д3 (ошибок/ед. · канон · $/клетка): `E0` 1.31 · 0.927 · 0.00789 → `E4` 1.38 · **0.956** · 0.00436 → `E3` 2.06 · 0.947 · 0.00644 → `E2` 2.38 · 0.947 → `D0` 2.62 · **0.767** → `E1` 2.69 · 0.949 → `E6` 2.72 · 0.935. Д6: `J0` 2.28 · 0.914 → `J2` 2.39 · 0.916 → `D0` **5.11** · 0.654. Д1: `A0` 4.80 · 0.884 → `R1` 4.90 · **0.986** (цена клетки ×30). **Гипотезы:** H-1 не установлена · H-2а и H-2б **описательно** (ось Д4 пере-классифицирована по её же пре-регу: свой пол 2.21 хуже прайора 2.12) · H-3 **в эскалации**, направление опровержения подтверждено обоими семействами · H-4 не подтверждается на en, **японской ноги нет** · эксп-04 «gemini аутлаер» не подтверждается обоими. **Сверх гипотез:** профиль «связка + канон-фиксер ПОСЛЕ» даёт лучший канон на zh и en · банк-дисциплина и качество прозы — РАЗНЫЕ оси (gemini неотличим по судье, канон 0.986) · дешёвая модель на японском проваливается сильнее всего. **Деньги:** $6.0024, два пути счёта сходятся до шестого знака. Рамка заказа $10.00. --- ## 4. Что осталось **Сессии:** 1. **Адъюдикация английской оси** — П-1 требует при расхождении семейств, файлов нет. Единственное, что блокирует несущий вывод. ⚠ **КИТАЙСКАЯ адъюдикация ПРОГНАНА** (`~/books/judging/adjud-d4/`, 154 претензии → 7 заданий, 7 ответов), но её **контроли дефектны** (Д4.8): ложные претензии отличимы по формату контекста (`context(quote, quote)` без окружения против окна 260 знаков у настоящих), только 4 из 15 «посаженных» позиций реально посажены, регекс разбора осей усекает `ВЕРНОСТЬ`. **Чинить контроли ДО любого нового прогона** — иначе адъюдикация не разрешает спор, а переносит доверие на уровень ниже. Запуск: `eval/.venv/bin/python eval/dovodka/adjud.py`. 2. **Секций Д2, Д5, Д8 в отчёте нет** — заказ требует поимённо. Д5 отснят (`~/books/dovodka/canon-dissect.json`, 24 записи), раздела нет. 3. **Эррата zh-канона:** поправка границы слова живёт в `bank._rx`, но в СОХРАНЁННЫЙ банк не дошла (`coverage` читает `rx` из файла). Завышение **+0.0039**, относительные выводы не двигаются. Пере-сборка = правка закрытой оси, ратифицирует оркестратор. 4. **Гейт наклона не построен.** Замер: en +0.026 · ja +0.353 · d1 +0.277 ошибки на шаг метки; поправка вердикты не переворачивает. 5. **Японская нога H-4** — купить `glm-5` на ja (~$0.05), напечатать порядок жильцов zh/en/ja. 6. **Реестр требований:** 12 без улики, 3 провала — R55 (статус-баннеры), R64 (реестр не в git до покупок), R71 (правка чужого рига одним коммитом). **19 улик из 89 — «греп своего документа»**; настоящая улика проверяет АРТЕФАКТ, а не текст отчёта. 7. **Селфтест `sud.py`** красный: en 3 пункта, ja 1 — все настоящие. **Константы под зелень не подгонять** (норма проекта). **Владельца:** * **Возражение Sol по `tier`** (эксп-23): внешний судья `T2 vs R0` **+8.69, p=0.0002, РАЗЛИЧИМ**; claude +0.50 ниже порога. **Противоречит несущему выводу пака 23.** Пере-счёт: `eval/.venv/bin/python eval/editor_tier/solscore.py tier`. * **Санкция замены ja-книги** (`enkan_no_hate_ja` вместо `isekai_majutsushi_jp`) — в CURRENT-STATE до сих пор висит открытым СТОПом. * Ратификация выводов (полигон не ратифицирует). --- ## 5. Ловушки рига — на чём споткнёшься 1. **ЭМИССИЯ ПЕРЕПИСЫВАЕТ КЛЮЧ.** Раскладка меток — чистая функция от соли, uid и НАБОРА армов. Эмиссия с другим составом панели переписывает ключ, и разбор сопоставляет ответы с ЧУЖИМИ армами: так вердикт `E0/D0` съехал с +1.56 на +0.38. Восстановилось только потому, что **соль лежит отдельным файлом**. Перед эмиссией на отсуженной оси копировать `blind-keys-*` в сторону. 2. **Синглтон `buy`/`money`** — побеждает настроивший ПОСЛЕДНИМ. Наступал трижды: 7 клеток пробы ушли в чужой каталог при $0 в кассе; `money_d` настраивает свой экземпляр, не чужой; драйверы осей — свои экземпляры контура. **После загрузки чужого модуля пере-настроить кассу + ассерт.** 3. **Фриз-гейт сверяет ПОКУПАЮЩИЙ файл в стеке**, а не кассу. Потолки правятся без коммита — этим я воспользовался и потратил ФД-C сверх закоммиченной границы (позже привёл в git). 4. **`finish=length` = деньги списаны, данных нет.** Считать СОДЕРЖИМОЕ, не файлы. Бюджет вывода новых пар 32000 (16000 мало). DeepSeek: thinking НИКОГДА не глушить. 5. **Гард отказывает по ОЖИДАЕМОЙ цене**, втрое выше фактической ($0.028 против $0.0092). Решать по срабатыванию гарда, а не по смете. 6. **Новый суффикс карантина — сразу в глоб свода.** `.STALE`/`.TWIN` не были вписаны, и цена `E3` печаталась $0.00528 вместо $0.00644 (пять нулевых клеток тянули медиану). 7. **Порог различимости — свойство СЕМЕЙСТВА, а не оси.** Пол Sol шире на всех трёх осях при не меньших оценках эффекта. Сравнивать «перешёл/не перешёл» без сверки полов — ошибка. 8. **Классы маржевых посадок пар-зависимы.** Подобранные на китайском (числительные) на английском ложатся 5/16, на японском 4/9. Рабочий класс — «подмена принадлежности» (`его`→`её`): en 15/16, ja 8/9. Флаг `--wide-plants`, **только для новых эмиссий** (декой восстанавливается при разборе). 9. **Пол из точечного фиксера почти детерминирован** — половины совпадают побайтно, перекупка НЕ помогает (проверено). Гейт исключения заведён. Нужен полноценный японский пол — менять ЛЕЧЕНИЕ пола (две генерации однопроходки), а не покупать заново. 10. **`pgrep -f` по имени файла матчит сам себя** (харнесс оборачивает команду в `eval '...'`). Дважды сторож простоял часы впустую. Ставить команды последовательно, не опрашивать процессы. --- ## 6. Сомнения — чего не принимать за твёрдое 1. **Судейские ответы никто не читал по существу.** Проверены формат, контроли, цитаты — но не «верно ли судья оценил вот этот вариант». Вся фаза стоит на этом допущении. 2. **Классы посадок подобраны ПОСЛЕ того, как видны вердикты** — по частоте в материале, не по влиянию на результат, и применены только к новым эмиссиям. Формально правка детектора после взгляда на вердикты. 3. **`--wide-plants` дал Sol контроль СИЛЬНЕЕ моего на en.** Первичный контраст не затронут (тексты армов идентичны), межсемейное сравнение вторичных армов на en некорректно. 4. **Почему пол Sol систематически шире — не знаю.** Три версии (другая модель, харнесс, длина сессии), не разбирался. 5. **«E4 — кандидат в прод» держится на 4 единицах** из 16: на остальных он побайтно равен эталону. Цена **аддитивна** (`E4 = E0 + фиксер`), не альтернативна. 6. **Единственное двухсемейное подтверждение пришло с РАЗВЕДОЧНОЙ оси.** Поднять до несущего нельзя, соблазн будет. 7. **Японский пол — 4 пары** после исключения близнецов. Почти не порог. 8. **Контам-проба `pro` на en: 1 попадание из 5** — ниже порога, но не ноль: модель назвала серию и протагониста. Вся английская ось это несёт. 9. **Гейт близнеца на закрытой китайской оси не применялся** — совпадений там не искали. 10. **Пере-судейство en делалось, уже видя старые числа.** Промты суб-агентам идентичны прежним (проверяемо), но осадок называю. 11. **Банк-закон проверен только на промтах, собираемых сейчас**, не на клетках эксп-21/22. --- ## 7. Костыли кода * **`bank.py` покупает под кассой фазы**, ZONE кассы указывает на каталог покупающего модуля — иначе фриз-гейт отвергал сам `bank.py`. Право покупать получил весь `tenant_panel`. * **Флаги разбираются на уровне модуля из `sys.argv`** — при импорте поведение зависит от argv вызывающего. Я этим пользовался; хрупко и неочевидно. * **`sud.py` грузит `ja_axis.py` под именем `en_axis_sud`** — работает, имя врёт. * **`itog_d4.py`: `KEYS = KEYS_D4`** — алиас вместо второй переменной (сам дубль и был багом); там же `_dead` — пустой остаток рефактора, удалить при первой правке. * **`sud.py:setup`: `FLOOR_HOOK=lambda u: (… if False else None)`** — мёртвая ветка. * **`bank.py`: `sys.modules.setdefault("para", …)` + `exec_module`** — при уже загруженном `para` исполнится второй экземпляр. Отмечено вычиткой, не починено. * **Оркестраторские промты Sol размножены скриптом** из английского заменой строк, не шаблоном. --- ## 8. Дисциплина, которой я не держал * **Не объявлять закрытие по памяти — инвентаризовать диск.** Так потерялся Sol: в отчёте стояло «каталог ответов пуст», а там лежало 16 ответов с результатом против вывода пака 23. * **Читать заказ на АРТЕФАКТЫ, а не только на требования:** «а не сделано ли уже?». * **Вести зонный журнал ПО ХОДУ**, не в конце. * **Закрывать судейские сессии** `runs.py --done` сразу после ответов. * **Полигон коммитит только пре-рег-фризы**, основание вслух ПЕРЕД каждым; обязательны лишь фризы ПОКУПАЮЩЕГО кода. --- ## 9. Новые файлы фазы `para.py` (провайдер пары: письменность, банк, промты, парсер числительных, конформность имён, снятые классы флагов) · `en_axis.py` · `ja_axis.py` · `d1_gemini.py` · `d7_self.py` · `prompts/{en-ru,ja-ru}/terminologist.md` — **их не существовало, банк новой пары собрать было нечем**. Существенно переписаны: `contour.py` (пара как параметр, диспетчер армов по ВИДУ контура, общая покупка баз, пол по оси, бюджет вывода, карантин) · `sud.py` (ось и семейство как параметры, гейты близнеца и пустых половин пола, пар-зависимые посадки) · `itog_d4.py` · `bank.py` · `battery.py` (хуки пары) · `pair_en.py` · `contam_d.py` (платный путь с нуля) · `promptdiff.py` · `sessii.py`. ⚠ `prompts-free/{en-ru,ja-ru}/` — свободные редакции от Fable-5, **в замер НЕ входят**. ⚠ Память машины пополнена тремя записями: фриз-гейт смотрит на покупающий файл · деньги при срабатывании гарда, не по смете · файл клетки ≠ годная клетка. Память машинно-локальна; общие уроки — в промт. **Незакоммичено в `textmachine`:** правки харнесса, отчёт, журнал, этот файл. Лендит оркестратор. `~/books` закоммичен полностью.