Решили: биты 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.