textmachine/docs/POLYGON_PHASE_D_HANDOFF.md

225 lines
20 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.

# ХЕНДОФФ: полигон, фаза Д эксп-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` закоммичен полностью.