9.2 KiB
Проверка локального MVP
Дата: 2026-09-14. Стенд: Linux x86_64, AMD Ryzen 7 1700, Rust/Cargo 1.96.0, Node 22.22.3, Python 3.14.4. Точные версии — environment.json. Исходная ревизия выпуска фиксируется в RELEASE.json каждого архива.
Автоматические проверки
bash scripts/verify.sh
cargo build --release --workspace --locked
node scripts/check_server.mjs --binary target/release/shacraft-server --output artifacts/server-e2e-release.json
node scripts/check_mcp.mjs --binary target/release/shacraft-server --output artifacts/mcp-sdk.json
node scripts/benchmark_server.mjs --binary target/release/shacraft-server --output artifacts/server-benchmark-final.json
verify.sh завершился с кодом 0: fmt, Clippy -D warnings, 84 Rust-теста (core 30, content 11, compat 17, MCP 8, server/WASM 18), 6 JS-тестов, отдельная аварийная проверка хранилища и debug HTTP/WebSocket-сценарий. Полный журнал.
Release-прогон прошёл 14 групп: проверка ресурсов/авторизации, несовместимый manifest, два клиента, авторитетное движение, недостижимая правка, реальные break/place, последовательные ревизии, late join, immutable template/изоляция, чат, события сущностей, reconnect, полный Spleef и reset, удаление отключённых игроков, SIGKILL → восстановление блоков, свойств сущностей и настроек. Отчёт.
Настоящий MCP SDK 1.30.0 прошёл initialize/notification/ping, 17 schemas, 4 resources, prompt, durable edit/replay/conflict/undo, plan/commit/retry, PNG image content, entities CRUD, настройки, metrics/reset. Отчёт SDK. Для воспроизведения установить независимый клиент:
npm install --prefix artifacts/mcp-sdk --no-package-lock @modelcontextprotocol/sdk@1.30.0
SHACRAFT_MCP_SDK="$PWD/artifacts/mcp-sdk/node_modules/@modelcontextprotocol/sdk" node scripts/check_mcp.mjs --binary target/release/shacraft-server --output artifacts/mcp-sdk.json
В репозитории нет зависимости рабочего клиента от Node/MCP SDK. Они нужны только проверке.
Каталог и совместимость
Каталог сравнивается с независимой проекцией официальных отчётов по всем каноническим состояниям, properties/defaults и множеству сущностей. Отдельно проверены геометрия, ориентации плит/ступеней/дверей, контекстные случаи, entity dimensions. Повторный полный генератор отчётов/API и авторских ресурсов воспроизвёл файлы побайтно: reproducibility.
17 converter-тестов покрывают типизированный NBT, compression modes/external chunks, палитры, negative coordinates, unknown data, offset/3D biomes, удаление stale chest data, original checksums, no-overwrite, invalid input, создание/перемещение/удаление сущностей и отдельный entity fingerprint.
Официальный Java 26.2 прочитал exact (1 chunk, 3 блока, 1 сущность), edited (2 chunks, 3 блока, 1 сущность) и новый экспорт (2 chunks, 2 блока). nbtlib 2.0.4 проверил Sponge-теги и их числовые типы. Машиночитаемый результат, команды и ограничения. Использовались публичные codecs без запуска Minecraft-сервера и без принятия EULA.
Память и тик
Бюджеты записаны в скрипте до прогона: 256 МиБ для процесса с 10 клиентами, p95 выборки работы тика ≤50 мс. Полный каталог включён. Один сервер содержит 5 служебных/демонстрационных миров и 1, 10, затем 100 дополнительных immutable forks лобби. Активные этапы: 10 клиентов в одной области общего мира и в отдельных мирах, движение/прыжок с вводом 20 Гц, по 15 секунд; метрики каждые 100 мс. Затем все клиенты отключаются. Linux VmHWM дополнительно фиксирует пик процесса, включая промежутки между выборками.
Финальный прогон:
- 1 / 10 / 100 пустующих forks: максимальный RSS 50.28 / 50.35 / 50.50 МиБ.
- 10 клиентов в общем мире: RSS/VmHWM 57.00 МиБ, p95 работы тика 9.54 мс.
- 10 клиентов в 10 мирах: RSS/VmHWM 59.65 МиБ, p95 7.33 мс.
- После отключения: 0 игроков и 0 активных миров; RSS остаётся 59.65 МиБ из-за удерживаемого кэша/аллокатора. Нулевое число активных миров не означает нулевой RSS.
- Ограничение кэша выполнено во всех выборках, исходящие очереди и активные миры измерены. Оба заранее заданных бюджета пройдены.
Полные фазы и исходные выборки. p95 рассчитан по выборке последней работы тика, не по сетевой задержке и не по всей непрерывной последовательности тиков. Это короткий локальный тест движения; нагрузка ванильных механик, тысячи игроков и бесконечные пользовательские миры не включены. С Paper/NeoForge результат не сравнивался.
Отдельный storage benchmark этапа 1 сохраняется в storage-benchmark.json: 256 уникальных секций, кэш 8, 100 forks, обход сверх кэша и независимые edit/reset. После создания forks число immutable blobs осталось 256. Это синтетический профиль ядра с двумя состояниями, отдельный от полного сервера.
Браузер и поставка
Браузерный протокол проверки фиксирует реальные снимки/DOM, каталог, неполные формы, сущности, чистое подключение без полного registry, галерею, повторное соединение и проверенный ресурсный кэш. На этом стенде наблюдались 144 FPS; переносить это число на другие устройства нельзя.
python3 scripts/make_release.py и вариант --binaries создают архив из чистого Git-коммита, добавляют RELEASE.json с SHA-256 каждого файла и проверяют каждый файл при повторном чтении архива. Соседний .sha256 проверяет весь архив. Поставка проверяется повторной распаковкой, offline Cargo-проверкой исходников и запуском извлечённого Linux-бинарного файла с ресурсами из архива. Итоговый журнал упаковки находится рядом с архивами в artifacts/.
Границы приёмки
Основные рубежи A-CORE/SERVER/CLIENT/MCP/SPLEEF подтверждены перечисленными тестами и браузерным осмотром. B-CONTENT, B-PACKAGES, B-INTEROP, B-PERSISTENCE выполнены в документированном профиле. B-MEMORY подтверждён указанной нагрузкой, а не произвольным масштабом. Более широкие пункты исходного ACCEPTANCE (долгий soak, все игровые контексты Minecraft, все варианты внешних миров и реальный Minecraft-плейтест) не объявляются пройденными. Заявления о полной ванильной симуляции, аппаратной отказоустойчивости или экономии относительно Paper отсутствуют.