Files
dotfiles/.scratch/proxy-client-simplify/issues/02-installer-shell.md
T
2026-09-28 09:21:39 -04:00

59 lines
4.3 KiB
Markdown

# 02. Упростить установщик пакета, shell-тесты и запускалку
Status: ready-for-agent
Спецификация: `../spec.md` (читать целиком).
## Файлы
- `proxy-client/install.sh`
- `proxy-client/.config/proxy-client/shell.bash` — только если упрощение
очевидно; поведение `proxy_on`/`proxy_off`/`pclaude`/`pcodex` не меняется.
- `tests/test_proxy_client_install.sh`, `tests/test_proxy_launchers.sh`,
`tests/test_proxy_client_full.sh`
- `proxy-client/README.md` — только разделы «Установка» и «Ручное подключение
без установщика» (остальное правит задача 01; при конфликте правки
перечитай файл и повтори).
Не трогать: `proxy-client/.local/bin/proxy-client`, Python-тесты, корневой
`install.sh` и `tests/test_install.sh` (кроме случая, если они ломаются от
твоих правок — тогда минимально поправь и сообщи).
## Что сделать
1. Пункт 5 спецификации: `install.sh` ставит три симлинка напрямую (`ln -s`),
без Stow и `STOW_IGNORE_PATTERNS`. Повторный запуск — ничего не меняет.
Чужие файлы не перезаписывает и перечисляет все конфликты сразу (битая
ссылка — тоже конфликт). `~/.local` и `~/.config`, которые сами ссылки,
допустимы. Блок в `~/.bashrc` — дописать, если нет маркера;
`--no-shell-setup` сохраняется. Машинные `config` и `default.url` никогда
не ссылаются из пакета.
2. Тесты установщика: свежая установка (три ссылки, права, `bash -ic` после
установки находит `proxy-client` и `proxy_on`), повторный запуск ничего не
меняет, конфликты (включая битую ссылку) без частичной установки, машинные
файлы сохраняются, `--no-shell-setup`, родительские каталоги-ссылки
работают. Тесты удалённого поведения — удалить.
3. Тесты функций Bash: вместо переопределения внутренней `_proxy_cli` —
поддельный исполняемый файл через `PROXY_CLIENT_BIN` (посмотри, как это
сделано в `tests/test_chatgpt_proxy_launcher.sh`). Удалить тест голого
`declare -F`, тест «владение перенесено» (охрана давнего рефакторинга) и
ловушки `curl`. Сохранить: `proxy_on` применяет переменные, неуспешный
`env` не меняет окружение, `proxy_off` чистит восемь переменных,
`pclaude`/`pcodex` передают аргументы и код выхода, `.bash_custom`
подключает модули.
4. `tests/test_proxy_client_full.sh` запускает только тесты proxy-client
(Python-тесты proxy-client, env_sync, shell-тесты proxy-client). Прогон
под Python 3.8 через `uv` — если `uv` есть, иначе предупреждение и пропуск.
В README (раздел «Установка» или новый короткий раздел в конце —
согласуй с задачей 01 через простоту: одна строка команды) — как запускать.
## Готово, когда
- Все изменённые shell-тесты зелёные; `tests/test_install.sh` тоже зелёный.
- Тесты не требуют установленного `stow`.
- `bash -n` и (если есть) `shellcheck` для изменённых скриптов чистые.
- Не коммитить: коммиты делает оркестратор.
Отчёт: строки до/после, время до/после, принятые самостоятельно решения,
что осталось спорным.