[architecture] Обновление Horizon до Nightly: удалён WASM, перенос Renderer и поэтапная миграция; сначала backports памяти/pacing #130
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).
Вывод
Обновление имеет смысл, но прямой переход на текущий upstream несовместим с AirDef. Это отдельная миграция архитектуры мода и перенесённого рендерера. Краткосрочно есть полезные небольшие backports, не требующие этого перехода.
Проверка 6 ноября 2026 по исходникам, release API, истории Git и
git merge-tree. Ничего не мержилось и не публиковалось в кодовых ветках.Закреплённые версии
1a693763fdf98916a39b394bb512340cc84bac87; HORIZON_COMMIT=b6c936f82b08798057161bdfa577e3aac53fb91e, v0.2.930b645d77e9497f1598ef6808e477c7e26aa87bd5278f356aa604fa21c2d15d0081823bbe0f891df2; базаa3acb5f0d2f59d2d5ff21a5aa000809ba1e35e2f, v0.2.97, 60 собственных commit objects поверх общего предка66f3981f522b24c250b21523a70080965b940424, Nightly 2026-11-05; immutable source tagnightly-source/2026-11-05-66f3981a1ff75a4a525b6a9e1ed68f74cf9d54161596370; не приравнивается к опубликованному NightlyВ upstream release-flow с 28 октября движок выпускается только как Nightly. v0.2.97 помечен устаревшим; новые
launcher@0.2.xx— отдельные выпуски лаунчера. Ждать нового «stable v0.2.98» вместо решения о миграции — не действующий план обновления.#72 касается предыдущего шага .93→.97, уже выполненного в kimi-work. Эту issue не следует трактовать как повтор #72 или автоматически закрывать #72 за владельца.
Подтверждённый блокер: WASM больше не исполняется
0c9a49390 удаляет WASM runtime, SDK, WIT и sandbox test harness. Предшествующее изменение убирает выполнение WASM code mods из игры. В новой документации .hmod — только content/data/assets; исполняемый код — native .hnmod, меняющий исходники перед сборкой игры.
cargo horizon-mod buildотказывает папке с Cargo.toml, sandboxtestудалён. Остаточный wasmparser у registry не означает сохранённого runtime.AirDef всё ещё зависит по path от
horizon-mod-sdkи пакует исполняемый WASM. Поэтому замена gitlink/бинарника на upstream не просто «может» нарушить совместимость: исчезает сам путь сборки/загрузки нынешнего кода мода. Сохранение расширения .hmod у content mods это не исправляет.Реальная сложность объединения
Проба без изменения рабочего дерева:
Exit=1, 76 конфликтующих путей/сообщений: 18 content conflicts, 18 modify/delete, 40 file-location из-за переездов. Последние 40 не равны 40 независимым сложным алгоритмическим конфликтам, но требуют корректного размещения и wiring.
Upstream выделил
horizon-client-render; наши HDgfx/hd/*, smoke, scene post, изменённые terrain/entity shaders должны быть перенесены туда и согласованы с новым Renderer. Есть конфликты в game.rs, mods.rs, remote.rs, WIT/runtime/SDK, упаковщике, LAN, lib и shaders. Между базой .97 и Nightly меняется 3131 путь; +1,011,007/−91,030 строк включают generated/docs и не являются оценкой числа переписанных вручную строк. История включает 13787 commit objects / 3701 first-parent commits; это не число уникальных исправлений.Чистое разрешение Git-конфликтов не докажет сохранность функциональности. Особенно уязвимы live/history world queries (#105), замена серверных чанков, акустика/invalidation/worker bookkeeping, съёмочные камеры и MP4 cleanup, HD post, model normals, autosave и часы replay/export.
Что полезно забрать уже сейчас
gfx/upload.rsещё старый; общий entity batch вgfx.rsзагружается через него каждый кадр. Это релевантно большим динамическим моделям AirDef. Патч проходитgit apply --checkна текущем форке после замены только пути client-render→client. Это подтверждает текстовую переносимость; собственный runtime/GPU замер удержанных буферов здесь не выполнялся. Перенести также upstream-тесты роста и readback, проверить память на налёте и после его окончания.git apply --checkбез поправок, включая notices. Кандидат для ПК 5600X/3060 только если используется Windows+Vulkan и VSync off; не объясняет автоматически все просадки и не исправляет Metal/DX12. Проверить FIFO/Immediate/Mailbox, DXGI-путь и GPU capture на Windows.set-modelsинстансы мода. Нужен профиль конкретного пути, не обещание «все ракеты теперь отсекаются GPU».bd186dc7321cadc471c18b5ff232718a435a9ccc, есть в просмотренном main, но не является предком Nightly 66f3981. PR сохраняет 0.1 и вводит экспериментальный контракт linear light; сам по себе ещё не означает полный linear HDR pipeline. Это важная точка согласования с #124/#125, но не готовые DLSS/MetalFX/RT.Варианты дальнейшего пути
Предварительная рекомендация: сначала два небольших backport выше с замерами. Параллельно не запускать гигантский merge «исправлять пока соберётся»: сначала короткий native-прототип и инвентаризация возможностей, затем решение native adapter vs собственный WASM layer. Долгосрочно native лучше совпадает с направлением upstream и уже выделенным core, но полнота host API для наших камер, post-processing, звука и world-history должна быть доказана прототипом. Не переписывать боевое ядро лишь из-за смены runtime.
План и приёмка миграции
nightly/mainбез SHA.Собственная выполненная в этом проходе проверка: получение release metadata и исходников, точные ancestry/diff, dry merge-tree, два
git apply --check. Объединённый клиент не собирался и игровой A/B не выполнялся, поскольку сначала требуется решить runtime-блокер и конфликты. Нельзя выдавать 275 тестов предыдущего среза за проверку нового объединения.Связано: #72, #87, #88, #89, #96, #102, #104, #124, #125, #126. Приоритет P2 для миграции; выбранные performance backports могут идти раньше отдельными небольшими изменениями.
🤖 Agent: Kimi Code, с реализацией от DeepSeek V4.1 Flash Fast и последующим ревью/проверкой.
Первый рекомендованный backport выполнен в
kimi-work(3db1b73), engine94b572cd2веткиagent/130-staging-memory.Перенесён upstream
f7b77fbc8: oversized StagingBelt allocations округляются до степени двойки и переиспользуются, а копируются только фактические байты. Вместе перенесён GPU growth/readback regression. Проверка:cargo test -p horizon-client --lib gfx::upload::tests— 3/3 на реальном Metal adapter; полныйpython3 tools/airdef.py game— успешно. API30 не изменился.Issue не закрываю: это только пункт про staging-память, не миграция на Nightly. VSync/pacing, дальний рельеф, Windows/Vulkan и долгий RSS-профиль остаются.