# Performance Guardian

Простой админ-инструмент Fish Station для быстрого ответа на вопрос «почему лагает сервер?».

## Как открыть

1. F7 → вкладка **Производительность** → кнопка открытия
2. Консоль (флаг Debug): `perfguardian` / `pg`

Пока окно закрыто, UI-снимки не запрашиваются.

## Что показывает один экран

| Блок | Смысл |
|------|--------|
| Состояние сервера | Норма / нагрузка, TPS, физика, атмос, события |
| Основной источник нагрузки | Физика / атмосфера / события / сущности |
| Место | Самая «горячая» сетка |
| Координаты | MapCoordinates через Transform |
| Самые нагружающие объекты | Awake physics на этой сетке |
| Игроки поблизости | Actor + EntityLookup |
| Последний инцидент | Авто или ручная диагностика |
| Рекомендации | Короткий совет обычным языком |

## Режимы

- **Спокойный**: раз в ~2 с дешёвые счётчики (O(grids) атмос, awake count). Без поиска сущностей/игроков.
- **Инцидент**: только после прогрева baseline + 3 подряд аномальных сэмпла (или кнопка «Подробная проверка (нагружает сервер)»).
- Аномалия ≠ «просто высокий онлайн»: нужны относительный всплеск **и** абсолютный пол. Давление тика берётся из реального `frameTime`, не из atmos/physics.

## Ограничения (намеренно)

- Нет Risk Score, heatmap, таймлайнов, 12 вкладок и постоянного профилирования игроков.
- Нет правок RobustToolbox.
- Physics contacts недоступны из контента — proxy через awake bodies.

## Тесты

`Content.Tests` → `PgLoadClassifierTests`: ложные срабатывания на busy-станции, прогрев, одиночные спайки, пожар/бой, дешёвизна Observe.
