- state.json снова хранит адрес и порт: при смене конфига у работающего
Xray status/env/run отказывают и советуют перезапустить start.
- Ошибки разбора ссылки называют файл профиля.
- Тесты: отказ start при чужой версии Xray, ключи REALITY не попадают
в вывод, Xray узнаётся после замены файла; машинный конфиг проверяется
через CLI; тест пути по умолчанию не зависит от доступности Hiddify.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Спецификация 603 → 220 строк: без описаний снятых защит и без пересказа
кода и README; остались задача, границы, решения с причинами и риски.
В README раздел «Изменение кода» ведёт к спецификации и тестам.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Проверка «тот ли процесс»: /proc/PID/exe для Xray и cmdline для
супервизора вместо boot_id, времени старта и разбора argv; нет больше
состояния «не удалось подтвердить, удалите файлы вручную».
- Установка Xray: SHA-256 и атомарная замена остаются; без ограничений
размера, строгого разбора .dgst и блокировки на время установки.
- Разбор ссылки: extra — обычный json.loads; allowInsecure/insecure
игнорируются с предупреждением.
- Ошибки о файлах называют полный путь и готовую команду
(chmod 600 для профиля, rm для битого state.json).
- Тесты: разбор ссылок — табличные без запуска процессов, по одному
запуску на сценарий управляемого Xray; без подмены внутренних функций.
Код 1569 → 925 строк, тесты 2479 → 895, прогон 63 → 9 с.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- install.sh ставит три прямые ссылки без Stow; чужие файлы не трогает
и перечисляет все конфликты сразу; ~/.local и ~/.config могут быть
ссылками; блок в ~/.bashrc дописывается, если нет маркера.
- proxy_on читает вывод proxy-client env без временного файла.
- Тесты Bash-функций работают через поддельный PROXY_CLIENT_BIN.
- test_proxy_client_full.sh запускает только тесты proxy-client,
прогон под Python 3.8 — если есть uv.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>