Решили: Комбо (серия Атак) стало состоянием симуляции: RuntimeUnit.ComboAttacks считает Атаки, ComboIdleTicks меряет время вне атакующего лупа, порог разрыва — SimTuning.ComboBreakSeconds (1.5 с). Атака засчитывается, когда прошла путь замах → (канал) → конец рекавери; промах засчитывает, прерванная контролем — нет. Цикл фаз голема и «каждая N-я» Драугра переехали на этот счётчик и на новые события CombatEvent.AttackCompleted / ComboBroken; своих счётчиков (RuntimeUnit.AttacksMade у цикла, RuntimeEffect.Counter у «каждой N-й») у них больше нет. Разрыв гасит заряд, который взвела сама серия, — точечно, ICombatContext.RemoveEffect(unit, def). Три вражеских заряда (GolemSlam, GolemSweep, ShamanOrbStrike) получили тег Empowered и его же в _consumeTag.

Почему: ГДД описывает Комбо с 2026-07-30, в движке его не было вовсе — ни счётчика серии, ни разрыва. Отсюда росли сразу три вещи: голем после стана продолжал цикл с прерванной фазы (счётчики жили весь бой и не сбрасывались никогда), «каждая третья» считала Удары вместо Атак (у многоударного кита стала бы «каждой полутора»), а взведённый заряд без тега снятия оставался висеть на носителе до конца боя — снимать его было некому. Красный EmpowerChargeContractTests показывал верхушку: тест требовал тег, а AutoAttackSystem 2026-07-31 узаконил None веткой «нечего снимать» — два владельца правды разошлись, и починка «одного ассета GolemSlam» ничего бы не дала.

Разрыв снимает заряд по определению эффекта, а не диспелом по тегу Empowered: тот же тег носят заряды активок и триггеров, а у них правило другое — сняли носителя, сгорел; отошёл, цел. Диспел по тегу отнял бы у Убийцы удар из тени на каждом добеге длиннее полутора секунд, что прямо противоречит карточке Скрытности («может не атаковать и отбегать, чтобы сохранить»).

Счётчик один на всех потребителей серии — вместо своего у каждого компонента. Свой пришлось бы сбрасывать на разрыве в каждом компоненте руками, а забытый сброс ниоткуда не виден: кит просто продолжал бы счёт с места, где его выбили из боя.

Сказано: «У нас же есть механика комбо обговоренная. и она должна работать так как записано в гдд. Это не только у него, но и у драурга, например» · «Надо чтобы считали “Атаки” (а в атаках может быть несколько УДАРОВ). И да, промах - это тоже атака. Надо не чтобы попала, а чтобы атака прошла полный пусть от замаха до рекавери.» · «Разрыв гасит только заряды серии» (2026-08-01, сессия 7b3b2deb).

Грабли: AttacksMade считал Удары, а звался Атаками — переименован в HitsMade. Слепота на нём и осталась: она гасит отдельный контакт, и перевод на счётчик Атак отправил бы мимо весь поток канального кита разом. Это открытый долг, а не решение (open-forks, ритм атаки, п. 2). EmpowerNextAttackComponent.OnExpire не сбрасывал EmpowerSplashRadius: заряд, снятый до удара, оставлял носителю радиус задевания, и следующий обычный удар одиночки бил по площади. SimTuningConfig пришлось пересохранить в редакторе — иначе ConfigValidationTests красный: новое поле приезжало из кода, а не из ассета.

Владелец правды: AutoAttackSystem.UpdateCombo/CompleteAttack, RuntimeUnit.ComboAttacks, AttackCycleComponent, EveryNthAttackComponent, тесты ComboSeriesTests (разрыв, боевое ожидание, промах, чужой заряд), AttackCycleTests, EmpowerChargeContractTests.