Решили: «чем бьют» отвечает ТОЛЬКО объявленная рабочая часть предмета (UnitHeldItem.ReachPart) — и в игре, и в офлайн-замере. Догадки убраны с обеих сторон: рантайм больше не берёт первый кусок предмета по порядку отрисовки, RigProfile — самый дальний кусок. Не объявлена — громкая ошибка и ответ «нечем», а не правдоподобное число. Кончик части считается по МЕШУ спрайта, как в гизмо, а не по дальнему углу рамки.

Почему: «Мы должны мочь ЯВНО указать спрайт. И для гизмо и для этого. Т.е. поле, а не “первое по списку”» — Макс, 04.08.2026. Поле существовало и раньше, но его знал только офлайн-замер; игра спрашивала первую подходящую часть, то есть первую по порядку отрисовки. На нынешнем арте это совпадало с клинком (рукоять и гарда сидят не под костью-хвата и типа «оружие» не несут), поэтому ошибка ничего не ломала — но она из тех, что срабатывают ровно тогда, когда предмет соберут из нескольких кусков под одним хватом, и выглядеть будет как «дуга размером с ладонь».

Замер по мешу на текущем клинке даёт ту же точку, что и по углу рамки (расхождение 0.000), а на щите расходится на 0.375: у диагонального рисунка дальний угол рамки лежит в пустоте за краем.

Сказано: «И еще “[CombatPresenter] автоатака юнита relic.frostbound бьёт типом Ice…“» — оттуда же вторая правка: способ доставки формы удара берётся из UnitData.AutoAttackDamageType, а не из типа урона события. Стойка вправе перекрасить автоатаку в стихию (ледяная стойка Мороза шлёт Ice), но махать боец продолжает тем же, чем махал: форма говорит КАК доставили, цвет — ЧЕМ ударили.

Грабли: настоящая причина отсутствия дуги за клинком оказалась не здесь. Хук начала взмаха (_onSwingStarted) висит на TrackStrikeWindow, а тот выходит первой же строкой, если клип не размечен маркерами взмаха — то есть у ВСЕХ китов до 04.08.2026. Дуги не существовало в игре ни разу с момента постройки. Гипотеза про рукоять была проверена замером и не подтвердилась; записано, чтобы следующий заход не искал там же.

Владелец правды: UnitPartRegistry.TryGetHeld, UnitPart.IsReach, UnitPartGeometry.TryGetTip, RigProfile.MainPiece, тесты UnitPartRegistryTests.HeldItem_WithoutDeclaredReachPart_AnswersNothing_AndShouts и AnimationValidationTests.SkeletalUnits_AttackClips_CarryStrikeWindow.