# ХЕНДОФФ: полигон, фаза Д эксп-22/23 — состояние на 15.08 > ⚠⚠ **СНИМОК НА 15.08, ПЕРЕКРЫТЫЙ ЗОНОЙ. Живое состояние фазы Д — НЕ здесь** (баннер дописан > оркестратором №18 22.08 при актуализации доков; тело ниже не переписано). > > Зона с тех пор ведёт свою цепь носителей в `eval/dovodka/`, и живой её конец НЕ в `main`: планы, > ревью и консилиумы лежат на ветке `polygon` (`git ls-tree --name-only polygon eval/dovodka/`), > последний на 02.09 — `PLAN-01-09.md` (редакция 4; редакции 1–3 отвергнуты консилиумом). В `main` > из цепи есть только `PLAN-21-08.md` и `PLAN-22-08.md`. Какой носитель ЖИВОЙ, называет зона: > прежде чем читать этот файл как инструкцию, спроси у владельца. > > ⚠ Там же и прибор: `eval/.venv` из команд §2/§4 в `main`-дереве отсутствует — они рассчитаны на > рабочее дерево ветки `polygon` (`git worktree list`). > > **Снимок ПОДРЕЗАН 02.09** (ревизия доков): опровергнутое и исполненное деревом снято, адреса > уехавшего — в §1 и §3. > > Что в файле по-прежнему полезно: устройство приборов, грабли отладки и незакрытое требование Д5. > Приёмка фазы — у ПАРАЛЛЕЛЬНОГО оркестратора. Развёрнутая версия с историями отладки — в git-истории коммитов фазы. --- ## 1. Старт 1. `CLAUDE.md` → `docs/POLYGON_EXP2223_REDO_SESSION_PROMPT.md` — **заказ, читать ЦЕЛИКОМ**. Прошлая сессия читала грепом и потеряла целый пункт заказа (внешнюю подпись Sol). В конце заказа — приписка-эррата 02.09: четыре его факта (кап 80 · состав секций · ja-книга · потолок) дерево опровергло, тело при этом не правится. 2. **Живой носитель курса — ветка `polygon`, каталог `eval/dovodka/`** (см. баннер выше). Онбординг под план 22.08 лежит в нём самом (`PLAN-22-08.md`, §0). 3. Отчёт `docs/experiments/23-editor-tier.md` — состав секций с 15.08 вырос, грепать `grep '^## Д' docs/experiments/23-editor-tier.md`; записи полигона 15.08 из `docs/PROGRESS.md` срезаны в `docs/archive/PROGRESS-2026-08-10-15.md`. --- ## 2. Где что лежит | что | где | |---|---| | код | `textmachine/eval/` | | **сырьё и судейство** | `~/books/` — **отдельный git-репозиторий**, закоммичен целиком (`4c3ff02`, 1295 файлов — снимок 15.08, не пере-снимался) | | клетки фазы | `~/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/` (154 претензии → 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`; кап — `CAP` в `eval/dovodka/runs.py`, там же его история | Запуск: `eval/.venv/bin/python` из корня репо. Флаги: `--axis=d4|d3|d6|d1`, `--fam=claude|sol`, `--wide-plants`, `--no-twins`. Шум `SyntaxWarning` фильтровать. --- ## 3. Результаты Числа фазы живут в отчёте `docs/experiments/23-editor-tier.md`, и с 15.08 они ПЕРЕ-СУЖЕНЫ: вердикты двух семейств — Д13.1 · панели осей — Д3 / Д6 / Д1 · сводка «пробел → чем закрыт» — Д9 · пере-суд починенным прибором — Д15 и дальше. ⚠ У числа один носитель, и это отчёт. **Деньги:** фактическая цепь потолков — `eval/dovodka/money_d.py` (`PACK_CEILING`/`CEILINGS`), механизм её подъёмов — отчёт Д14.9. ⚠ $10.00 в заказе — ИСХОДНАЯ рамка 10.08, с тех пор поднятая: сверять цепь, а не заказ (приписка в конце заказа). --- ## 4. Что осталось **Сессии:** 1. **Адъюдикация английской оси** — П-1 требует при расхождении семейств, файлов нет. Единственное, что блокирует несущий вывод. Запуск: `eval/.venv/bin/python eval/dovodka/adjud.py`; контроли, дефектные на 15.08, починены и закрыты гейтом `--controls` (отчёт §Д14.8). ⚠ **Починка живёт на ветке `polygon`; в `main` файл ПРЕ-ФИКС** — грепа `--controls` там нет, дефектный регекс разбора осей стоит живым. Перед прогоном сверить наличие гейта: нет его — не запускать. 2. **Д5 — требование заказа НЕ ИСПОЛНЕНО** (секция в отчёте есть, требование — нет). Места потерь отсняты честно (`~/books/dovodka/canon-dissect.json`, 24 записи), но КЛАССИФИКАЦИЯ мест негодна: поле `why` несёт случайное слово окна. Честное закрытие — ручная пере-классификация 24 мест против исходника, $0, одна сессия. Разбор — отчёт §Д5. 3. **Эррата zh-канона:** поправка границы слова живёт в `bank._rx`, но в СОХРАНЁННЫЙ банк не дошла (`coverage` читает `rx` из файла). Завышение **+0.0039**, относительные выводы не двигаются. Пере-сборка = правка закрытой оси, ратифицирует оркестратор. 4. **Реестр требований** — гейт `eval/.venv/bin/python eval/conformance.py eval/dovodka/requirements.md` красный, и это правда, а не поломка. Провалы на 15.08 поимённо: R55 (статус-баннеры) · R64 (реестр не в git до покупок) · R71 (правка чужого рига одним коммитом); счёт с тех пор двигался — пере-снимать командой, а не читать отсюда. ⚠ Урок дороже счёта: часть улик реестра была «грепом СВОЕГО документа» — настоящая улика проверяет АРТЕФАКТ, а не текст отчёта. 5. **Селфтест `sud.py`** красный: en 3 пункта, ja 1 — все настоящие. **Константы под зелень не подгонять** (норма проекта). **Владельца:** ратификация выводов (полигон не ратифицирует). --- ## 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` уехала вниз: пять нулевых клеток тянули медиану (числа — отчёт §Д13.4). 7. **Порог различимости — свойство СЕМЕЙСТВА, а не оси** (§Д13.3). Сравнивать «перешёл/не перешёл» без сверки полов — ошибка. 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`** — алиас вместо второй переменной (сам дубль и был багом). * **`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 (разбор — §Д11). * **Вести зонный журнал ПО ХОДУ**; судейские сессии закрывать `runs.py --done` сразу после ответов. * **Обязательны лишь фризы ПОКУПАЮЩЕГО кода**, основание вслух ПЕРЕД каждым. --- ## 9. Новые файлы фазы Состав каталога читается `ls eval/dovodka/` (39 файлов). Существенно одно: провайдера пары `para.py` и пар-промтов **не существовало, банк новой пары собрать было нечем**. ⚠ `prompts-free/{en-ru,ja-ru}/` — свободные редакции от Fable-5, **в замер НЕ входят**. ⚠ Три урока фазы (§5 пп.3–5) записаны и в память машины. Память машинно-локальна и в репозиторий не едет — общие уроки класть в промт, а не в неё.