Решения Фазы 2, точные даты не зафиксированы; запись извлечена из замороженного 20-explanation/data-stats-damage.

Решили два правила, оба про то, чего стат-пайплайн не делает.

1. Отложенные изменения статов идут одной очередью, и порядок поступления значим. Эффекты не правят статы на месте: заявки на наложение и снятие копятся в одной очереди, Commit() проигрывает их разом в конце тика.

2. Клампов нет нигде — ни в Get, ни в пересборке кэша, ни в Compose.

Почему: одна очередь — потому что разделение на «сначала все снятия, потом все наложения» арифметически неверно: три стака по 5 дают тогда 30 вместо 15. Порядок поступления и есть та информация, которая делает результат правильным, и разложить очередь на фазы значит её потерять.

Клампы сняты намеренно: диапазон скорости атаки, который обещали конфиг и докстринги, симуляция никогда не применяла. То есть поля в конфиге врали — а если бы кламп включили, потолок темпа ударил бы ровно по тому киту, чья фантазия и есть разгон. Убрать врущее поле оказалось честнее, чем оживить ограничение, которого дизайн не хотел.

Грабли: юнит, которого только что собрала фабрика, коммитит пассивки вручную — тика при рождении нет, а родиться он обязан с уже действующими бонусами, иначе выходит на арену с недобранным запасом HP. Тот же второй вход коммита, что и у эффектов: Journal - Effects Are Ordered By Id, Attributed By Weight.

Владелец правды: Assets/_Project/Scripts/Combat/Stats/ (Stats, Compose, очередь коммита); перф-цена этой схемы — открытый пункт Meta - Tech Debt §3.2, и он сознательно не оптимизируется без замера.