Харнесс — это тест, который подаёт одни и те же входные данные Horizon и настоящей Minecraft: Java Edition 26.3, а затем сравнивает результаты. Так переписанная на Rust игра доказывает, что генерирует тот же рельеф, двигает тех же мобов и выполняет те же команды, что и оригинал. Это главная страховка проекта, в котором большую часть кода пишут ИИ-агенты, а не люди строка за строкой.
Зачем это нужно
Переписать Minecraft «по ощущениям» несложно, но игроки заметят любое отличие: другой рельеф на том же сиде, по-другому сработавшая редстоун-схема, моб, который ходит не туда. Обычные юнит-тесты тут мало помогают — они проверяют то, что автор кода считает правильным. Дифференциальный тест проверяет другое: совпадает ли поведение с эталоном, даже если автор не знает, каким оно должно быть.
Как устроен харнесс
Входом может быть сид и координаты (сравнить сгенерированные чанки), последовательность действий игрока, состояние мира с редстоун-схемой или текст команды. Выходом — блоки, сущности, сообщения, состояние инвентаря. Документация перечисляет охват от генерации мира до мобов, редстоуна и команд, а таблица статуса в репозитории показывает, что именно покрыто.
Сколько их
В описании репозитория на 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».