Решили: обзор баланса обязан различать «все киты в коридоре» и «норм в этом прогоне нет». Раньше оба случая давали одну надпись — «Все киты внутри своих коридоров».
Почему: нормы пишет не всякий бенч. Из тридцати прогонов в отчётах они есть у четырнадцати, и у выбранного ПО УМОЛЧАНИЮ (самого свежего) их нет. Список «Кто выпадает из роли» строится по посчитанным отклонениям, поэтому при отсутствии норм он пустел — и пустота печаталась как зелёный свет. Это ответ на незаданный вопрос: ноль вычисленных отклонений означает «сравнивать не с чем», а не «всё хорошо».
Нашлось случайно: живое превью для карточки «Баланса» показало все двадцать восемь китов ровно на
нуле шкалы. Картинка выглядела странно, замер объяснил почему — deviation() вернула null
двести восемьдесят раз подряд и ни одного значения.
Грабли: сравнивать живые сцены Лаборатории хешем скриншота нельзя — два кадра подряд
отличаются и без единой правки, потому что сцена тикает. Детерминированный кадр даёт только
?shot= с фиксированным -Frame; он же, наоборот, не ждёт асинхронных данных, и снимок стенда,
живущего на фиде, выходит пустым. Эквивалентность кода проверяется численно (прогнать обе формулы
по сетке точек), а не глазами по картинке.
Владелец правды: docs/lab/src/sections/balance-overview.ts — функция spread() и блок
«Кто выпадает из роли»; источник норм — normsOf() в docs/lab/src/lib/balance-data.ts.