Решили: у скелета три читаемых состояния вместо двух. Idle — отдых с ОПУЩЕННЫМ клинком (мировой угол −25 вместо прежних 37, щит 65 вместо 90), новый CombatIdle — боевое ожидание с поднятым (58/88), а все три атаки ставят нулевой кадр в позу боевого ожидания. Правило Макса: отдых опущен, наготове поднято, удар бьёт.

Почему: параллельная сессия расщепила Idle на «вне атакующего лупа» и «боевое ожидание» (CombatIdle), и у показа не оказалось способа их различить — обоим достался один клип покоя. При этом покойная поза рига держала клинок под 37°, то есть отличалась от «наготове» на двадцать градусов: игрок не увидел бы разницы вообще. Заодно закрылся щелчок на входе в удар — атаки стартовали из покоя, и юнит, стоявший в боевой стойке, сперва ронял меч на 38° и только потом замахивался. Приём взят у AttackCharge, где нулевой кадр давно сделан позой бега по той же причине.

Грабли: правка блока, сделанная часом раньше, держалась на ложном замере. Я вынесла щит поперёк корпуса, добавив локтю +50, и подтвердила улучшение числами — но валидатор поймал hinge-inverted на 48°, а перебор по сетке показал, что локоть двигает центр щита на СОТЫЕ доли: всю работу делает плечо. То есть +50 не выносили щит, а разгибали сустав в обратную сторону.

Ошибка в замере была своя: угол сустава я считала через точку хвата, а она на этом риге сидит В ПИВОТЕ предплечья (это уже записано как готча «хват — не конец кости»), поэтому вектор предплечья выходил почти нулевым и его направление — мусором. Правильную сторону знает валидатор: он меряет по осям костей и берёт за ноль позу покоя РИГА, а не ноль угла.

Второе: ошибка hinge-inverted у блока существовала и ДО правки (36° при прежних 38 на локте) — я лишь усилила её. Проверять валидатором надо было до, а не после.

Владелец правды: BoneUnitClipRecipes (CombatIdle, Braced, Resting, Block), RigValidator (сторона сгиба — только он, не конвенция и не глазомер).