Files
minecraft-lab/docs/spike-results.md
T
2026-10-04 00:30:09 +07:00

119 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 0: NeoForge, Minecraft 1.21.1
Целевая сборка работает без онлайн-проверки аккаунта. Пользователь выбрал
NeoForge на Minecraft 1.21.1; EULA принята для локального эксперимента.
Phase 0 завершена для NeoForge 21.1.252 на Minecraft 1.21.1. Импорт и вход
клиента пользователь подтвердил; оставшиеся серверные сценарии проверены
на том же loader. Это не подтверждает поддержку Forge.
## Закреплённая сборка
- Minecraft 1.21.1, NeoForge 21.1.252.
- Sophisticated Backpacks 3.26.7.2182 и Sophisticated Core 1.5.5.2363: обе стороны.
- Mouse Tweaks 2.26.1: только клиент.
- Source: `pack/`; версии и download hashes находятся в packwiz metadata.
- Инструменты и digest Docker image закреплены в `toolchain.lock.env`.
- Артефакт: `dist/minecraft-lab-neoforge-spike-0.0.1/minecraft-lab-neoforge-spike-0.0.1.mrpack`.
- SHA256: `67d6802ae30a1d42413dc44d76f3cc7f0a77885dbbea5329ab9c2e288bda2d4e`.
## Подтверждённые результаты
`scripts/spike-build.sh` экспортировал `.mrpack`. В `modrinth.index.json`
указаны зависимости Minecraft 1.21.1 и NeoForge 21.1.252; для Mouse Tweaks
записано `server: unsupported`.
`scripts/spike-server.sh up -d --wait --wait-timeout 600` успешно запустил
сервер. Первый запуск закончился таймаутом загрузки Maven-зависимостей;
повторный запуск того же артефакта завершился успешно. Это внешняя ошибка
загрузки, воспроизводимость установки без сети пока не подтверждена.
Сервер стал healthy; `mc-health` ответил с версией Minecraft 1.21.1.
Лог подтвердил NeoForge 21.1.252 и загрузку Backpacks/Core. В `runtime/mods/`
ровно два соответствующих JAR: клиентский Mouse Tweaks исключён.
В `runtime/server.properties` подтверждены `online-mode=false` и
`enforce-secure-profile=false`. Порт привязан к `127.0.0.1:25565`.
Windows TCP-проверка `127.0.0.1:25565` успешна. При первой попытке клиент
разрешил `localhost` в IPv6 `::1` и получил Connection refused; для текущей
публикации порта подключаться к `127.0.0.1:25565`.
После смены адреса пользователь подтвердил успешный вход в мир. Импорт в
Prism, запуск клиента с NeoForge и подключение без проверки аккаунта пройдены.
Мир, моды и сгенерированные конфиги доступны как обычные файлы в bind-mounted
`runtime/`.
Сгенерированные серверные конфиги NeoForge и Backpacks находятся в
`runtime/config/`, включая `neoforge-server.toml` и
`sophisticatedbackpacks-server.toml`. Нельзя предполагать, что серверный
конфиг обязательно создаётся в `world/serverconfig/`; политика конфигов
должна учитывать выбранную версию loader.
Локальные свидетельства (не коммитятся):
- `.tools/neoforge-evidence/mrpack-index.json`;
- `.tools/neoforge-evidence/first-start.log`;
- `.tools/neoforge-evidence/healthy-start.log`.
## Оставшиеся серверные сценарии: пройдены
Перед тестами сервер остановлен. Полный `runtime/` сохранён в
`backups/phase0-neoforge-baseline.tar.zst`; архив проверен чтением и SHA256.
Backup содержит мир после подтверждённого пользовательского входа.
Часть файлов мира принадлежит UID контейнера и недоступна в sandbox;
backup и чтение этих файлов выполнены с разрешённым повышением доступа.
Ошибка чтения файла должна прерывать backup, а не оставлять частичный архив
как успешный результат.
| Проверка | Результат |
| --- | --- |
| Recreate | `create --force-recreate` не изменил SHA256 `world/level.dat` до запуска; затем сервер healthy. |
| Смена версии | Релиз 0.0.2 заменил Backpacks 3.26.7.2182 на 3.26.6.2174; старый JAR отсутствовал, новая версия загружена. Это проверка замены версии, включая downgrade. |
| Удаление модов | Релиз 0.0.3 без модов запустился healthy; `runtime/mods/` пуст. |
| Pack config | Ручной `manual-runtime-edit` в управляемом `config/spike-marker.txt` заменён на `neoforge-pack-v2` при смене релиза. |
| Server override | С дополнительным Compose marker стал `server-override-v1`, несмотря на pack default и ручную правку. |
| Неуправляемые файлы | `config/unmanaged-probe.txt` сохранил `preserve-me` после смены релиза и удаления модов. |
| Defaultconfigs | Шаблон `removeErroringEntities=true` не заменил существующий `config/neoforge-server.toml` со значением false. После переноса текущего конфига вне runtime и запуска 0.0.2 на том же мире новый конфиг получил true. |
| Datapack | Добавленный в 0.0.2 `world/datapacks/phase0` выполнил load-функцию на существующем мире: в логе есть `[Phase0] datapack-v2-loaded`. В 0.0.3 управляемые файлы datapack удалены. |
| Startup failure | Отсутствующий `missing-neoforge-phase0.mrpack` привёл к exit 1; SHA256 остановленного `level.dat` до/после совпал. |
| Restore | Backup извлечён в отдельную директорию. Все 28 файлов мира совпали по путям и SHA256 с архивом до запуска; восстановленный `level.dat` совпал с исходным. Возвращён релиз 0.0.1, сервер healthy. |
Тестовые варианты воспроизводятся `bash scripts/spike-neoforge-variants.sh`
из корня на чистом checkout после bootstrap. Скрипт не меняет canonical
`pack/`, не запускает сервер и отказывается перезаписывать готовые релизы.
Артефакты проверки:
- 0.0.2 SHA256: `4f26f91f7b6e2db80caf522d370db37607ab46de5951e9cd8178f709b9e12ffd`.
- 0.0.3 SHA256: `ba0e2476ac7f095f13f5feed73584f38042f93457563dd00920c0211422494a2`.
- `.tools/neoforge-evidence/v2-start.log`, `v2-override-start.log`, `v3-start.log`.
- `.tools/neoforge-evidence/config-results.txt`, `controlled-failure.log`.
- `.tools/neoforge-evidence/baseline-level.sha256`, `before-failure-level.sha256`.
- `.tools/neoforge-evidence/restored-world-manifest.json`, `restore-verification.txt`, `restored-start.log`.
После тестов сохранённое исходное состояние вновь находится в `runtime/`,
промежуточное — в `.tools/neoforge-runtime-after-tests`. Активен 0.0.1 с
Backpacks 3.26.7.2182 и Core 1.5.5.2363, marker `neoforge-pack-v1`,
`online-mode=false`, `enforce-secure-profile=false`. Подключение:
`127.0.0.1:25565`; повторный импорт instance не требуется.
## Выводы для следующих фаз
Управляемые pack-конфиги заменяются при смене релиза, поэтому ручные правки
не являются устойчивым источником настроек. Серверные overrides должны быть
явными. Defaultconfigs в проверенной версии служат seed, а не механизмом
обновления существующего конфига. Runtime-generated конфиги сохраняются,
пока явно не включены в управляемые пути.
Политики replace/seed-only/preserve и ownership manifest пока не реализованы
в CLI: spike подтвердил поведение закреплённых компонентов. Контролируемая
ошибка проверена до старта игры; сохранность мира при произвольном сбое
мода или миграции формата мира этим тестом не подтверждается.
## Предварительный Fabric-эксперимент
Результаты предыдущего эксперимента сохранены в `fabric-spike-results.md`,
source — в `examples/fabric-spike/`. Они не заменяют проверки NeoForge/Forge.
Перед сменой loader Fabric-сервер остановлен, создан и проверен архив
`backups/phase0-fabric-before-neoforge.tar.zst`; старый runtime сохранён в
`.tools/fabric-runtime`. NeoForge запущен с новым миром.
Forge требует отдельного integration spike.