fix(install): исправлено владение каталогом .config

Зачем:
- GNU Stow сворачивал весь ~/.config в пакет zed и помещал рабочие настройки в репозиторий.

Что:
- добавлена ограниченная миграция старой ссылки с возвратом данных в домашний каталог;
- предотвращено повторное сворачивание ~/.config на свежей установке;
- добавлены проверки сохранности профиля, повторного запуска и чужих ссылок.

Проверка:
- bash tests/test_install.sh
- bash -n install.sh tests/test_install.sh
- git diff --check
This commit is contained in:
ddadmin committed 2026-07-21 08:29:52 -04:00
1 parent fd8210db71
commit e5323284a8
3 files changed
+231 -48

No files matched your search

@@ -1,62 +1,54 @@
# Handoff: headless-xray-proxy — задача 05 готова к ручной приёмке
# Handoff: владение `~/.config` исправлено, задача 05 готова к приёмке
Дата: 2026-07-21 07:43 EDT. Заменяет прежние handoff задачи 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`. Автоматическая часть выполнена; продуктовый CLI
менять не потребовалось.
находится в `ready-for-human`; результаты тестов и команды ручной приёмки уже
записаны там. Дальше можно продолжать ручную приёмку по этому тикету.
## Что изменено
## Исправленный дефект stow
- Корневой `README.md` описывает готовый управляемый Xray и отдельное
подключение через `stow xray-proxy`.
- `xray-proxy/README.md` явно фиксирует отсутствие systemd, автозапуска и
автоматического перехода между прокси.
- `tests/test_xray_proxy_full.sh` запускает полный набор под системным Python и
CPython 3.8 через `uv`, а также Bash-тесты и проверку установки.
- Поддельный Xray в `tests/test_xray_proxy_managed.py` сохраняет отдельный
исполняемый файл и получает доступ к библиотекам исходного Python. Это
устраняет ложные падения переносимой сборки `uv`, не ломая тест удалённого
исполняемого файла.
- `tests/test_install.sh` создаёт тестовые деревья только из отслеживаемых
Git-файлов внутри одного временного каталога и удаляет его при выходе.
Корневая причина была в сворачивании GNU Stow: в пустом домашнем каталоге пакет
`zed` создавал общую ссылку `~/.config -> ~/dotfiles/zed/.config`. После этого
рабочие настройки приложений и закрытый профиль Xray физически попадали внутрь
репозитория.
## Проверка
`install.sh` теперь:
`bash tests/test_xray_proxy_full.sh` завершился с кодом 0:
- заранее создаёт настоящий каталог `~/.config`, поэтому свежая установка
создаёт только ссылку `~/.config/zed`;
- распознаёт старую ссылку лишь при точном совпадении с
`$DOTFILES_DIR/zed/.config`;
- оставляет управляемый каталог `zed` в пакете, а остальные верхнеуровневые
элементы переносит в настоящий `~/.config`;
- до первого переноса проверяет, что смог полностью перечислить данные;
- при штатной ошибке переноса возвращает уже перемещённые элементы назад;
- не раскрывает произвольные ссылки `~/.config`.
- системный Python 3.14: 79 тестов, `OK`;
- Bash-интеграция: 8 проверок, `PASS`;
- установка: `All install tests passed`, остатков `dotfiles-install-test.*` в
`/tmp` нет;
- CPython 3.8.20 через `uv`: 79 тестов, `OK`.
В `tests/test_install.sh` добавлены проверки свежей установки, миграции с
вымышленным секретом, сохранения прав `600`, отсутствия секрета в выводе,
повторного запуска и неприкосновенности произвольной ссылки.
Двухосевое ревью относительно `92cf339`:
## Проверка и живое состояние
- Standards: 3 документационных замечания исправлены, повторная проверка PASS;
- Spec: 2 документационных замечания исправлены, повторная проверка PASS;
- запахов кода и незапрошенного расширения области не найдено.
Полный набор `bash tests/test_xray_proxy_full.sh` прошёл на системном Python и
Python 3.8 через `uv`: по 79 Python-тестов, 8 проверок командной оболочки и тесты
установщика. Синтаксис сценариев командной оболочки и `git diff --check` также
прошли.
## Что осталось пользователю
Миграция применена к текущему домашнему каталогу:
Выполнить ручные команды из раздела `## Comments` тикета 05:
- `~/.config` — настоящий каталог;
- `~/.config/zed` указывает на пакет Zed;
- в `zed/.config` остался только каталог `zed`;
- рабочие каталоги приложений находятся в `~/.config`;
- `~/.config/xray-proxy/default.url` — обычный файл вне репозитория, сохранил
права `600` и одну непустую строку. Содержимое профиля не выводилось.
1. На доступной Ubuntu с Python 3.10 — установка, жизненный цикл,
`xray run -test`, HTTP и SOCKS через один локальный вход.
2. На РЕД ОС, Astra Linux или Alt Linux по доступности — тот же сценарий после
проверки версии Python.
## Текущее состояние Git
В отчёт не копировать VLESS-ссылку, UUID, ключи, `shortId`, `path` и
сгенерированный JSON. Достаточно версии системы/Python, кодов возврата и итога
HTTP/SOCKS. Недоступную систему отметить как неподтверждённую.
## После ручного результата
1. Отметить только фактически выполненные пункты тикета 05.
2. Обновить статус исходного дизайна и заявления о поддержке.
3. Обновить или удалить этот handoff.
4. По навыку `implement` выполнить итоговую проверку и conventional commit.
До ручной приёмки коммита задачи 05 нет.
Не включать в коммиты посторонние неотслеживаемые
`agents/.agents/.skill-lock.json` и `scripts/setup-xray-proxy.sh`.