119 lines
9.7 KiB
Markdown
119 lines
9.7 KiB
Markdown
# 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.
|