docs(proxy-client): принцип простоты — в спецификацию вместо ADR

Отдельный ADR дублировал спецификацию и оставлял в ней устаревшие места.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Opus 5.5 committed 2026-09-28 09:23:13 -04:00
1 parent 05a7f1e4fb
commit 502f828c6f
2 files changed
+26 -43

No files matched your search

@@ -1,38 +0,0 @@
# 0001. proxy-client — личный инструмент: простота важнее защиты
Дата: 2026-09-28. Статус: принято.
## Контекст
`proxy-client` пользуются владелец и несколько друзей на своих машинах. Первая
версия защищалась от сценариев, которые на личной машине не случаются:
повторное использование PID между `start` и `stop`, подложный `state.json`,
zip-бомба в официальном архиве Xray, уже проверенном по SHA-256, гонка
`status` с параллельным `start`. Эта защита стоила сотен строк кода и тестов и
около минуты прогона. При этом она мешала в обычной жизни, например
отказывала, если `~/.local` сделан ссылкой.
## Решение
Защищаемся только от реальных ошибок и опасностей:
- проверка SHA-256 скачанного Xray и атомарная замена бинарника;
- секреты профиля не попадают в вывод, служебные файлы закрыты правами 600/700;
- локальный порт Xray слушает только loopback;
- чужие файлы не перезаписываются;
- сигнал уходит только процессу, у которого `/proc/PID/exe` совпадает с
запущенным Xray.
Не защищаемся от самого пользователя и его собственных файлов. Ошибка должна
быть понятной: называть файл полным путём и подсказывать готовую команду.
Тесты проверяют поведение только через команду `proxy-client`, разбор ссылки,
установку Xray с подставным скачивателем, функции Bash и установщик пакета. Их
не пишут на внутренние функции и порядок вызовов.
## Последствия
Прежде чем добавлять новую защиту, нужно назвать сценарий, который реально
случается у пользователя. Иначе защита не добавляется. Первоначальный замысел
с полным набором защит описан в `docs/specs/2026-07-15-proxy-client-design.md`
и в части защит больше не действует.
+26 -5
View File
@@ -2,12 +2,33 @@
Дата: 2026-07-15
Статус: основная реализация принята вручную; самостоятельный установщик
спроектирован 2026-07-21, но ещё не реализован
Статус: реализовано; 2026-09-28 упрощено по принципу ниже
> 2026-09-28: часть защит отсюда снята как избыточная для личного инструмента,
> см. [ADR 0001](../adr/0001-proxy-client-lichnyj-instrument.md). При
> расхождении действует ADR.
## Принцип: личный инструмент
`proxy-client` пользуются владелец и несколько друзей на своих машинах. Код
защищается от реальных ошибок и опасностей:
- скачанный Xray проверяется по SHA-256 и заменяется атомарно;
- секреты профиля не попадают в вывод, служебные файлы закрыты правами 600/700;
- локальный порт Xray слушает только loopback;
- чужие файлы не перезаписываются;
- сигнал уходит только процессу, у которого `/proc/PID/exe` совпадает с
запущенным Xray.
Пользователь и его собственные файлы — не противник. Сообщение об ошибке
называет файл полным путём и подсказывает готовую команду.
Новая защита появляется вместе со сценарием, который реально случается у
пользователя, и этот сценарий записывается рядом с ней. Так же проверяется и
прежний код: в 2026-09-28 убраны защиты без такого сценария — повторное
использование PID, подложный `state.json`, zip-бомба в проверенном архиве,
гонка `status` с параллельным `start`.
Тесты проверяют поведение через команду `proxy-client`, разбор ссылки
(`parse_vless` + `build_xray_config`), установку Xray с подставным
скачивателем, функции Bash с поддельным `PROXY_CLIENT_BIN` и установщик пакета
во временном HOME.
## Проблема