Решили: границы фаз клипа живут МАРКЕРАМИ В КЛИПЕ, а не числами в показе. Клипы атак размечены StrikeStart/StrikeEnd (по авторским границам фазы удара: 0.333–0.583 с у Attack/Attack2/Attack3, 0.433–0.733 у AttackCharge), клип гвардии — новыми GuardUp/GuardDown (0.25/0.45). Константа GuardRiseShare из UnitView изъята; клип гвардии приходит из UnitVisual.GuardClip.

Почему: доля подъёма щита стояла в показе числом (0.2 клипа = 0.12 с) и была молча завязана на ключ клипа в 0.117 с. Автор снял этот ключ и перенёс подъём на 0.25 с — клип остался целым и красивым, а показ продолжил скрабить до 0.12 с. Замер перекрытия тела щитом (RigSweep): 27.9% в стойке, 83.7% на поднятой позе, на 0.12 с — 60.3%. То есть в бою щит застревал на полпути и висел так всю жизнь барьера, без единой строки в консоли. Отвергнутая альтернатива — «поправить константу под новый клип»: она чинит один случай и оставляет второго владельца факта, то есть ту же ловушку на следующую правку.

Разметка взмаха при этом не существовала вовсе, хотя весь механизм под неё стоял с 03.08 (ClipMarkers.StrikeWindowNormalized, UnitView.TryGetSwingProgress, SwingArcVfx, хук начала взмаха). Дуги за клинком в игре не было ни у кого — консоль об этом честно ругалась.

Клип гвардии теперь ещё и САМ возвращает руку в стойку (0.45 → 0.6). Это отменяет прежнее правило «клип надстройки не возвращается в стойку» (30.07): оно держалось на том, что возврат нечем ограничить по времени, а маркер GuardDown ровно эту границу и даёт. Первый и последний кадры клипа совпадают (перекрытие 27.9% в обоих), поэтому вес слоя гаснет одновременно со скрабом хвоста — рука опускается, а не растворяется в базе.

Сказано: «Не стоит разве ивент “Я вошел в блок” и ивент “Я вышел их блока” добавить в анимку, чтобы весь view считался с учетом этого, как уже сделано у Attack?» и «Где у нас ивенты у анимаций атак “взмах начался” и “взмах закончился”? Чтобы чертить линию за мечом на стадию замаха.» (2026-08-04, сессия 06e45474).

Грабли: маркеры считались «первым событием клипа» в двух инструментах — RigSweep.ContactTimeOf и AnimationLabProcessor.ResolveImpactTime. Пока маркер был один, разница не читалась; после разметки взмаха StrikeStart стоит РАНЬШЕ Hit, и оба инструмента стали бы показывать контакт на четверть клипа раньше настоящего — гизмо и тангенс-пасс врали бы молча. Оба переведены на ClipMarkers.FirstHitTime.

Владелец правды: ClipMarkers.cs (GuardWindowNormalized, StrikeWindowNormalized), UnitView.cs (ResolveGuardMarkers, TickGuardPose), тесты AnimationValidationTests.Visuals_GuardWindow_IsWholeOrAbsent, AnimationValidationTests.Visuals_StrikeWindow_IsWholeOrAbsent, AnimationValidationTests.Visuals_HitMarker_LiesInsideStrikeWindow.