Решили: заряд усиленной авто-атаки снимается по тегу, который объявил сам компонент (EmpowerNextAttackComponent._consumeTag, новый EffectTag.Empowered), а не по жёстко вбитому Stealth. Заодно заряд научился толкать цель (_knockbackDistanceRuntimeUnit.EmpowerKnockback).

Почему: до этого AutoAttackSystem тратил заряд диспелом EffectTag.Stealth — потому что единственным носителем усиления был Убийца, у которого удар и правда выводит из тени. «Восходящий удар» Монаха воды — тот же заряд, но никакого стелса рядом нет: со старым кодом удар либо срывал бы скрытность, которой нет, либо (что и происходило бы) не снимал заряд вовсе, и кит бил бы усиленно всегда. Альтернатива «хранить ссылку на выдавший эффект» отвергнута: компоненты stateless и шарятся между носителями, своего экземпляра у них нет, а тег у эффекта уже есть и проверяется битовой маской.

Толчок отдан заряду, а не отдельному реактиву на «я попал», потому что заряд снимается в момент снятия цифр удара — реактив «на удар» к моменту прилёта уже не висел бы.

Грабли: толкает только ближний одиночный удар. Линия не толкает (кого из четверых уносить — вопрос без ответа), снаряд тоже: его попадание случается в ProjectileSystem позже и без снятых цифр этого удара.

Владелец правды: EmpowerNextAttackComponent.cs, AutoAttackSystem.Resolve/PushIfEmpowered, тест EmpowerChargeContractTests (тег компонента обязан быть на самом эффекте, и эффект обязан быть снимаемым — иначе усиление не израсходуется никогда).