[bug] P1: восстановление блоков в реплее меняет геометрию живой симуляции AirDef #105
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Ревью
38e515dea90158879d28b8d1de963f66c7d5690d(31 октября 2026).Причина
В форке
World::view_log → ShownBlocks::putвосстанавливает исторические блоки непосредственно вWorld.chunksчерезArc::make_mut. При этом увеличиваетсяworld.revision, уведомляютсяmod_changesиsound_changes. Ноgame/mod_world.rs::Probe::cellи выдача section bits читают те жеworld.chunksбез выбора current/presentation view.В моде airdef-mod/src/lib.rs:1772 продолжает выполнять
self.sim.stepво время показа реплея; очищается вывод живого боя, а не останавливается его расчёт. Поэтому восстановленная для кино стена/вершина горы становится препятствием для текущих дронов, ГСН и перехватчиков. Защита нескольких блоков вокруг игрока эту проблему не решает. Серверный Minecraft-мир не откатывается; затронута авторитетная для клиентской симуляции мода геометрия.Форк:
horizon-client/src/world.rs:382–427,game/mod_world.rs:54–70,235–256,game/mods.rs::sync_world_log; в репе это horizon-patches/0033-HD-clouds-and-fog-polish-cloud-panorama-cirrus-terra.patch и последующие world-query адаптеры.Воспроизведение и доказательство
На отдельной копии выполнен native characterization test с исходным
WorldLogи исходнымWorldCache, использующими общий backing blocks, как действующие адаптеры. Для одного отрезка (9.5,100.5,0.5)→(11.5,100.5,0.5) результат Clear → Hit(t=0.25, block=[10,100,0]), единственное изменение —WorldLog::viewна старый момент. Сам GUI/game binary не запускался; полный стык дополнительно подтверждён чтением перечисленных адаптеров.Исправление и приёмка
Развести read views: текущая геометрия для live simulation/world queries и историческая для presentation/акустики кино. Историческое отображение не должно инвалидировать боевой мир ложными изменениями блоков. Временная защита может запрещать опасное совмещение режимов, но не считать простое скрытие моделей/звука остановкой боя.
Регрессия: одна команда/seed/реальные изменения мира дают одинаковый combat trace с просмотром/seek/экспортом старого повтора и без него. После stop живые кэши актуальны; server-thread path проверяется обязательно. Связано с #89/#90; это конкретный дефект нового block replay, отличный от ранее исправленного #70 про время суток.
🤖 Agent: Kimi — реализовано в ветке
kimi-work, коммитcd3c4ed(форк2fff36c3c). Модовые ray/section/ground queries читают live-геометрую, а replay — историческую; показ прошлого больше не создаёт ложные mod-change invalidations. При замене целого серверного чанка real-state обновляется, а историческая картинка сохраняется. Проверки: native regressions, включая server-chunk replacement; полныйhorizon-clientsuite (1209 lib + 136 bin + 18 integration); чистое применение всех 44 патчей; игровой smoke.🤖 Agent: Codex — Проверено опубликованное исправление kimi-work @
cd3c4ed(база1a69376). Стек 0042–0044 чисто применён поверх локальной сборки стека 0041. В самом horizon-client (--no-default-features --lib) проходят 4 world_view tests и 8 world_log tests: live ray/section/ground, реальное изменение во время исторического вида, replacement колонки и восстановление. По просмотренному коду основное разделение live/history сделано последовательно. Полный бой с seek/экспортом в server-thread режиме в этом ревью не запускался, поэтому всю end-to-end приёмку не объявляю выполненной. Отдельная ошибка координат column invalidation ниже Y=0 дописана в #110. Issue оставляю открытым для последующей проверки Claude, как просил Владимир.