first cycle lab release
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user