Решили: полный снос показанного визуала боя (виды, трупы, _frameIndex, летящие цифры и VFX)
вынесен в ResetShownBattleVisuals и зовётся не только из HandleBattleReset, но и из BindBattle —
то есть на КАЖДОМ старте боя, а не только на dev-рестарте.
Почему: чистка висела на событии OnBattleReset, которое приходит лишь при dev-рестарте. Смена
боя идёт другим путём — привязкой нового скоупа через BindBattle, и там снимались только симуляция
с подписками. Id юнитов в каждом бою свои и начинаются с нуля, поэтому бойцы нового боя доставали по
своим id виды бойцов прошлого — вместе с остаточным HP, позой и трупами. Альтернатива «чистить в
UnbindBattle» отвергнута: путь бой→мир обязан оставлять тела на арене, их хоронит отсутствие в
кадре, и снос там сломал бы выход из боя в живой игре.
Сказано: «Ты изучил как работает 2 и следующие бои? Будто они и начинаются далеко не со старта! View выглядит, будто они сразу теряют по 60% хп к началу проигрыша» (04.08.2026, сессия 78678294).
Грабли: дефект невидим в живой игре и виден только там, где бои идут подряд без мирового кадра между ними — в фоне меню. Из-за этого он читался как дефект ПОКАЗА («реплей играется с середины»), и искать его начали в стартовом тике ленты, где всё было в порядке: файл содержит tick 0, первая дуэль всегда шла с начала. Врал не показ, а переиспользованные виды. Проверять такое надо не глазом по экрану, а вопросом «что переживает смену боя»: презентер — объект персист-сцены, он переживает всё.
Владелец правды: Presentation/CombatPresenter.cs (ResetShownBattleVisuals и оба её вызывающих).
Инвариант «виды не переживают смену боя» тестом НЕ закрыт — кандидат в CombatPresenterTests.