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

62 lines
4.6 KiB
Markdown
Raw Permalink 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 6: healthcheck и диагностика startup
Phase 6 завершена: ожидание готовности проверяет pinned image healthcheck,
Minecraft status query и стабильность контейнера; отказ возвращает non-zero
и пути к сохранённым logs/report. Контракт — [health.md](health.md).
## Реальная Docker-проверка 2026-10-03
Исходный snapshot Phase 5 восстановлен в отдельный `.tools/phase6-server`.
Использован сохранённый полный NeoForge release 0.0.4, Minecraft 1.21.1,
NeoForge 21.1.252, pinned image, host UID/GID 1000:1000 и port 25566.
Project — свободный после Phase 5 `minecraft-lab-phase4`.
- `up --wait --wait-timeout 2 --stable-seconds 1` на холодном JVM старте
вернул timeout/non-zero через 2000 ms ожидания. Container оставлен для
диагностики; runtime/binding сохранились.
- `health --wait-timeout 120 --stable-seconds 3` затем вернул 0 после
Docker healthy и стабильных свежих Minecraft queries. TCP не использован
как достаточное свидетельство готовности.
- Только тестовый контейнер аварийно завершён `docker kill --signal KILL`.
Следующий health вернул crash/non-zero, report сохранил exit code 137
и OOMKilled=false; elapsed около 230 ms.
- Повторный `up --wait --wait-timeout 120 --stable-seconds 3` поднял тот же
NeoForge release и подтвердил готовность. Исходный модпак не заменялся.
- Для restart loop создан отдельный `.tools/phase6-loop-server` и намеренно
повреждённая Compose fixture: pinned image, entrypoint с exit 42 и
restart=on-failure:5. Это тестовая копия полного релиза с отдельной версией
`phase6-failure-fixture` в manifest и пересчитанными checksums;
опубликованный immutable release 0.0.4 не менялся. Fixture не доказывает
загрузку NeoForge: её назначение — реальный Docker restart loop.
- Docker inspect подтвердил RestartCount=1 до проверки. Health затем
вернул restart-loop/non-zero за около 1476 ms с RestartCount=2 и новым
StartedAt, сохранив logs с intentional failure marker.
- Для всех ошибок есть JSON report и файл последних logs, binding сохранился,
lifecycle lock освободилась, automatic rollback не выполнялся.
- Test containers/network удалены через down. Их runtime/release/diagnostics
оставлены для просмотра. Primary Phase 0 сервер на 25565 не останавливался,
не пересоздавался и остался healthy.
Сценарий: `scripts/verify-phase6.sh`. Он требует Phase 5 snapshot и новых
fixture roots, использует только копии test runtime. Свидетельства:
`.tools/phase6-evidence/{integration.log,timeout.txt,healthy.txt,healthy-start.log,
crash.txt,recovered.txt,restart-loop.txt,loop-docker-state.txt,assertions.txt,
primary-server-status.txt}`. Подробные reports/logs находятся в diagnostics
соответствующих test roots.
## Автоматические проверки
`npm test`: 46 тестов. Deterministic health tests проверяют успешные
последовательные queries, провал протокола при running/healthy state,
starting/unhealthy, сброс окна после transient failure, crash/OOM/paused,
RestartCount/StartedAt/container identity, missing container/healthcheck,
inspection error, deadlines включая launch и слишком поздний query, строгие
флаги и диагностику Compose failure с сохранением binding/lock cleanup.
Regression tests Phase 2–5 проходят; backup resume теперь действительно
ожидает стабильную готовность. Bash/Node syntax и `git diff --check` пройдены.
SSH transport, switching active-release, automatic recovery/rollback и
continuous watchdog не добавляются в эту фазу. Следующая Phase 7 — SSH deployment
с уже готовыми backup gate и healthcheck.