«Дифференциальные харнессы»: как Horizon сверяется с ванильной игрой

Как переписанный Minecraft доказывает, что он «тот же самый»: харнессы против настоящей 26.3, обязательные проверки каждого изменения и пробный запуск релизов.

Автор: редакция MC Horizon · Опубликовано · Обновлено

Харнесс — это тест, который подаёт одни и те же входные данные Horizon и настоящей Minecraft: Java Edition 26.3, а затем сравнивает результаты. Так переписанная на Rust игра доказывает, что генерирует тот же рельеф, двигает тех же мобов и выполняет те же команды, что и оригинал. Это главная страховка проекта, в котором большую часть кода пишут ИИ-агенты, а не люди строка за строкой.

Зачем это нужно

Переписать Minecraft «по ощущениям» несложно, но игроки заметят любое отличие: другой рельеф на том же сиде, по-другому сработавшая редстоун-схема, моб, который ходит не туда. Обычные юнит-тесты тут мало помогают — они проверяют то, что автор кода считает правильным. Дифференциальный тест проверяет другое: совпадает ли поведение с эталоном, даже если автор не знает, каким оно должно быть.

Как устроен харнесс

Одинаковый вход Minecraft 26.3эталон (Java) Horizonпроверяемая реализация Сравнить результат
Один вход — две реализации — сравнение. Любое расхождение и есть найденный баг.

Входом может быть сид и координаты (сравнить сгенерированные чанки), последовательность действий игрока, состояние мира с редстоун-схемой или текст команды. Выходом — блоки, сущности, сообщения, состояние инвентаря. Документация перечисляет охват от генерации мира до мобов, редстоуна и команд, а таблица статуса в репозитории показывает, что именно покрыто.

Сколько их

В описании репозитория на GitHub указано 281 харнесс, в документации на 25 октября 2026 года — 326. Цифра растёт вместе с проектом. Авторы при этом честно оговаривают: прохождение всех харнессов не доказывает, что больше ничего не отличается, и игроки отличия находят.

Как это встроено в работу

Проверка Когда Что делает
verify каждый пул-реквест и каждое изменение в основной ветке форматирование, линты (предупреждения = ошибки), тесты, проверка, что в репозиторий не попали файлы Minecraft
parity пул-реквест, который меняет поведение игры запускает харнессы, на которые влияет изменение, на машине с копией Minecraft
Повторная проверка внешних PR перед слиянием агенты сверяют заявленное с кодом самой игры, тестируют в одиночке, по LAN и на сервере
Smoke test релиза перед публикацией игра должна запуститься и отрисовать мир; без открытых release-blocker

Для пул-реквеста из форка parity запускается после того, как мейнтейнер прочитал изменение — машина с копией Minecraft не должна выполнять чужой непроверенный код.

Чистота кода

С 24 октября 2026 года в проекте действует правило: код Horizon пишется только по самой Minecraft 26.3 и публичной документации, никогда — по другому моду, загрузчику или рендеру. Правило появилось после того, как разработчик Iris показал, что старый код поддержки шейдерпаков был написан по исходникам Iris; тот код удалили. Харнессы хорошо дополняют это правило: эталоном служит сама игра, а не чужие реализации.

Что это значит для игрока

Высокая вероятность, что ваш мир, фермы и схемы поведут себя так же, как в ванилле, — и понятный способ помочь, если нет: сообщить «в ванилле X, в Horizon Y» в issues проекта. Про то, как устроен проект в целом, — в статьях «Что такое Horizon» и «История проекта Horizon», про безопасность сборок — в «Безопасно ли играть в Horizon».

Источники

Частые вопросы

Значит ли это, что Horizon на 100% как ваниль?

Нет, и авторы так не утверждают: харнессы покрывают многое, но игроки всё равно находят отличия. Лучший баг-репорт — «в ванилле X, в Horizon Y».

Как харнессы сравнивают с Minecraft, если в репозитории нет файлов Mojang?

Сверка с ванилью (parity) запускается на машине, где есть своя копия Minecraft; сами файлы игры в репозиторий не попадают — это отдельно проверяется.

Комментарии

Комментарии загрузятся, когда вы до них долистаете.