Решили: воспроизведение файлового реплея начинает показ с ПЕРВОГО тика записи, а не с FrontTick − lookahead. Пока показ ещё не пошёл, ReplayFilePlayer не гонит фронт ленты вперёд на весь боевой lookahead (10 c) — кормит только до OldestTick; сам lookahead набирается уже по ходу показа. Заодно дуэли меню перезаписаны на энкаунтерной дистанции (MenuBattleConfig._lineX 3 → 5.5).

Почему: боевой lookahead существует, чтобы показ ОТСТАВАЛ от живого сима и мог читать будущее (телеграфы, подводки камеры). У живого боя это безопасно: продюсер не разгоняет сим впереди несуществующего показа (HasFullLead == true до старта), и показ идёт с первого тика. Файловый плеер эту симметрию ломал — прокармливал ленту на 10 c вперёд ЕЩЁ ДО первого кадра показа, из-за чего старт уезжал на FrontTick − lookahead. Альтернатива «уменьшить lookahead для реплея» отвергнута: старт всё равно оседает на feed_target − lookahead ≈ margin из-за гранулярности чанка — лечится не величиной лага, а тем, чтобы до старта не разгонять фронт. Дистанцию _lineX=3 (геометрия Ристалища, команды ~5.8 по X) заменили на 5.5 (центры ±5.5, ~10.8 между командами) — это геометрия боевых энкаунтер-пресетов карты.

Сказано: «Реплеи будто идут не с начала, а резко прыгают на какую-то середину» и «Юниты располагаются не достаточно далеко друг от друга. Должно быть как в реальном бою» (04.08.2026, сессия 78678294).

Грабли: симптом «прыжок на середину» невозможно вывести из одного плеера — он даёт лишь ~1 c пропуска. Корень виден только вместе с записью: команды на старте стоят на 5.8, а сходятся в контакт (1.6) за ~0.8 c, поэтому съеденная показом первая секунда — это ВСЯ фаза схождения, и показ открывался уже свалкой. То есть тесная дистанция и потерянная завязка — один узел, а не два бага. Числа проверены чтением самих .gmrp (первый кадр tick 0 существует — запись писалась с начала, врал показ).

Владелец правды: Net/Tape/ReplayFilePlayer.cs (ветка Tick, кормёжка до старта показа), ScriptableObjects/Configs/MenuBattleConfig.asset (_lineX). Инвариант «показ реплея стартует с первого тика» тестом пока НЕ закрыт — кандидат на ReplayFilePlayerTests (feed до старта не уводит фронт за OldestTick).