Решили: биты Buff/Debuff удалены из EffectTag; единственный владелец полярности —
EffectPolarity на EffectData. Фильтр по полярности спрашивает def.Polarity, а не маску тегов.
Сказано: «Снести биты, владелец — _polarity» (07.08.2026, сессия f61282ef). Выбранный вариант опросника, не свободная реплика: формулировка моя, решение Макса.
Почему: EffectData отвечал на вопрос «бафф или дебафф» дважды. Читалась только полярность —
ни одна строка под Scripts не трогала эти биты, — но авторинг заполнял оба поля, и три ассета из
108 уже разошлись: BanditConceal и BanditParryShield объявлены баффами без бита Buff,
RiposteCharge несёт бит при заявленной нейтральности. Отвергнутые альтернативы: «выводить биты из
полярности при загрузке» (сохраняет удобство маски, но оставляет два представления одного факта и
соблазн авторить руками) и «поставить guard-тест на согласование» (лечит симптом, оставляя причину —
второе поле в инспекторе).
Грабли: сломано ещё ничего не было, и найти это красным тестом было нельзя — ни один кит сегодня не фильтрует по этим битам. Выстрелило бы на ПЕРВОМ ките с «сорви все баффы»: он промахнулся бы мимо двух эффектов и снёс третий, никогда баффом не бывший, — молча.
Номера оставшихся тегов НЕ пересчитаны. Биты 0 и 1 просто больше не заняты: сдвиг переписал бы
смысл каждого числа в уже сохранённых ассетах, а _tags там лежит числом. Это выглядит как дырка в
перечислении и таковой является намеренно.
Правка ассетов сделана скриптом по YAML при закрытом редакторе (v & ~3 по полю _tags, только
папка Effects/ — поля тегов юнита называются иначе и не задеты), результат сверен git diff.
Владелец правды: Data/Definitions/EffectTag.cs (<remarks> объясняет, почему полярности здесь
нет), Data/Definitions/EffectData.cs; поведение диспела — Combat/Effects/EffectSystem.cs.