- Зачем:
- рабочие задачи и handoff не должны попадать в итоговое состояние master.
- Что:
- удалены временные материалы разработки proxy-client.
- добавлен .scratch/.gitkeep для сохранения пустого рабочего каталога.
- Проверка:
- git diff --cached --check.
- find .scratch -mindepth 1 -print.
- Зачем:
- свежая установка могла превратить ~/.local в ссылку на пакет и записать Xray в репозиторий.
- Что:
- перед Stow теперь гарантируются настоящие ~/.local/bin и ~/.config/proxy-client без раскрытия посторонних ссылок.
- добавлены регрессионные проверки свежего HOME и посторонней ссылки ~/.local.
- README перестроены вокруг установки, выбора режима и ежедневного использования.
- Проверка:
- bash tests/test_install.sh.
- bash tests/test_proxy_launchers.sh.
- bash -n install.sh tests/test_install.sh.
- git diff --cached --check.
- Зачем:
- нужны фактические результаты ручной приёмки на рабочем профиле.
- Что:
- подтверждены HTTP CONNECT и SOCKS5h на Ubuntu 26.04 с Xray 26.3.27.
- записаны результаты проверки H3 под повторной нагрузкой и после простоя.
- сохранён открытым вопрос проверки на других семействах Linux.
- Проверка:
- 240 последовательных запросов без ошибок, две загрузки по 10 МБ и повторные запросы после 45 секунд простоя.
- git diff --cached --check.
- Зачем:
- прежнее имя выпячивало Xray, хотя клиент поддерживает также внешний прокси, а два каталога конфигурации были неочевидны.
- Что:
- пакет, CLI, конфигурация, состояние, тесты и документация переименованы в proxy-client.
- машинный конфиг, профиль и два явных примера собраны в одном пользовательском каталоге.
- свежая установка защищена от сворачивания каталога конфигурации внутрь репозитория.
- Проверка:
- bash tests/test_proxy_client_full.sh.
- bash tests/test_install.sh.
- ручные start, status и xray run -test; незавершённая сетевая приёмка записана в handoff.
- Зачем:
- следующая сессия должна стартовать задачу 05 без восстановления
контекста из транскриптов.
- Что:
- создан handoff после 04: состояние конвейера, решения по эффорту от
2026-07-21, план задачи 05 с ручными приёмками, грабли механики;
- удалён отработанный handoff после 03.
- Проверка:
- cat .scratch/handoffs/20260721-0343-xray-proxy-after-04.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- решения по калибровке эффорта (2026-07-21) должны быть видны в самом
проекте, а не только в плейбуке оркестратора.
- Что:
- в «Наблюдения» леджера добавлен итог: реализация на medium допустима,
экономику считать по конвейеру; эффорт-карта Claude-субагентов;
пределы эффорта и эмпирика кэша Codex при resume.
- Проверка:
- git diff предыдущей версии .scratch/headless-xray-proxy/token-ledger.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- пользователь без root должен получать проверенный бинарник Xray 26.3.27
одной явной командой, без риска для живого managed-экземпляра.
- Что:
- команда install [--replace]: пин 26.3.27, маппинг x86_64/aarch64,
скачивание urllib + проверка SHA2-256 из официального четырёхзаписного
.dgst, staging внутри ~/.local/bin и один атомарный os.replace;
- границы размеров (64 MiB архив/бинарник, 4 KiB .dgst, счёт limit+1,
сверка Content-Length) и guard managed-режима через start-lock;
- типизированная StartLockBusyError, offline-тесты реального загрузчика
через подмену urlopen, снапшоты дерева ФС в отказных путях;
- README/спека обновлены, включая справку о последней версии с
allowInsecure (25.12.8, удалена в 26.2.6); тикет 04 закрыт, леджер
дополнен итогами эксперимента.
- Проверка:
- PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests — 79 OK.
- bash tests/test_proxy_launchers.sh — 8 PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- прежняя записка описывала состояние до задачи 03 и не содержала
решения пользователя по эксперименту с эффортом для задачи 04.
- Что:
- создан handoff after-03: статус тикетов, решение «04 на medium»,
уроки resume-синтаксиса codex exec и потери usage при убитом ходе.
- прежний handoff after-06 удалён как одноразовый по правилам AGENTS.md.
- Проверка:
- git show --stat HEAD.
- Зачем:
- stop/status опирались на обход argv и могли счесть чужой или
переиспользованный PID управляемым процессом, а параллельный start
и аварийная гибель супервизора не имели определённого поведения.
- Что:
- введена модель идентичности: PID + starttime (поле 22 /proc/PID/stat),
/proc/PID/exe для ребёнка, канонический путь скрипта для супервизора,
boot_id как граница загрузки; перечитка перед каждым сигналом.
- добавлены lifetime-flock супервизора, три исхода проверки состояния
(здоровая пара / подтверждённый сирота / непроверяемое), отказ при
занятом порте пробным bind и очистка stale только под lock.
- тесты расширены до 49 (blank flock, подмена starttime, чужой exe,
boot_id, SIGKILL супервизора, занятый порт, парсер stat); спека
приведена к модели идентичности; тикет 03 закрыт, леджер дополнен.
- Проверка:
- python3 -m unittest discover -s tests — 49 OK.
- bash tests/test_proxy_launchers.sh — 8 PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- пользователь сжимает контекст сессии; состояние конвейера и решения
должны переживать сжатие в файле проекта, а не в разговоре.
- Что:
- создан .scratch/handoffs/20260720-0425-xray-proxy-after-06.md: состояние
после задачи 06, порядок 03→04→05, правила прогона
(medium-эксперимент, леджер, thread_id) и решения пользователя.
- в AGENTS.md закреплено правило размещения handoff-записок в
.scratch/handoffs/ (одноразовые, коммитятся, уборка best-effort).
- Проверка:
- git show --stat HEAD.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- CLI и спека были переусложнены относительно принятой модели угроз
(один пользователь, доверенная машина): лишняя ось версий Xray и
защита от входов, которые не возникают при ручном редактировании.
- Что:
- убрана поддержка Xray 25.12.8 — поддерживается только 26.3.27;
allowInsecure валидируется, но никогда не эмитится в JSON.
- удалена проверка владения сокетом через /proc/net/tcp; идентичность
процесса и сверка адрес/порт со state сохранены.
- валидация INI/профиля/адреса/query сведена к отказам на реальные
опечатки; scoped IPv6 отклоняется одинаково на Python 3.8 и 3.9+.
- удалены fsync/O_EXCL-церемония, SIGALRM-таймер, zombie-инспекция,
мёртвый отпечаток профиля и двойной разбор extra/alpn.
- shell.bash принимает вывод env без ре-валидации, сохранив атомарность;
спека и issue 01–05 приведены к новому объёму (тикет 06, леджер).
- Проверка:
- python3 -m unittest discover -s tests — 34 теста OK.
- bash tests/test_proxy_launchers.sh — 8 проверок PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>