first cycle lab release

This commit is contained in:
2026-10-04 00:30:09 +07:00
parent 85f6897365
commit d134daafd8
92 changed files with 5623 additions and 9 deletions
+118
View File
@@ -0,0 +1,118 @@
# 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.