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
+40 -8
View File
@@ -6,7 +6,9 @@
Платформа должна быть оптимизирована под:
- Prism Launcher как клиентский лаунчер.
- пользовательские модпаки на NeoForge и Forge;
- запуск без обязательного Microsoft/Mojang-аккаунта и без онлайн-проверки сессии;
- Prism Launcher как первоначальный клиентский лаунчер.
- Docker Compose как серверный runtime.
- удалённый доступ к серверу по SSH.
- Git как источник истины для описания сборки и конфигурации.
@@ -28,6 +30,8 @@
Не разрабатывать собственный resolver зависимостей Minecraft-модов без реальной необходимости.
Авторизация аккаунтов не является задачей платформы. Целевой сервер использует online-mode=false и enforce-secure-profile=false; для Prism допускается offline-аккаунт/Launch Offline. NeoForge и Forge — целевые loader; проверка Fabric не заменяет их integration spike.
---
# 2. Основная архитектура
@@ -447,6 +451,8 @@ services:
EULA: "${MC_EULA:?Set MC_EULA after accepting the Minecraft EULA}"
MEMORY: "${MC_MEMORY:-8G}"
TYPE: MODRINTH
ONLINE_MODE: "false"
ENFORCE_SECURE_PROFILE: "false"
MODRINTH_MODPACK: /modpack/friday-minecraft-0.4.0.mrpack
volumes:
- ${MC_ROOT:?Set absolute server root}/runtime:/data
@@ -548,6 +554,8 @@ runtime/
Manifest содержит управляемые пути. Удалять только файлы прежнего релиза; неизвестные файлы не удалять молча. Для конфигов, изменяемых самим runtime, определить в spike политику replace, seed-only или preserve. Проверить defaultconfigs и datapacks на существующем мире.
Не определять тип или владельца конфига только по директории: в проверяемом NeoForge 1.21.1 серверные конфиги создаются в `runtime/config/`. Путь, поддержку `defaultconfigs/` и per-world overrides проверять для закреплённого loader; результаты одной ветки не переносить автоматически на Forge.
Не коммитить runtime-generated файлы автоматически.
В будущем добавить явную команду для переноса полезных runtime-изменений обратно в source.
@@ -949,7 +957,8 @@ mcpack doctor --remote
Задачи:
- создать минимальный packwiz pack;
- добавить один Modrinth-мод;
- выбрать и закрепить NeoForge или Forge и совместимую версию Minecraft;
- добавить минимальный совместимый набор Modrinth-модов, включая gameplay-мод и client-only мод;
- экспортировать `.mrpack`;
- импортировать `.mrpack` в Prism;
- запустить совместимый modded server через `itzg/minecraft-server`;
@@ -969,19 +978,21 @@ mcpack doctor --remote
docs/spike-results.md
```
Не писать основной CLI до подтверждения integration path. Минимальные скрипты, Compose и каркас для spike допустимы. Prism import и подключение требуют реальной GUI-сессии и учётной записи игрока: при их отсутствии отметить проверки pending, а не passed.
Не писать основной CLI до подтверждения integration path. Минимальные скрипты, Compose и каркас для spike допустимы. Prism import и подключение требуют реальной GUI-сессии; проверять offline-аккаунт/Launch Offline с сервером online-mode=false. При отсутствии GUI отметить проверки pending, а не passed.
Acceptance criteria:
- Prism импортирует сгенерированный pack;
- сервер успешно запускается;
- modded client подключается к серверу;
- modded client с целевым loader подключается к серверу без онлайн-проверки аккаунта;
- runtime-файлы существуют как обычные host-файлы.
---
## Phase 1 — Оформление каркаса после spike
Статус: завершена для NeoForge 1.21.1. Каркас и проверка чистого локального clone описаны в `docs/phase1-results.md`. Platform manifest подключается к командам в Phase 2.
Создать:
- структуру репозитория;
@@ -1006,6 +1017,8 @@ docker compose config
## Phase 2 — Build command
Статус: завершена. `./mcpack build` читает platform config и создаёт полный development release 0.0.4; `--release` требует чистого Git worktree. Проверки и текущие ограничения описаны в `docs/phase2-results.md`, контракт — в `docs/build.md`.
Реализовать:
```bash
@@ -1043,6 +1056,8 @@ dist/<name>-<version>/manifest.json
## Phase 3 — Управление модами
Статус: завершена. Mod wrappers сохраняют вывод/prompts/exit code packwiz. Реальные add/remove/update/update --all и четыре full build проверены в тестовом clone; результаты — `docs/phase3-results.md`, контракт — `docs/mods.md`.
Предоставить тонкие wrappers:
```bash
@@ -1064,6 +1079,8 @@ Acceptance criteria:
## Phase 4 — Server runtime
Статус: завершена. Full release 0.0.4 проверен на пустом runtime через `scripts/server.sh`: pinned Minecraft/NeoForge/image, host bind mounts, restart/recreate без потери мира. Основной Phase 0 сервер не менялся. Результаты — `docs/phase4-results.md`, контракт — `docs/runtime.md`.
Создать Docker runtime, который:
- использует pinned Minecraft version;
@@ -1084,6 +1101,8 @@ docker compose up -d
## Phase 5 — Backups и восстановление
Статус: завершена. `./mcpack backup` сохраняет весь остановленный runtime и исходный полный релиз под общей lifecycle lock; `restore` проверяет snapshot и восстанавливает только в новый root. Ошибка backup блокирует apply callback. Реальный backup/ошибка tar/запуск восстановленного NeoForge проверены на отдельном сервере; результаты — `docs/phase5-results.md`, инструкция — `docs/backups.md`.
До remote deployment реализовать раздел 16: блокировку, остановку, backup и проверенную процедуру восстановления.
Acceptance criteria: ошибка backup блокирует применение; snapshot восстанавливается в отдельный каталог; данные модов вне world сохраняются.
@@ -1092,12 +1111,16 @@ Acceptance criteria: ошибка backup блокирует применение
## Phase 6 — Healthcheck
Статус: завершена. `scripts/server.sh up/start/restart --wait` и `health` проверяют штатный mc-health, свежий Minecraft status query и окно стабильности. Реальные timeout, crash с exit 137 и restart loop проверены на отдельных test roots; ошибки возвращают non-zero с report/logs и recovery state. Результаты — `docs/phase6-results.md`, контракт — `docs/health.md`.
Реализовать раздел 18. Успешный старт возвращает 0; crash, restart loop и timeout — non-zero с указанием logs.
---
## Phase 7 — SSH Deployment
Статус: завершена для проверенного NeoForge 1.21.1. `mcpack deploy` использует SSH/rsync, общую host lock, immutable checksums, проверку ручных конфликтов, backup-before-apply и healthcheck перед active/previous pointers. Полный update flow проверен на локальном SSH-стенде; clean release 0.0.4 реально установлен и healthy на crab@192.168.1.61:2228 в отдельном root. Повторный deploy — no-op. Результаты — `docs/phase7-results.md`, контракт — `docs/deploy.md`.
Реализовать полный flow раздела 12 с готовыми backup и healthcheck.
Acceptance criteria:
@@ -1114,7 +1137,8 @@ Acceptance criteria:
## Phase 8 — Rollback
Реализовать rollback предыдущего release.
Статус: завершена. Реализованы pack-only и snapshot rollback по SSH без build.
Результаты и ограничения: [docs/phase8-results.md](docs/phase8-results.md).
Acceptance criteria:
@@ -1124,13 +1148,21 @@ mcpack rollback
без указания режима ничего не меняет. Явный rollback использует сохранённый полный релиз без повторного build; pack-only требует подтверждения совместимости.
Восстановление persistent snapshot может оставаться ручным, но процедура обязательна и проверяется на практике.
Восстановление persistent snapshot автоматизировано и проверено на изолированном
SSH/Docker-стенде. Оба режима требуют явного подтверждения и проверенного backup
текущего состояния; pointers меняются после health. Ручной recovery после ошибки
описан в [docs/rollback.md](docs/rollback.md).
---
## Phase 9 — Release workflow
Реализовать:
Статус: завершена. Candidate build, version commit, чистый финальный build,
checksums и annotated tag проверены с настоящим packwiz в отдельном Git clone.
Результаты: [docs/phase9-results.md](docs/phase9-results.md).
Workflow и recovery: [docs/releases.md](docs/releases.md).
Реализовано:
```bash
mcpack release <version>
@@ -1579,7 +1611,7 @@ mcpack logs
- client artifact импортируется в Prism;
- сервер запускается из того же определения сборки;
- клиент может подключиться;
- клиент на NeoForge/Forge может подключиться без Microsoft/Mojang-аккаунта;
- моды версионируются через packwiz;
- server files хранятся как обычные директории на host;
- world переживает recreation контейнера;