Решили: раны забега живут в существующем ConsequenceData (полярность травма/закалка), а не
в новом типе InjuryData, как планировал заход.
Почему: тип уже был заведён под последствия боя, зарегистрирован в ContentDomains (домен
consequence) и описывал ровно ту же сущность — моды, вес выдачи, цену снятия. Отдельный
InjuryData рядом стал бы вторым владельцем одного факта: два типа, два домена id, два места, куда
дизайнер может положить «−30% скорости», и никакого способа узнать, какой из них читает игра.
Достроили вместо этого сам ConsequenceData: ступень, срок истечения, иконка.
Грабли: тип выглядел живым, но был пустым насквозь — ноль ассетов на диске, ноль ссылок в
коде кроме реестра доменов. Это и позволило поменять Severity (int) на InjuryGrade (enum) без
миграции: смена типа сериализованного поля обычно молча теряет данные, здесь терять было нечего.
Проверялось не глазами, а грепом по guid скрипта в *.asset — имени класса в YAML нет, и обычный
поиск по «Consequence» вернул бы пустоту одинаково и для «нет ассетов», и для «не так искали».
Прежнее поле Severity отвечало на вопрос «насколько больно», а каскаду нужен другой — «в какой ряд
слотов кладётся». По целому числу тяжести каскад было не написать, не додумав границы рядов.
Владелец правды: ConsequenceData.cs, ContentEnums.cs (InjuryGrade),
тест InjuryCascadeTests.