Решили: последствия забега (травмы и закалки) ложатся последним слоем каскада статов — после класса, вида, персоны, Судьбы и предметов.

Почему: рана обещает «−30% скорости» от того, чем боец стал со всем снаряжением, а не от голой базы. Положи её раньше предметов — и сапоги скорости отыгрывали бы травму сильнее, чем написано в карточке, причём тем сильнее, чем лучше собран боец. Слой последний ещё и потому, что он единственный, который снимают посреди забега.

Отвергнут слой сразу после Судьбы («последствие ближе к человеку, чем к вещам»): красивее по смыслу, но ломает обещание карточки.

Грабли: порядок различим не всегда — на PercentMult результат одинаков при любой перестановке, и тест на множителях зелёный в обе стороны. Различает его Override: последний побеждает, и последствие обязано перебивать предмет, иначе снаряжение «вылечивало» бы травму молча. Инвариант проверяется именно на Override.

Второе: тела мира вне боя (двор, хаб) собираются тем же каскадом, но долю StartHpPct НЕ применяют. Травма по максимуму HP там видна, травма по стартовому запасу — нет, и это верно: до боя запас ещё не срезан. Формула стартового запаса поэтому живёт одна на двоих — EffectiveStats.StartingHp, а не по месту чтения.

Владелец правды: EffectiveStats.cs, тест InjuriesInBattleTests.