Решили: «удар в тыл» для Ночного лезвия считается от конвенции сторон (CombatPositioning.IsRearAttack: атакующий в конусе ±60° со стороны домашнего края цели), а не от разворота юнита.

Почему: своего «лица» у юнита в симуляции нет — ни поля, ни угла; общий слой C позиционики (фланг и тыл для всех, ГДД positioning) принят в дизайне, но в коде отсутствует. Альтернатива «завести настоящее лицо и сектора» отвергнута на эту ночь сознательно: она меняет баланс ВСЕХ юнитов, а не одного кита, и её нельзя ввести без замеров. Прокси берёт направление оттуда же, откуда его берёт побег (FleeSteering.HomeDir), поэтому не требует ни истории движения, ни разворотов и остаётся детерминированным.

Цена названа вслух: удар в спину цели, которая сама зашла за твою линию, тыловым не считается.

Грабли: кит вскрыл чужой дефект детерминизма. Фокус автоатак «меньше всего HP%» уронил Mirror_SquadSeries_NeverDiverges: в начале боя HP% у всех ровно 1.0, скоры равны, и выбор решает тай-брейк o.Id < best.Id — а глобальный Id у левой команды меньше, то есть «меньший Id» указывает на РАЗНЫЕ роли в отражённых командах. Обошли дефолтом карточки («Ближайший»), сам дефект открыт: тот же изъян у MarkTransferComponent (перенос метки при равных дистанциях). Лечится тай-брейком по слоту в команде вместо глобального Id — это меняет исходы существующих боёв, поэтому решение за Максом.

Владелец правды: CombatPositioning.IsRearAttack, RearStrikeEffectComponent.cs; открытый дефект — ProfileBrain.cs:80, docs/roster-expansion-progress.md §Проблемы.