# HY2XS 1.0.0-rc5 — итоговый отчёт о приёмке **Дата прогона:** 2026-09-15 **Вердикт:** `PASS / PRODUCTION E2E VALIDATED` **Статус выпуска:** `READY FOR 1.0.0` Этот отчёт фиксирует фактическую финальную приёмку RC5: release build, повторную проверку опубликованного артефакта, установку на чистый Debian 13, проверки после перезагрузки, Admin/UI, диагностику и реальный внешний dataplane официальным клиентом Hysteria 2.12.2. Проверенный кандидат: ```text Product: HY2XS Version: 1.0.0-rc5 Source commit: b7e478f0143846633d1261ca0bcd220736d28f44 Build ID: rc5-final-fi-20260908T003829Z Artifact: hy2xs-install-1.0.0.tar.gz Artifact size: 50 785 975 bytes SHA-256: d35cf469d8e1e3b5c1e79cb94329c1b19d1afbd7ade771498d2fb8caf5cd746a Target: Debian 13 / amd64 Hysteria: v2.12.2 ``` > Публичный IPv4 тестового хоста в отчёте заменён на `198.51.100.20` > (RFC 5737, документационный диапазон). Домен и порты оставлены: без них > конфигурация прогона была бы неоднозначной. Секреты, credentials и клиентские > URI в отчёт не перенесены. --- ## 1. Build acceptance Production builder успешно завершил полный release pipeline из чистого рабочего дерева. Подтверждено: - тесты оркестратора — `PASS`; - frontend contract tests — `PASS`; - runtime-тесты RU/EN словарей `vue-i18n` — `PASS`; - frontend typecheck — `PASS`; - production build frontend — `PASS`; - Go tests — `PASS`; - Go race checks — `PASS`; - `govulncheck` — `PASS`; - `pnpm audit` с порогом high+ — `PASS`; - upstream SHA-256 Hysteria — `PASS`; - совместимость Gecko — `PASS`; - совместимость Salamander — `PASS`; - полные release acceptance gates — `PASS`; - внутренние контрольные суммы пакета — `PASS`; - рабочее дерево источника после сборки осталось чистым. ## 2. Приёмка опубликованного артефакта Для clean-host прогона использован опубликованный release artifact, повторно скачанный из Gitea. На target он не пересобирался. Повторно проверены: - имя и размер архива; - внешний SHA-256 архива; - package provenance; - Build ID; - source commit; - внутренние контрольные суммы; - clean-host preflight. Все проверки идентичности сошлись с release identity в начале отчёта. ## 3. Чистый хост и установка RC5 установлен штатным `install.sh` на чистый Debian 13 amd64. До установки подтверждены актуальное состояние ОС и kernel, отсутствие ожидающих package upgrades, SSH на TCP/2323 с key-only root authentication и отключённой password authentication. Публичный IPv4 хоста и DNS endpoint совпадали. Admin forwarding был разрешён только к `127.0.0.1:8080`. Результат установки: ```text install.sh exit code: 0 ``` В ходе штатной установки успешно проверены: - установка Hysteria 2.12.2; - upstream SHA-256 Hysteria; - генерация production-конфигурации; - systemd units; - nftables takeover; - staged firewall apply; - firewall rollback guard; - runtime Hysteria; - runtime HY2XS admin; - отрицательный Admin login: `invalid_credentials`, токен отсутствует; - положительный Admin login: Bearer token получен; - effective firewall соответствует generated configuration; - effective Hysteria configuration соответствует production profile. После успешного smoke rollback guard снят, install state переведён в durable состояние `installed`. ## 4. Admin/UI и управление пирами Admin UI был доступен только через SSH tunnel на `127.0.0.1:8080`. Фактически подтверждены: - вход через реальный браузер; - работа dashboard; - состояние Hysteria2 отображается как active; - доступность Traffic Stats API; - отображение системных журналов; - отображение журналов Hysteria; - создание пира; - изменение состояния пира; - получение client URI/config. В runtime отдельно проверены исправления RC5: - diagnostic `vue-i18n Invalid linked format` отсутствует; - форма пира корректно показывает допустимую пунктуацию; - Element Plus Radio больше не использует deprecated `label` as value; - выбор диапазона dashboard работает штатно. ## 5. Состояние после перезагрузки После reboot подтверждено: ```text hysteria-server.service enabled / active hy2xs-admin.service enabled / active nftables.service enabled / active runtime_state running install state installed firewall state valid rollback guard quiescent operation in progress none doctor PASS ``` В журналах не обнаружены runtime-сигналы `panic`, `fatal`, `segfault` или HTTP 500. Runtime listeners: | Назначение | Адрес | | --- | --- | | Hysteria | публичный UDP endpoint | | SSH | TCP/2323 | | HY2XS admin | `127.0.0.1:8080` | | Traffic Stats API | `127.0.0.1:36712` | Admin и Traffic Stats API остались loopback-only. ## 6. Diagnostics acceptance Diagnostics bundle успешно сформирован в trusted storage. Подтверждено: - diagnostics directory принадлежит root; - режим архива — `0600`; - владелец архива — `root:root`; - временный workspace удаляется; - реальные secret values в bundle отсутствуют; - Admin credentials заменены на ``; - Hysteria Traffic Stats secret заменён на ``; - Gecko/obfs password заменён на ``; - `HY2XS_FORCE_PASSWORD_CHANGE=false` остаётся видимым как non-secret flag. Итог diagnostics contract: `PASS`. ## 7. Production E2E официальным клиентом Финальный независимый dataplane E2E выполнен официальным клиентом Hysteria 2.12.2. Production deployment: ```text Host: se.api.withen.pro IPv4: 198.51.100.20 (обезличен) OS: Debian 13 / amd64 Hysteria: v2.12.2 HY2XS: 1.0.0-rc5 Public Hysteria endpoint: UDP/2053 SSH: TCP/2323 ACME HTTP-01: TCP/80 Admin: 127.0.0.1:8080 Traffic Stats API: 127.0.0.1:36712 Firewall: takeover / policy drop Obfuscation: Gecko ``` Созданный в HY2XS пир успешно использован официальным клиентом Hysteria. Подтверждено: - соединение с `se.api.withen.pro:2053` — `PASS`; - QUIC/Hysteria handshake — `PASS`; - `udpEnabled=true`; - SOCKS5 tunnel — `PASS`; - HTTPS через tunnel — `PASS`; - внешний IPv4 через tunnel совпал с публичным IPv4 HY2XS-хоста; - packet capture: 136 packets; - dropped packets: 0; - client → server UDP packets: 70; - server → client UDP packets: 66. Тем самым подтверждена полная цепочка: ```text client → DNS/TLS/SNI → UDP endpoint → Gecko → Hysteria2 → HY2XS peer authentication → Internet egress ``` ## 8. Дополнительная downstream-проверка Отдельный production-прогон через `vpn-egressctl 0.2.0` и sing-box 1.14.0 не является приёмкой этих внешних компонентов в репозитории HY2XS. Он фиксируется здесь как дополнительное доказательство совместимости HY2XS endpoint с gateway/TUN-сценарием и реальным клиентом за gateway. Проверенная конфигурация: ```text vpn-egressctl: 0.2.0 sing-box: 1.14.0 Server Hysteria: 2.12.2 Obfuscation: Gecko Endpoint: se.api.withen.pro:2053 Gateway TUN: tun-sb0 TUN address: 172.19.0.1/30 Config SHA-256: 0d888e7793bd979d212b613542070ce9349a625ddace2a0727776072b66c96ae ``` На чистом first apply успешно прошли `check`, генерация конфигурации, первый `sync` и активация runtime. `sing-box.service` и `vpn-egress-guard.service` были active, `tun-sb0` поднят, DNS и HTTPS через Hysteria outbound работали. Повторный `sync` завершился no-op с `changed=false`, без config/source drift и без изменения SHA-256. Независимый клиент `10.30.0.20/24` за `br_vpn` получил DNS и HTTPS через следующую цепочку: ```text 10.30.0.20 → br_vpn → vpn-egress-gw / eth1 → tun-sb0 → sing-box 1.14.0 → Hysteria2 / Gecko → se.api.withen.pro:2053 → Internet ``` Внешний IPv4 gateway и клиента совпал с публичным IPv4 HY2XS-хоста. Fail-closed / anti-leak проверка также прошла: после остановки sing-box сервис стал inactive, guard остался active, прямой Internet access клиента отсутствовал (`curl` завершился с `rc=7`), обход через обычный WAN/`eth0` не появился. После возврата sing-box доступ восстановился через тот же HY2XS endpoint. Состояния `last_good_available=false` и `last_good_valid=false` после чистого first apply ожидаемы: предыдущей managed-good generation для rollback ещё не существовало, а последующий idempotent sync был no-op. После проверки временные namespace/veth, диагностический бинарник Hysteria, временные configs, logs и pcap-файлы удалены. Production URI, config и runtime state сохранены. ## 9. Граница вывода по предыдущим endpoint failures Ранее неуспешные E2E-прогоны через UFO endpoint не доказали дефект `vpn-egressctl 0.2.0`, renderer или sing-box 1.14.0. Контрольная приёмка на текущем endpoint прошла без изменения основного client/gateway stack: официальный Hysteria client E2E, first apply, gateway HTTPS, idempotent sync, клиент за `br_vpn` и fail-closed / anti-leak дали `PASS`. Это позволяет относить прежнее наблюдение к конкретному endpoint/environment path либо к фактору вне доказанного runtime-контракта. Точная первопричина UFO endpoint в рамках этой приёмки не установлена; приписывать эпизод как подтверждённый дефект HY2XS, `vpn-egressctl`, renderer или sing-box нельзя. ## 10. Итог ```text BUILD ACCEPTED PUBLISHED ARTIFACT ACCEPTED CLEAN INSTALL ACCEPTED POST-REBOOT ACCEPTED ADMIN/UI ACCEPTED PEER MANAGEMENT ACCEPTED DIAGNOSTICS ACCEPTED OFFICIAL CLIENT E2E ACCEPTED DOWNSTREAM GATEWAY E2E ACCEPTED ANTI-LEAK ACCEPTED RUNTIME STATUS ACCEPTED RELEASE STATUS READY FOR 1.0.0 ``` HY2XS 1.0.0-rc5 прошёл production build acceptance, проверку неизменности артефакта, чистую установку, install smoke, runtime Admin/UI, управление пирами, firewall acceptance, reboot persistence, diagnostics security и реальный E2E официальным клиентом Hysteria. **Финальный статус: `PASS / PRODUCTION E2E VALIDATED`.** ## 11. Требование к stable promotion Stable `1.0.0` должен продвигать без пересборки ровно тот immutable artifact, который прошёл этот прогон: ```text Tag: 1.0.0 Source commit: b7e478f0143846633d1261ca0bcd220736d28f44 Artifact: hy2xs-install-1.0.0.tar.gz SHA-256: d35cf469d8e1e3b5c1e79cb94329c1b19d1afbd7ade771498d2fb8caf5cd746a Size: 50 785 975 bytes ``` Документационный коммит, добавляющий настоящий отчёт в `main`, намеренно идёт после source commit кандидата и не меняет release identity. Тег `1.0.0` должен указывать на source commit выше, а не на последующий docs-only commit.