Решили: стенд баланса подаёт симу фабрику призывов, а призванное тело получает СВОЮ строку метрик с указателем на хозяина — отсюда три взгляда: кит сам (AvgDmgDealt, DPS_solo), одно тело (строка в трейсе и сценариях), кит вместе с армией (DmgWithSummons, DPS_with_summons).

Почему: сим отдаёт рождение тел наружу через BindSummonFactory, и её подавал только игровой путь (EncounterLoader). Стенд не подавал никогда — ctx.Summon молча возвращал null, призыватели дрались в бенчах в одиночку, и таблица показывала это как их честную силу. Некромант в PvE-линзе после починки: 524 личного урона за бой против 982 с армией, 206 урона принято телами, среднее число живых тел 1.99 — и он поднялся с девятого места на первое по цене боя.

Альтернатива, отвергнутая: приписывать работу тел прямо в поля хозяина (SummonDamageDealt и родня) без отдельных строк. Дешевле на реализацию, но отвечает только на один вопрос из трёх — «сколько бьёт один скелет» остаётся невыразимым, а именно он решает, чинить тело или число вызовов.

Сказано: «Добавь да, поддержку призывов. Отдельно стату отдельного призыва и стату призывателя отдельно и с призывами.» (2026-08-03, сессия 87bf8fd2)

Грабли:

  • Id тела сталкивался с Id живого бойца. SimBench.Drive переразмечает бойцов по индексу списка, а счётчик фабрики про это не знает: часть бойцов — синтетика, созданная мимо фабрики, поэтому её счётчик отстаёт от длины списка. Первое же тело получало Id живого, и весь его урон уезжал в чужую строку — замер, неотличимый от честного. Лечится RuntimeUnitFactory.AdvanceIdsPast.
  • Тело нельзя пускать в состав отряда. Как только у него появилась строка, оно полезло в «павших» и в остаток HP отряда у всех бенчей, считающих команду по report.Units. Кит с армией начал бы проходить бой «дешевле», просто разбавив отряд расходниками.
  • Трешевый костолом не призывает вообще. Способность стоит 100 ресурса при регене 5/сек, а рядовой бой длится 9–11 секунд: касту нужно 20. У Некроманта то же самое, и работает он только потому, что два тела приходят пассивкой SkeletonGuards на старте боя. Это не про метрику, а про контент — проверять при следующем проходе по призывателям.

Владелец правды: MetricCollector.cs (строки и свёртка SummonRollup), SimEnvironment.cs (бинд фабрики), SimBench.cs (сдвиг Id), тест SummonMetricsTests.