docs(#21): VERIFICATION-21 — контракт кодов через make зафиксирован в §6.1, поправка §6.3

Ревью PR #53 (раунд 2) требовало явной фиксации «make → 2, контракт действует на
уровне контейнера» и снятия неверного утверждения про прокидывание
AWG_NS_EXEC_MODE. Прогоны раунда 3 добавляются отдельным коммитом.

Refs #21
Refs #56
This commit is contained in:
2026-10-28 21:58:23 +03:00
parent 94d3a28adf
commit 9d2222455a
+11 -1
View File
@@ -5,6 +5,8 @@
## 0. Стенд запускает именно то, что в ветке
Актуальные блобы для раунда 3 — в §7.3 (эта таблица фиксирует состояние раунда 2).
Каталог стенда `(/opt/awg-dash-dev/repo)` не является git-чекаутом (`git clone` по HTTP обрывается
на этом Gitea — `fetch-pack: invalid index-pack output`), поэтому файлы сверены побайтово
через git-blob-SHA с деревом HEAD:
@@ -163,6 +165,12 @@ make test-netns # netns-харнесс сносит топологию с
Коды возврата приведены к контракту `0/1/3/4` (`run.sh`, `topology.sh`): неожиданный код
утилиты (255) нормализуется в `4` («ошибка стенда»), нет прав — `3`, упавшие тесты — `1`.
**Контракт действует на уровне контейнера, а не через make.** GNU make возвращает `2`
на любой упавший рецепт, поэтому `make test-netns-ci` при коде контейнера `3` или `4`
сам отдаёт `2` (в выводе остаётся только `make: *** [Makefile:…] Error 4`). Для CI #17
добавлена точка входа без make — `bash tests/netns/ci.sh`: она запускает тот же контейнер
(`docker compose … run --rm -T netns`) и возвращает его код как есть. Проверено в §7.2.
### 6.2 Реальные прогоны
| прогон | команда | результат |
@@ -193,7 +201,9 @@ make test-netns # netns-харнесс сносит топологию с
каждая инварианта AC #21 ломается по отдельности (порт, тома, healthcheck, NET_ADMIN,
`/dev/net/tun`, `ip_forward`, privileged netns-сервис, DEV-ONLY-метка, `--require-dockerfile`).
* `deploy/api_stub.py` — `make_server()` выделен из `main()` (тесты поднимают сервер на порту 0).
* `make test-deploy` — гейт покрытия; `make test-netns-ci` прокидывает `AWG_NS_EXEC_MODE`.
* `make test-deploy` — гейт покрытия. Утверждение раунда 2 «`make test-netns-ci` прокидывает
`AWG_NS_EXEC_MODE`» было **неверным**: make-алиас `NETNS_EXEC_MODE ?= auto` перекрывал
переменную. Исправлено в §7.1 (проверено прогоном в §7.2).
* `topology.sh`: снос топологии удаляет namespace'ы безусловно и до 5 раз проверяет
результат — в контейнере `ip netns delete` иногда «терялся» и `run.sh` отдавал код 4
на зелёных тестах (флак 1 из 5 прогонов, после правки — 5/5 зелёных).