Решили: тир реликвии (DropRarity) стал осью замера в RunBench, а не фильтром: отряд набирается в границах одного тира, и обычные с трешевыми китами стоят разными строками отчёта.

Почему: варианты состава брались по общему списку подряд, поэтому первые два набирались обычными китами, а третий-четвёртый доскребали трешевыми — теми, что слабее по замыслу. Среднее по режиму мешало два вопроса, и разброс внутри строя объяснялся не ростером, а тем, в какой момент кончился список. Отвергнут простой фильтр «гонять только обычных»: треш — половина ростера, и вопрос «сколько стоит бедный ростер» законный. Ответ на него оказался крупнее ожидаемого — тир двигает смертность вдвое (1.05 против 2.22 на бой), то есть сильнее, чем строй.

Грабли: класс Healer завели 28.07, а сопоставления со слотом строя ему не дали — SlotRole знал только Summoner → Support. Ни один строй слота Healer не объявляет, поэтому Светлый пастырь и Травница не выходили на арену ни в одном замере за три недели, и заметить это было нечем: тыловой слот исправно закрывался китом роли Support, а отсутствие хила читалось как свойство ростера. Урок общий: молчаливо выпавший из перебора контент выглядит не как дыра, а как результат.

Второе: знаменатель доли целых маршрутов был формулой Routes * Variants. С разным числом вариантов у тиров она завысила бы знаменатель треша втрое — теперь пройденные маршруты считаются счётчиком.

Владелец правды: RunBench.cs (Tiers, BuildSquads), Lineups.cs (SlotRole), docs/balance-issues.md §BAL-029.