Решили: бенч забега гоняет каждый строй несколькими составами (вариант k берёт k-ю реликвию каждой роли), а рядом со средним печатает разброс отдельной таблицей run_roster.

Почему: одна четвёрка отвечает на вопрос «каково ЭТИМ ЧЕТВЕРЫМ», а выводы из неё делаются про роли и про строй. Разница между строями тогда может целиком объясняться китами — и никак это не отличить, пока состав один.

Грабли — вывод, который я успела записать как факт. Первый замер лестницы дал «отряд под квест проходит акт вдвое дешевле штатного», и это звучало как готовая проблема дизайна: цена квеста отрицательная, испытание брать выгодно. Срез по четырём составам показал другое:

СтройСмертей на бой по составамСреднее
Штатный0.62 · 1.03 · 1.47 · 2.221.34
«Только ближники»0.57 · 0.57 · 1.45 · 1.481.02

Разброс внутри строя (1.6) больше разницы между строями (0.32). Исходный вывод держался на том, что составу ближников достались сильные киты, а штатному в третьем варианте — трешевые.

Второе, что видно только на срезе: варианты набираются из того, что осталось, поэтому дальние номера состоят из Треша — то есть срез мешает тиры реликвий, и сравнивать роли по нему можно только внутри одного тира. Это следующая правка бенча, а не готовый инструмент.

Что при этом подтвердилось на всех составах: цена боя 36-68% HP против цели 25-30%. Число, которое НЕ зависит от состава, — единственное, на которое можно опираться после одного прогона.

Владелец правды: RunBench.PickHeroes (вариант), RunBench.WriteRosterSpread, docs/balance-issues.md BAL-029.