Изучил архив. Мой вывод: старый `Amnezia limits (old bash)/` можно убирать из проекта, но вместе с ним нужно зачистить документацию и закрыть один процессный пробел: rollback больше не должен ссылаться на `amnezia-tc.service`. По текущему дереву Rust-код уже не зависит от старой bash-папки. `traffic_core` сам делает discovery контейнера/interface/peers, строит egress + IFB ingress `tc` topology, проверяет drift, восстанавливает state, ведёт status. Отдельно есть nftables host firewall, anti-torrent guard, swap reconciler и reboot scheduler. Старая папка сейчас является только историческим reference. Главные места, которые конфликтуют с твоей новой моделью: `tools/build.sh` сейчас принимает `debian|ubuntu`. Это надо заменить на строгий `Debian 13 amd64`. Иначе у тебя документация будет говорить “только Debian 13”, а build-helper фактически разрешит Ubuntu. `tools/README.md` пишет “Debian/Ubuntu с apt”. Нужно заменить на “Debian 13 amd64”. Корневой `README.md` содержит `Amnezia limits (old bash)` в дереве репозитория и отдельный абзац про historical reference. Это надо удалить. Там же строка про upstream Amnezia с Debian 12/13 и Ubuntu 22.04/24.04 лучше убрать полностью или переписать так, чтобы было ясно: AWG2 Harness поддерживает только Debian 13 amd64, независимо от того, что поддерживает Amnezia upstream. `docs/OLD_BASH_BEHAVIOR.md` и `docs/MIGRATION.md` логично удалить. Сейчас они попадут в `.deb`, потому что `tools/build.sh` пакует все `docs/*.md`. `docs/README.md` надо очистить от ссылок на `OLD_BASH_BEHAVIOR.md` и `MIGRATION.md`. `docs/ACCEPTANCE_CHECKLIST.md` содержит rollback через старые bash-файлы и `amnezia-tc.service` / `amnezia-tc-watcher.service`. Это больше нельзя оставлять. Нужен Rust-native rollback: остановить сервисы, отключить host firewall / anti-torrent, удалить AWG2-owned `tc` topology и при необходимости удалить пакет. В `docs/IMPLEMENTATION_SPEC.md`, `docs/CONFIGURATION.md`, `docs/ANTI_TORRENT.md` нужно не удалять смысл, а переименовать происхождение. Например “bash parity” заменить на “class-id stability contract”. Лексикографическую сортировку peer IP я бы оставил: код уже сортирует IP как строки, и это полезно как стабильный ABI для class id. Просто больше не надо объяснять это через старый bash. Минимальный список удаления: ```text Amnezia limits (old bash)/ docs/OLD_BASH_BEHAVIOR.md docs/MIGRATION.md ``` Что я бы добавил до удаления старого rollback: ```text awg2-harness cleanup-limits ``` или хотя бы документированную процедуру: ```bash systemctl disable --now awg2-harness.service systemctl disable --now awg2-reboot-scheduler.service C="$(docker ps --format '{{.Names}}' | grep -E '^(amnezia-awg2|amnezia-awg)$' | head -n1)" PID="$(docker inspect -f '{{.State.Pid}}' "$C")" nsenter -t "$PID" -n -- tc qdisc del dev awg0 root 2>/dev/null || true nsenter -t "$PID" -n -- tc qdisc del dev awg0 ingress 2>/dev/null || true nsenter -t "$PID" -n -- ip link del ifb0 2>/dev/null || true ``` Для Debian 13-only модели я бы сделал три уровня защиты. Первый — `tools/build.sh`: запретить всё кроме Debian 13 amd64. ```bash ensure_supported_host() { if [[ ! -f /etc/os-release ]]; then echo "Unsupported OS: missing /etc/os-release. Only Debian 13 amd64 is supported." exit 1 fi # shellcheck disable=SC1091 source /etc/os-release if [[ "${ID:-}" != "debian" || "${VERSION_ID:-}" != "13" ]]; then echo "Unsupported OS: ${PRETTY_NAME:-unknown}. Only Debian 13 amd64 is supported." exit 1 fi local arch arch="$(dpkg --print-architecture 2>/dev/null || uname -m)" if [[ "$arch" != "amd64" && "$arch" != "x86_64" ]]; then echo "Unsupported arch: $arch. Only amd64 is supported." exit 1 fi } ``` Второй — `.deb preinst`, чтобы пакет не ставился на Ubuntu/Debian 12/Debian 14 случайно. ```sh #!/bin/sh set -e if [ ! -r /etc/os-release ]; then echo "awg2-harness supports only Debian 13 amd64" >&2 exit 1 fi . /etc/os-release if [ "${ID:-}" != "debian" ] || [ "${VERSION_ID:-}" != "13" ]; then echo "awg2-harness supports only Debian 13 amd64; got ${PRETTY_NAME:-unknown}" >&2 exit 1 fi if command -v dpkg >/dev/null 2>&1; then arch="$(dpkg --print-architecture)" if [ "$arch" != "amd64" ]; then echo "awg2-harness supports only amd64; got $arch" >&2 exit 1 fi fi exit 0 ``` Третий — `validate-runtime` в Rust: проверять `/etc/os-release` и arch, чтобы ручной запуск бинаря вне `.deb` тоже явно падал. Ещё один важный несостык: документация использует версию `0.1.6`, а `traffic_core/Cargo.toml` сейчас `0.1.4`. Если релиз реально `0.1.6`, лучше поднять crate version, а не жить на постоянном `--version` override. Версия реально 0.1.6