diff --git a/CHANGELOG.md b/CHANGELOG.md index fa66075..b88b894 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,23 @@ ## [Unreleased] +### Документация — итоговая приёмка v1.0.0 + +- Зафиксирован финальный production-прогон `1.0.0-rc5`: build, повторная + проверка опубликованного артефакта, чистая установка на Debian 13, reboot, + Admin/UI, управление пирами, diagnostics и внешний E2E официальным клиентом + Hysteria 2.12.2 дали `PASS`. +- Отдельно записан downstream gateway/TUN-прогон через `vpn-egressctl 0.2.0` + и sing-box 1.14.0, включая реального клиента за `br_vpn`, idempotent sync и + fail-closed / anti-leak проверку. +- Release identity привязана к source commit `b7e478f0143846633d1261ca0bcd220736d28f44`, + Build ID `rc5-final-fi-20260908T003829Z` и SHA-256 артефакта + `d35cf469d8e1e3b5c1e79cb94329c1b19d1afbd7ade771498d2fb8caf5cd746a`. + Stable promotion должен использовать эти же байты без пересборки; docs-only + коммит не меняет идентичность проверенного кандидата. +- Полный протокол опубликован в + [итоговом отчёте о приёмке RC5](docs/acceptance/2026-09-15-v1.0.0-rc5-final-acceptance.md). + Runtime-разбор RC4 закрыл три дефекта панели и один связанный риск сопровождения. Набор знаков имени пира больше не хранится как сырой `@` внутри message format: общий frontend-контракт передаёт его в RU/EN-подсказку через diff --git a/README.md b/README.md index 8be4152..5e6fbcb 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@
Что это ·
+ Приёмка v1.0.0 ·
Возможности ·
Быстрый старт ·
Конфигурация ·
@@ -37,6 +38,18 @@ HY2XS подходит для сценария, где нужен один produ
Ключевая идея: на target‑сервере выполняется только установка готового пакета. Вся тяжёлая сборочная часть остаётся на build‑машине.
+## Статус приёмки v1.0.0
+
+Кандидат `1.0.0-rc5` прошёл финальную production-приёмку на чистом Debian 13:
+сборку и проверку опубликованного артефакта, установку, reboot persistence,
+Admin/UI, управление пирами, diagnostics, реальный E2E официальным клиентом
+Hysteria 2.12.2 и дополнительный gateway/TUN anti-leak прогон.
+
+Вердикт: **`PASS / PRODUCTION E2E VALIDATED`**, кандидат готов к выпуску
+`1.0.0`. Канонические release identity, контрольная сумма и полный протокол — в
+[итоговом отчёте о приёмке RC5](docs/acceptance/2026-09-15-v1.0.0-rc5-final-acceptance.md).
+Stable должен продвигать проверенный RC5 artifact без пересборки.
+
## Возможности
HY2XS release‑пакет разворачивает и настраивает:
diff --git a/docs/acceptance/2026-09-15-v1.0.0-rc5-final-acceptance.md b/docs/acceptance/2026-09-15-v1.0.0-rc5-final-acceptance.md
new file mode 100644
index 0000000..791f6d0
--- /dev/null
+++ b/docs/acceptance/2026-09-15-v1.0.0-rc5-final-acceptance.md
@@ -0,0 +1,338 @@
+# 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 заменены на `