textmachine/eval/premise_review/README.md

64 lines
6.9 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/C/19 (полигон, 05.08.2026)
Владелец 05.08: «важно ревьювить не только результат но и посылку». Здесь — харнесс, который
проверяет **вход** экспериментов, а не их выводы: риг, промпты, метрики, константы. Всё $0,
поверх персистированного сырья; ни одного платного вызова отсюда не делается.
Повод: два подряд дефекта посылки, невидимых в результатах — аппликатор диффов молча портил
6 из 36 выходов (рапортуя `applied=ops_total, rejected=0`), и арм zh→en поехал бы поверх РУССКИХ
черновиков, потому что боевой `zh-ru/translator.md` параметризован только в первой строке.
## Что чем доказано
| Посылка | Инструмент | Итог |
|---|---|---|
| Риг пробы C воспроизводит движковые `RenderBatch`/`Batch` | `premise_batch_test.go.txt` (overlay-тест по НАСТОЯЩЕМУ движку) | 63/63 блока байт-в-байт; `DetectSeries` даёт те же 4 серии, что риг задал руками; состав батчей совпал [16,16,17,13,1], все под 6000 рун |
| Числа §C посчитаны верно | `recount.py` (свой парсер, своя нормализация, свой знаменатель — ничего не импортируется из `arbitrate.py`) | все 6 клеток воспроизвелись: glm-5 25/45 · mistral 23 · flash 20 · pro 16 · terra 18 · luna 18 |
| Посадки дефектов пробы A корректны | `strict_defects.py` | 12/12 регексов валидны (`fix_rx` ловит оригинал, `bad_rx` — нет); канон черновиков 20/21 воспроизведён |
| Метрика посадок считала ИСЧЕЗНОВЕНИЕ, а не восстановление | `strict_defects.py` | дефект метрики реален (удаление фразы = «исправлено»), но вывод НЕ двигается: строго восстановлено 47/48 клеток, «выпало» 3 |
| Запросы четырёх фальсификаций — то, что заявлено | `dryrun_arms.py` | инварианты И1И4/E5 держатся: блок закона и черновик одинаковы в diff/full, различается ТОЛЬКО контракт; плейсхолдеров нет; арм E английский |
| Аппликатор диффов | `../editor_contract/selftest_apply.py` | 15/15, включая NFKC-классы, на которых прежняя версия ломалась |
| Константы длинной единицы | сверка с `internal/chunk/chunker.go` | `EditCeilingOut=3200` · `FertCJK=1.1978` · `FertOther=0.3852` — совпали, формула та же |
## Найденные дефекты посылки
1. **Метрика посадок пробы A** зачитывала дефект исправленным по исчезновению `bad_rx`; удаление
фразы засчиталось бы как правка. Пере-считано строго — вывод устоял.
2. **Асимметрия режимов в §C**: чемпион `glm-5` ехал `thinking:{disabled}`, а претенденты — с
разумом (`v4-pro` default, `terra`/`luna` low). В отчёте 18 §D это объявлено, но НЕ закрыто
замером; закрывается контрольным прогоном glm-5 с мышлением.
3. **`since_ch: 0`** в риге против непустого значения в проде: блок короче на 12 руны на кандидата,
а батч 2 стоит на 5967/6000 — в проде граница батча могла бы сдвинуться. На сравнение моделей
не влияет (батчи у всех кандидатов одни и те же).
4. **`long_units` набирает абзацы ЗА потолок** (3201 против 3200), движок же группирует ДО
превышения (`chunker.go:370`). Разница в один токен, но направление противоположное.
5. **Английский черновик** нельзя делать боевым `zh-ru/translator.md` — язык зашит прозой в
строках 9/10/14. Заведено зеркало `../editor_contract/prompts/translator-en.md`.
## Ложные тревоги (проверено, дефекта нет)
- `parse_common.py` «отсутствует» — живёт в `eval/bank_autonomy/`, путь добавляется в `sys.path`.
- `parse_common` «теряет» `aliases`/`related`/`since_ch` — этих полей в bank-stop нет вообще (0 вхождений).
- Знаменатель §A «21 вместо 27» — `元海` исключён из основной таблицы намеренно, он скорится
отдельно (в A2 инъецирован неверной формой). 27 6 окон = 21.
- Первая версия `dryrun_arms.py` ловила у fidelity-промпта «стиль-мандат» подстрочным регексом —
на деле это ЗАПРЕТ («Стиль… НЕ ТРОГАЙ ВООБЩЕ»). Проверка исправлена на полярность.
## Как воспроизвести
```bash
cd /home/ubuntu/projects/textmachine
# дамп ростера (НЕ коммитится: содержит KWIC-окна книги)
eval/.venv/bin/python -c "import sys;sys.path.insert(0,'eval/bank_arbitration');\
from consilium_probe import build_roster,batches_of,block_of,SERIES,BATCH_RUNES;import json;\
r=build_roster();json.dump({'roster':r,'blocks':{c['src']:block_of(c) for c in r},\
'batches':[[c['src'] for c in b] for b in batches_of(r)],'series':SERIES,'batch_runes':BATCH_RUNES},\
open('eval/premise_review/py_batching.json','w'),ensure_ascii=False,indent=1)"
# доказательство против движка (backend/ НЕ трогается — overlay)
cp eval/premise_review/premise_batch_test.go.txt /tmp/p_test.go
echo '{"Replace":{"'$PWD'/backend/internal/terminology/p_test.go":"/tmp/p_test.go"}}' > /tmp/ov.json
cd backend && go test -overlay=/tmp/ov.json -run TestPremisePythonRigMatchesEngine -v ./internal/terminology/
cd .. && eval/.venv/bin/python eval/premise_review/recount.py -v
eval/.venv/bin/python eval/premise_review/strict_defects.py edp-A0 edp-A1 edp-A2 edp-A5
eval/.venv/bin/python eval/premise_review/dryrun_arms.py
```