Решили: нехватка данных для визуала — дефект, а не «эффекта не бывает»: клип без разметки взмаха, тело без ударной части, пустой слот VFX теперь кричат в консоль (VisualDefects, один крик на факт за бой). Заодно фолбэк точки A у ближнего удара поднят из ног в корпус бьющего.

Почему: ближний бой на экране остался без языка удара — ни дуги за клинком, ни формы от оружия, — и это выглядело как задумка. Замер: из 28 мили-юнитов взмах размечен у ДВУХ (оба дев-скелета), остальные 26 — весь покадровый бестиарий — играют клип только с маркером контакта. Дуга у них не заводится вовсе (OnUnitSwingStarted зовётся из окна взмаха), а форма удара строилась от позиции сима, то есть от ног. Дальний бой при этом работал и работает: его точка A — ShotPoint, разметки взмаха он не спрашивает. Отвергли молчание с комментарием «осознанное состояние покадрового бестиария»: комментарий виден в коде, а на экране видно только отсутствие эффекта, и отличить его от дизайна нельзя.

Сказано: «Отсутствие нужный ивентов в анимациях - должно КРИЧАТЬ. Если чего-то не хватает для визуала - КРИЧАТЬ» (2026-08-03, сессия e218ae88).

Грабли: CallerArgumentExpression в этом рантайме недоступен (error CS0122) — имя пустого слота VFX передаётся вызывающим через nameof, а не подставляется компилятором. Половинчатая разметка (один маркер из двух) неотличима от полного отсутствия: StrikeWindowNormalized честно отвечает «окна нет», поэтому автор увидел бы ровно то же, что и не размечавший ничего, — инвариант уехал в тест.

Владелец правды: VisualDefects.cs, UnitView.ResolveAttackMarker/TrackStrikeWindow, CombatVfx.Ready, CombatPresenter.SpawnHitForm; тесты AnimationValidationTests.Visuals_StrikeWindow_IsWholeOrAbsent и Visuals_HitMarker_LiesInsideStrikeWindow.