refactor(proxy-client): переименован интерфейс прокси

- Зачем:
  - прежнее имя выпячивало Xray, хотя клиент поддерживает также внешний прокси, а два каталога конфигурации были неочевидны.
- Что:
  - пакет, CLI, конфигурация, состояние, тесты и документация переименованы в proxy-client.
  - машинный конфиг, профиль и два явных примера собраны в одном пользовательском каталоге.
  - свежая установка защищена от сворачивания каталога конфигурации внутрь репозитория.
- Проверка:
  - bash tests/test_proxy_client_full.sh.
  - bash tests/test_install.sh.
  - ручные start, status и xray run -test; незавершённая сетевая приёмка записана в handoff.
This commit is contained in:
ddadmin committed 2026-07-21 09:31:21 -04:00
1 parent e5323284a8
commit 6e431d875e
25 files changed
+310 -227

No files matched your search

@@ -0,0 +1,87 @@
# Handoff: `proxy-client` переименован, сетевой маршрут требует диагностики
Обновлён: 2026-07-21 09:23 EDT.
## Состояние задачи 05
Автоматическая часть готова. Публичное имя изменено с `xray-proxy` на
`proxy-client`, а ручная приёмка дошла до реального сетевого запроса. Xray
запускается и принимает локальные соединения, но удалённый маршрут пока не
работает. Статус тикета остаётся `ready-for-human`.
Тикет: `.scratch/proxy-client/issues/05-package-delivery-and-acceptance.md`.
## Переименование
- stow-пакет: `proxy-client/`;
- CLI: `~/.local/bin/proxy-client`;
- единый пользовательский каталог: `~/.config/proxy-client/`;
- служебный каталог: `~/.local/state/proxy-client/`;
- машинный конфиг и закрытый профиль теперь лежат рядом как `config` и
`default.url`;
- примеры называются `config.external` и `config.xray`;
- имена тестов, спецификации, задач, README и Bash-модуля приведены к
`proxy-client`;
- `Xray`, бинарник `xray` и значение `type = xray` сохранены как названия
конкретного движка.
Поддержка старой раскладки в `install.sh` намеренно не добавлена: публичное имя
изменено до завершения разработки и выпуска. Текущий HOME уже приведён к новой
структуре. Свежая установка заранее создаёт настоящий
`~/.config/proxy-client`, поэтому Stow не может свернуть его в ссылку на
репозиторий.
## Автоматическая проверка
`bash tests/test_proxy_client_full.sh` завершился с кодом 0 после
переименования:
- системный Python 3.14: 79 тестов, `OK`, 61,034 с;
- Bash-интеграция: 8 проверок, `PASS`; `shellcheck` не установлен;
- установка и миграция: `All install tests passed`;
- CPython 3.8 через `uv`: 79 тестов, `OK`, 52,446 с.
Дополнительно прошли синтаксическая проверка shell-файлов и `git diff --check`.
## Текущий HOME
Во время разработки текущий HOME приведён к новой структуре:
- `~/.config/proxy-client` — настоящий каталог;
- `config` и `default.url` — обычные файлы с правами `600`;
- профиль содержит одну непустую строку, его содержимое не выводилось;
- `shell.bash`, `examples` и CLI указывают в новый stow-пакет;
- старые `~/.config/xray-proxy`, `~/.config/proxy/config`,
`~/.local/bin/xray-proxy` и `~/.local/state/xray-proxy` отсутствуют.
## Ручная приёмка
Подтверждено:
- установлен Xray 26.3.27;
- `proxy-client start` успешно проверяет версию, строит JSON и запускает Xray;
- `proxy-client status` видит управляемый процесс на `127.0.0.1:12334`;
- `xray run -test` сообщает `Configuration OK`;
- после проверки процесс штатно остановлен командой `proxy-client stop`.
Не прошло:
- встроенное определение внешнего IP;
- HTTP через `127.0.0.1:12334`;
- SOCKS5h через тот же порт.
Оба запроса `curl` завершились кодом 35: TLS-соединение неожиданно закрылось во
время рукопожатия. Внешний IP и содержимое профиля в вывод не попадали.
## Следующий шаг
Диагностировать сетевой маршрут XHTTP/TLS: сравнить профиль с рабочим клиентом,
проверить доступность удалённого узла и выяснить, связан ли EOF с преобразованием
профиля, параметрами XHTTP/TLS или удалённой стороной. До этого не отмечать
ручную HTTP/SOCKS-приёмку выполненной.
## Git
Переименование и текущий handoff ещё не закоммичены. Не включать посторонние
неотслеживаемые `agents/.agents/.skill-lock.json` и
`scripts/setup-xray-proxy.sh`.
@@ -1,54 +0,0 @@
# Handoff: владение `~/.config` исправлено, задача 05 готова к приёмке
Обновлён: 2026-07-21 08:18 EDT.
## Состояние задачи 05
Автоматическая часть `headless-xray-proxy` зафиксирована коммитом `fd8210d`.
Тикет `.scratch/headless-xray-proxy/issues/05-package-delivery-and-acceptance.md`
находится в `ready-for-human`; результаты тестов и команды ручной приёмки уже
записаны там. Дальше можно продолжать ручную приёмку по этому тикету.
## Исправленный дефект stow
Корневая причина была в сворачивании GNU Stow: в пустом домашнем каталоге пакет
`zed` создавал общую ссылку `~/.config -> ~/dotfiles/zed/.config`. После этого
рабочие настройки приложений и закрытый профиль Xray физически попадали внутрь
репозитория.
`install.sh` теперь:
- заранее создаёт настоящий каталог `~/.config`, поэтому свежая установка
создаёт только ссылку `~/.config/zed`;
- распознаёт старую ссылку лишь при точном совпадении с
`$DOTFILES_DIR/zed/.config`;
- оставляет управляемый каталог `zed` в пакете, а остальные верхнеуровневые
элементы переносит в настоящий `~/.config`;
- до первого переноса проверяет, что смог полностью перечислить данные;
- при штатной ошибке переноса возвращает уже перемещённые элементы назад;
- не раскрывает произвольные ссылки `~/.config`.
В `tests/test_install.sh` добавлены проверки свежей установки, миграции с
вымышленным секретом, сохранения прав `600`, отсутствия секрета в выводе,
повторного запуска и неприкосновенности произвольной ссылки.
## Проверка и живое состояние
Полный набор `bash tests/test_xray_proxy_full.sh` прошёл на системном Python и
Python 3.8 через `uv`: по 79 Python-тестов, 8 проверок командной оболочки и тесты
установщика. Синтаксис сценариев командной оболочки и `git diff --check` также
прошли.
Миграция применена к текущему домашнему каталогу:
- `~/.config` — настоящий каталог;
- `~/.config/zed` указывает на пакет Zed;
- в `zed/.config` остался только каталог `zed`;
- рабочие каталоги приложений находятся в `~/.config`;
- `~/.config/xray-proxy/default.url` — обычный файл вне репозитория, сохранил
права `600` и одну непустую строку. Содержимое профиля не выводилось.
## Текущее состояние Git
Не включать в коммиты посторонние неотслеживаемые
`agents/.agents/.skill-lock.json` и `scripts/setup-xray-proxy.sh`.