Решили: «Жилы» Десятины собраны отдельным эффектом effect.sinews (пассивка кита), а не внутри эффекта-стойки; принадлежность форме компонент проверяет сам — полем _requiredStance против RuntimeUnit.AttackStance. Тем же полем гейтится BleedOnHitComponent: кровь пускают только выпады в упор.

Почему: статовые модификаторы адресуются эффектом-ключом, а AttackStanceComponent уже держит на своём ключе статы формы (дальность, темп). Поселись «Жилы» там же, снятие бонуса скорости сносило бы заодно профиль формы — и не в момент правки, а когда кит впервые просядет ниже порога. Отвергнута и вторая развилка: научить стойку вешать self-эффекты формы. Стойка сознательно устроена как идемпотентный СНИМОК профиля, у неё нет обратной операции; пара «наложить/снять» на каждую форму вернула бы ей вопрос «а что если форму сорвали посреди боя», ради одного кита.

Грабли: порог HP гейтит бонус и плату ОДНИМ правилом. Разведи их — и кит продолжал бы платить 4% максимума за удар по опустевшему запасу, то есть добивал бы себя; при общем правиле кламп «не ниже 1 HP» вообще не нужен, и его отсутствие не недосмотр (тест Cost_StopsAtThreshold_SoItCannotKill держит это явно). Плата берётся прямым вычетом CurrentHP, как дань «Голода», а не через DealDamage: иначе её погасила бы броня, разбудили бы шипы, а вампиризм отыграл бы цену навыка обратно. Состояние «бонус висит» живёт в RuntimeEffect.Counter — поле в компоненте стало бы общим на всех носителей.

Владелец правды: SinewsComponent, BleedOnHitComponent._requiredStance, AttackStanceComponent.CloseStanceIndex, тесты SinewsTests.