SilverElixir commited on
Commit
ff35070
·
1 Parent(s): 46a7342

Add harness-eval results: auto-edited AGENTS.md gives no gain on repo tasks

Browse files
Files changed (2) hide show
  1. eval/README.md +2 -0
  2. eval/RESULTS.md +86 -0
eval/README.md CHANGED
@@ -37,6 +37,8 @@ python eval/harness_eval.py report --out <каталог>
37
 
38
  Артефакты пишутся в `%LOCALAPPDATA%\Lumen\harness-eval` (важно: не в `%TEMP%\opencode`).
39
 
 
 
40
  ## Ограничения
41
 
42
  - Выборка маленькая (7 задач, по одному прогону на вариант) — это сигнал
 
37
 
38
  Артефакты пишутся в `%LOCALAPPDATA%\Lumen\harness-eval` (важно: не в `%TEMP%\opencode`).
39
 
40
+ Итоги прогона 21.10.2026 — в [RESULTS.md](RESULTS.md).
41
+
42
  ## Ограничения
43
 
44
  - Выборка маленькая (7 задач, по одному прогону на вариант) — это сигнал
eval/RESULTS.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Результаты harness-eval (21.10.2026)
2
+
3
+ Эксперимент: помогает ли автоматическая правка `AGENTS.md` агенту решать задачи
4
+ (метод из google-research/harness2, но без самого фреймворка).
5
+
6
+ ## Условия
7
+
8
+ - Агент: OpenCode CLI v2.1.2, модель `opencode/glm-5.3-flash-free` (бесплатная).
9
+ - Редактор: `opencode/nemotron-3-ultra-free`. Google-модели из этого аккаунта
10
+ недоступны («User location is not supported»), так что модель из статьи
11
+ (Gemini 3.5 Flash) воспроизвести не удалось.
12
+ - Задачи: 7 штук из истории репозитория (fix-коммит меняет код и тесты). Песочница
13
+ на `fix^` + тесты из `fix`; целевые тесты (FAIL_TO_PASS) посчитаны эмпирически.
14
+ - Судья: гейт репозитория (`pytest -q` + `pyflakes`), как в CI.
15
+ - Варианты обвязки:
16
+ - **base** — текущий `AGENTS.md`;
17
+ - **weak** — `AGENTS.md` из двух строк (контроль: влияет ли файл вообще);
18
+ - **candidate** — `AGENTS.md`, предложенный редактором по отчётам о базовых
19
+ прогонах: 0 удалённых строк, добавлен раздел «Shell and tooling rules».
20
+
21
+ ## Итоги
22
+
23
+ | Задача | base | candidate | weak |
24
+ |---|---|---|---|
25
+ | format-newlines-br | решено 311с | решено 675с | решено 155с |
26
+ | format-table-separator-bound | решено 337с | решено 469с | решено 192с |
27
+ | presplit-glued-bullets | решено 212с | решено 248с | решено 175с |
28
+ | state-corrupt-index | решено 262с | решено 512с | решено 282с |
29
+ | state-dirty-counters | решено 353с | решено 406с | решено 344с |
30
+ | streaming-catchup-throttle | решено 340с | решено 537с | решено 348с |
31
+ | tiktok-dns-private-ips | решено 580с | решено 501с | решено 319с |
32
+
33
+ | Показатель | base | candidate | weak |
34
+ |---|---|---|---|
35
+ | Решено | 7/7 | 7/7 | 7/7 |
36
+ | Правил тесты | 0 | 0 | 0 |
37
+ | Задачи с unix-командами | 5 | 1 | 4 |
38
+ | Запустил pyflakes | 7/7 | 7/7 | 0/7 |
39
+ | Запустил pytest | 7/7 | 7/7 | 7/7 |
40
+ | Суммарное время | 2395с | 3348с | 1814с |
41
+ | Всего команд в шелле | 77 | 76 | 48 |
42
+
43
+ ## Что это значит
44
+
45
+ 1. **Потолка нет.** Все три обвязки решают 7/7. На таких задачах «починить баг с
46
+ падающими тестами» содержимое `AGENTS.md` не меняет результат — работают модель и
47
+ сами тесты. Автоправка правил тут выигрыша не даёт.
48
+ 2. **Разница видна только в дисциплине.** Слабая обвязка не знает про pyflakes и
49
+ ни разу его не запустила — гейт формально «зелёный» по тестам, но неполный.
50
+ Полный `AGENTS.md` гейт всегда прогоняет.
51
+ 3. **Автоправка решает то, что видит, но платит за это.** Unix-команды в PowerShell
52
+ (`pytest ... | tail -30`, `tail` там не существует) сократились с 5 задач до 1, но
53
+ суммарное время выросло на 40% (3348с против 2395с): правил стало больше, контекст
54
+ дороже.
55
+ 4. **Автоправка без валидатора даёт противоречие.** В список «никогда не
56
+ использовать» редактор записал `python`, `pip`, `python -m` — а гейт требует
57
+ `python -m pytest`. Правило отменяет гейт. В harness2 за это отвечают валидаторы
58
+ в каркасе (у них есть свои проверки дерева и защита от утечек в рубрику), в моей
59
+ упрощённой версии их нет.
60
+ 5. **Остаточная unix-команда в candidate — показательна.** Агент выполнил гейт как
61
+ `bash -lc 'pyflakes bot.py lumen_*.py ...'`: то есть обернул в bash, чтобы
62
+ получить линуксовые глобы. Причина в самом `AGENTS.md`: строка гейта записана в
63
+ CI-виде (линукс), а хост — Windows, PowerShell.
64
+
65
+ ## Вывод
66
+
67
+ Harness²-подход («агент сам чинит свою обвязку») на этом репозитории не окупается:
68
+ потолок достигнут без всякой автоправки, а сама автоправка даёт побочный эффект
69
+ (противоречие с гейтом) и удорожание по времени.
70
+
71
+ Что стоит забрать:
72
+
73
+ - точечную правку `AGENTS.md` про Windows/PowerShell и правильную форму гейта для
74
+ PowerShell (агент тратит ходы на `tail`, `ls` и на линуксовые глобы);
75
+ - «уроки с доказательствами» (вторая рекурсия harness2) — дёшево, без каркаса:
76
+ после провала записать в файл правило со ссылкой на провал;
77
+ - сам измеритель `eval/` — им можно проверять любое будущее изменение `AGENTS.md`.
78
+
79
+ ## Ограничения
80
+
81
+ - По одному прогону на задачу и на вариант: разброс не измерен, выводы качественные.
82
+ - Задачи одного типа (починка бага по падающим тестам) — на них правила обвязки
83
+ почти не влияют; на других типах (рефакторинг, релиз, правка промпта) эффект
84
+ может быть иным, но это уже другой эксперимент.
85
+ - MCP-серверы в песочнице отключены: прогоны быстрее и без сети, но это не ровно
86
+ обычная обстановка агента.