# Phase 4: server runtime Phase 4 завершена для NeoForge 21.1.252 / Minecraft 1.21.1. Full release 0.0.4 реально запущен с пустой директорией данных через `scripts/server.sh`. ## Реальная Docker-проверка - Server root: `.tools/phase4-server`, project: `minecraft-lab-phase4`. - Настройки: EULA=TRUE по ранее полученному принятию, UID/GID=1000:1000, memory=2G, IPv4 loopback port=25566. - Первый `up -d --wait --wait-timeout 600` завершился healthy. Лог подтвердил создание нового мира, Minecraft 1.21.1, NeoForge 21.1.252, Backpacks 3.26.7 и Core 1.5.5. Mouse Tweaks отсутствовал в серверных JAR. - Docker inspect подтвердил обычные абсолютные bind mounts: host runtime → `/data` rw, release → `/modpacks` ro, server/config → `/config` ro. - `world/level.dat` принадлежит 1000:1000. Pack загружен из `.mrpack`, server override marker=`server-override-v1`, `online-mode=false` и `enforce-secure-profile=false` подтверждены. - Restart того же контейнера завершился healthy. - После остановки и `create --force-recreate` все 23 файла мира совпали по путям/SHA256 до нового запуска. Неуправляемый config marker сохранился. - Вновь запущенный контейнер healthy; mc-health отвечает Minecraft 1.21.1. - Финальная версия wrapper дополнительно проверена реальным up/exec/down после добавления проверки принадлежности Compose project. - Тестовый контейнер/network удалены через down, runtime и binding сохранены. Основной сервер на 25565 не пересоздавался и остался healthy. Свидетельства: `.tools/phase4-evidence/first-start.log`, `mounts.json`, `before-recreate-world.json`, `recreate-verification.txt`, `recreated-start.log`. Test root остаётся пригодным для последующих проверок. ## Автоматические проверки `npm test`: 25 тестов. Новые runtime tests используют controlled Compose/Docker substitutes и проверяют integrity/coverage, EULA/UID/GID, immutable binding, смену release/project, защиту существующего мира, failed startup/exit code, operation lock, offline/bind contract, paths и конфликт project другого root. Build/mod regression tests также проходят. Реальная Docker-проверка выше подтверждает integration, которую substitutes сами по себе не доказывают. Bash/Node syntax и `git diff --check` пройдены. Backup, миграция существующего мира, remote deployment и расширенная диагностика healthcheck не реализуются этим этапом. Контракт и команды — [runtime.md](runtime.md).