# 05 — Доставка пакета и итоговая приёмка **What to build:** Поставка `proxy-client` проверена целиком: корневой обзор соответствует готовым возможностям, автоматические проверки воспроизводимы, а ручная приёмка на доступных системах подготовлена для пользователя. **Blocked by:** 03 — безопасный жизненный цикл; 04 — проверяемая установка. **Status:** ready-for-human ## Границы задачи Тикеты 03/04/06 уже доставили CLI, Bash-модуль, установку и жизненный цикл. Задача 05 их проверяет, но не переписывает. Источники истины: - [`proxy-client/README.md`](../../../proxy-client/README.md) — пользовательские команды, настройка и ограничения; - [исходный дизайн](../../../docs/specs/2026-07-15-proxy-client-design.md) — границы и принятые решения. - [x] Корневой `README.md` кратко описывает внешний Hiddify и управляемый Xray, показывает `stow proxy-client` и ссылается на полную инструкцию. - [x] Пакет подключается через stow, ручные ссылки или копирование; общий установщик использует тот же пакет. - [x] Инструкция покрывает две семьи VLESS, Xray 26.3.27, отсутствие systemd, автозапуска и автоматического перехода между прокси. - [x] Тест `ManagedXrayCliTest.test_exact_boolean_version_alpn_and_extra_branches` подтверждает, что устаревшие `allowInsecure`/`insecure` не попадают в TLS-конфиг, а истинное значение даёт предупреждение. ## Секретные данные - [x] В отслеживаемых файлах, тестовых данных, аргументах, выводе и отчёте нет настоящих VLESS-ссылок, UUID, ключей, `shortId` и `path`. Автоматические тесты используют только вымышленные контрольные значения. Настоящий профиль и сгенерированный JSON остаются в закрытых пользовательских файлах и не копируются в отчёт. ## Автоматическая проверка - [x] `tests/test_proxy_client_full.sh` запускает весь Python-набор под системным `python3` и CPython 3.8 через `uv`, затем Bash-тесты и проверку установки. - [x] Тестовый Xray остаётся отдельным исполняемым файлом и получает доступ к библиотекам исходного Python. Это устраняет ложные падения переносимой сборки `uv`, не ослабляя проверки личности процесса. - [x] `tests/test_install.sh` собирает небольшие тестовые деревья только из отслеживаемых Git-файлов и удаляет общий временный каталог при выходе. ## Приёмка пользователем Исполнитель готовит команды и останавливается. Результат отмечает пользователь; недоступная система остаётся неподтверждённой. - [x] Ubuntu 26.04 с системным Python 3.14: установка, жизненный цикл, `xray run -test`, HTTP и SOCKS через один локальный вход Xray 26.3.27. Минимальный CPython 3.8 отдельно покрыт автоматическим прогоном через `uv`. - [ ] РЕД ОС, Astra Linux или Alt Linux по доступности: тот же сценарий после проверки фактической версии Python. ## После приёмки - [ ] Статус исходного дизайна и заявления о поддержке приведены в соответствие только с фактически выполненными прогонами. ## Comments ### 2026-07-21 — автоматическая проверка `bash tests/test_proxy_client_full.sh` завершился с кодом 0: - системный Python 3.14: 79 тестов, `OK`, 61,034 с; - Bash-интеграция: 8 проверок, `PASS`; `shellcheck` отсутствует и явно пропущен; - установка: `All install tests passed`; в `/tmp` не осталось каталогов `dotfiles-install-test.*`; - CPython 3.8 через `uv`: 79 тестов, `OK`, 52,446 с. ### 2026-07-21 — команды ручной приёмки В первой панели tmux, после подготовки закрытого `default.url` и машинного конфига с `type = xray`: ```bash python3 --version cd ~/dotfiles stow proxy-client source ~/.config/proxy-client/shell.bash proxy-client install proxy-client start ``` Во второй панели, пока `start` работает: ```bash proxy-client status xray run -test -c "${XDG_STATE_HOME:-$HOME/.local/state}/proxy-client/client.json" curl --proxy http://127.0.0.1:12334 https://api.ipify.org curl --proxy socks5h://127.0.0.1:12334 https://api.ipify.org proxy-client stop ``` Если настроен другой локальный адрес или порт, те же значения подставляются в обе команды `curl`. В отчёт записываются только версии, коды возврата и итог проверки HTTP/SOCKS. ### 2026-07-21 — переименование и частичная ручная приёмка Публичный интерфейс переименован в `proxy-client`, а машинный конфиг и закрытый профиль объединены в `~/.config/proxy-client/`. В ходе разработки текущий HOME приведён к новой структуре; старые пользовательские пути отсутствуют, права файлов `600` сохранены. Поддержка прежнего имени в установщик не добавлялась, поскольку выпуск ещё не состоялся. Xray 26.3.27 установился и запустился, `status` подтвердил процесс на `127.0.0.1:12334`, а `xray run -test` завершился сообщением `Configuration OK`. HTTP и SOCKS5h через локальный вход не прошли: оба запроса `curl` завершились кодом 35 с неожиданным закрытием TLS-соединения во время рукопожатия. После проверки Xray штатно остановлен. Пункты ручной приёмки пока не отмечены. ### 2026-07-21 — успешная приёмка на Ubuntu Первая строка оказалась нерабочей и в исходном клиенте. После замены на подтверждённо рабочий профиль XHTTP/TLS с ALPN `h3` тот же Xray 26.3.27 прошёл полный сценарий на Ubuntu 26.04 с системным Python 3.14: встроенная проверка внешнего IP, `status`, `xray run -test`, HTTP CONNECT и SOCKS5h. Оба запроса `curl` получили HTTP 200. Содержимое профиля в журнал и Git не попадало. Диагностическое понижение до Xray 25.12.8 не исправляло старый профиль, поэтому поддержка второй версии не нужна. Ошибка была связана с прежней строкой или её удалённой стороной, а не с преобразованием `proxy-client`. Короткая проверка стабильности H3 на Xray 26.3.27 также прошла: - 120 циклов, в каждом новое HTTP CONNECT- и SOCKS5h-соединение: 240 запросов, 0 ошибок; - две одновременные загрузки по 10 МБ через HTTP и SOCKS завершились полностью; - после 45 секунд без трафика оба новых запроса получили HTTP 200. Таким образом, не воспроизвёлся сбой из [XTLS/Xray-core#3673](https://github.com/XTLS/Xray-core/issues/3673), при котором H3 переставал принимать новые соединения уже после первых запросов. Этот короткий прогон не заменяет длительное наблюдение под обычной нагрузкой.