- Зачем:
- приложение должно явно работать через прокси и сохранять настройку после обновлений.
- Что:
- добавлены отдельный ярлык ChatGPT Proxy и запускатель на основе proxy-client.
- исключено смешение прямого и проксированного режимов существующего процесса.
- установка, документация и автоматические проверки дополнены новым Stow-пакетом.
- Проверка:
- bash tests/test_chatgpt_proxy_launcher.sh.
- bash tests/test_proxy_launchers.sh.
- bash tests/test_install.sh.
Зачем: «перечитай свежим взглядом» стало двусмысленным с появлением
субагентов — то ли сам перечитай, то ли зови свежую сессию.
Что: claude/.claude/CLAUDE.md с осью «сколько авторского контекста несёт
ревьюер»: горячее (автор сам, глазами читателя), тёплое (агент с брифом),
холодное (свежая сессия без контекста). Линкуется install.sh в
~/.claude/CLAUDE.md тем же механизмом, что settings.local.json; файл внесён
в белый список .gitignore.
Проверка: симлинк создан на этой машине, содержимое читается.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- конфликт с уже существующим конфигом приходилось разбирать руками:
stow печатал "All operations aborted" и откатывал все пакеты сразу.
- Что:
- backup_conflicting_kitty_files заменена на общую
backup_conflicting_stow_targets по списку AVAILABLE_PACKAGES.
- обход повторяет логику stow: отсутствующая цель и каталоги-симлинки
пропускаются вместе с поддеревом, поэтому свёрнутые пакеты
(~/.codex, ~/.vscode-server) не обходятся и не бэкапятся.
- в фикстуру тестов добавлен пакет wezterm, добавлены тесты на конфликт
в HOME и на неприкосновенность содержимого свёрнутого пакета.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- при существующем ~/.config/kitty/kitty.conf stow печатал
"All operations aborted" и откатывал все пакеты, а install.sh падал
по pipefail, не дойдя до настройки claude, opencode и .bashrc.
- Что:
- добавлена backup_conflicting_kitty_files: неуправляемые файлы и чужие
симлинки в ~/.config/kitty уносятся в .bak с временной меткой перед stow.
- собственные симлинки пакета пропускаются, поэтому повторный запуск
install.sh не плодит бэкапы.
- добавлены тесты на существующий файл, чужой симлинк и повторный запуск.
- из таблицы пакетов README убран zed: он не в PACKAGES с ab4c7c7.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- конфиг kitty не был под контролем версий, а свёрнутый stow-каталог
приводил бы к попаданию рантайм-файлов kitty в репозиторий.
- Что:
- добавлен пакет kitty с минимальным kitty.conf и current-theme.conf
вместо 112 КБ sample-конфига от старой версии.
- в install.sh kitty добавлен в PACKAGES, а ~/.config/kitty создаётся
заранее настоящим каталогом, чтобы stow линковал по файлам.
- тест folding переведён с невыпиленного zed на kitty, устаревшая
проверка ~/.config/zed в тесте миграции заменена на assert_not_exists.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- statusLine ссылался на ~/.claude/statusline-command.sh, которого install.sh
никогда не создавал, а сам скрипт не округлял проценты и резал путь по числу
сегментов вместо длины.
- Что:
- скрипт переписан: округление процентов до целых, порог длины пути в
переменной MAX_PATH_LEN (28), резервный разбор JSON без jq, USER/USERNAME и
HOSTNAME вместо hostname -s, нормализация обратных слэшей — для Git Bash.
- install.sh копирует statusline-command.sh в ~/.claude с правами 755.
- Проверка:
- printf '%s' "$json" | bash claude/.claude/statusline-command.sh на JSON с
дробными процентами, null в rate_limits и без блока rate_limits.
- Зачем:
- конфигурация zed больше не управляется через stow и хранится локально в ~/.config/zed.
- Что:
- убран zed из массива PACKAGES в install.sh.
- Проверка:
- запустить install.sh и убедиться, что симлинк ~/.config/zed не создаётся.
- Зачем:
- требуется единообразное окружение терминала на обеих ОС.
- Что:
- добавлен выбор локальной оболочки и меню запуска по платформе.
- настроены JetBrains Mono и XWayland для корректной рамки окна в GNOME.
- пакет WezTerm включён в установку через stow и описан в README.
- Проверка:
- wezterm show-keys, bash -n install.sh и stow --simulate --restow wezterm.
- Зачем:
- свежая установка могла превратить ~/.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.
- Зачем:
- прежнее имя выпячивало Xray, хотя клиент поддерживает также внешний прокси, а два каталога конфигурации были неочевидны.
- Что:
- пакет, CLI, конфигурация, состояние, тесты и документация переименованы в proxy-client.
- машинный конфиг, профиль и два явных примера собраны в одном пользовательском каталоге.
- свежая установка защищена от сворачивания каталога конфигурации внутрь репозитория.
- Проверка:
- bash tests/test_proxy_client_full.sh.
- bash tests/test_install.sh.
- ручные start, status и xray run -test; незавершённая сетевая приёмка записана в handoff.
- Зачем:
- Claude Code перезаписывает settings.json при каждом «always allow», что создавало
конфликт с managed-копией из dotfiles при повторном запуске install.sh.
- Что:
- settings.json удалён из репозитория, Claude Code владеет им полностью.
- создан settings.local.json (базовые permissions + statusLine), деплоится через симлинк.
- install.sh: копирование + шаблон заменены на ln -sf с бэкапом и guard для edge cases.
- check.sh: проверка обновлена под симлинк вместо «файл + chmod 444».
- тесты: старый тест копирования заменён на 4 новых (симлинк, бэкап, директория, stow-миграция).
- Проверка:
- bash tests/test_install.sh (15 тестов).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- скрипт, написанный Codex, отличался по стилю от остального репозитория,
трудно читался из-за вложенных условий и отсутствия визуальной структуры.
- Что:
- добавлены секционные заголовки в стиле profile.ps1 (# ── Name ──────).
- извлечён ask_yes_no() — убрано дублирование промптов.
- WSL-логика вынесена в setup_wsl_hproxy() с flat early returns.
- миграция stow-симлинка вынесена в migrate_claude_stow_symlink().
- добавлены однострочные комментарии к хелперам и нетривиальным веткам.
- Проверка:
- bash tests/test_install.sh
- ./install.sh (идемпотентный повторный прогон)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- нужно было убрать падение install.sh на абсолютных WSL-симлинках и существующей runtime-директории opencode.
- Что:
- убран `--restow` из вызова stow, чтобы install не падал на ссылках `~/.aws` и `~/.azure`.
- настройка `~/.config/opencode` переведена на ручную установку с backup существующего `opencode.json` и сохранением runtime-файлов.
- в tests/test_install.sh добавлены сценарии для WSL-симлинков и существующей директории opencode.
- Проверка:
- bash -n install.sh
- bash -n tests/test_install.sh
- ./tests/test_install.sh
- Зачем:
- нужно было убрать баги install.sh и сделать регрессии воспроизводимыми.
- Что:
- исправлена установка через stow в HOME, миграция ~/.claude и копирование settings.json без разрушения рабочей директории.
- стабилизирована WSL-логика через проверки интерактивности и защиту от дублирования boot command.
- добавлен tests/test_install.sh с regression-сценариями для install.sh.
- Проверка:
- bash -n install.sh
- bash -n tests/test_install.sh
- ./tests/test_install.sh
- Зачем:
- stow tree-folding создавал симлинк ~/.claude → dotfiles/claude/.claude/,
из-за чего Claude Code модифицировал settings.json прямо в репозитории,
а рантайм-данные (sessions, credentials) попадали в каталог dotfiles.
- Что:
- claude убран из stow-пакетов, установка через ручную секцию в install.sh.
- settings.json копируется в ~/.claude/ (оригинал защищён chmod 444).
- добавлена автомиграция: симлинк → директория с переносом рантайм-данных.
- грязный settings.json в репо автоматически сбрасывается через git checkout.
- добавлен .stow-local-ignore для защиты от случайного stow claude.
- check.sh дополнен проверками: ~/.claude — директория, settings.json — копия.
- Проверка:
- bash install.sh (на машине с симлинком — мигрирует, иначе — идемпотентно).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- старая команда в wsl.conf дублировала записи в /etc/hosts при каждом ребуте.
- настройка hproxy.local не была задокументирована в репозитории.
- Что:
- создан идемпотентный скрипт scripts/setup-hproxy.sh (sed + append).
- в install.sh добавлен интерактивный вопрос о подключении скрипта в wsl.conf.
- в README.md добавлена документация по настройке hproxy.local (NAT и Mirror).
- Проверка:
- cat /etc/wsl.conf, wsl --shutdown, getent hosts hproxy.local.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- нужен воспроизводимый способ установки на новую машину и защита от перезаписи tracked-файлов ИИ-инструментами.
- Что:
- добавлен install.sh: stow всех пакетов, создание settings.local.json, chmod 444 на settings.json, автопатч .bashrc.
- claude/settings.json разделён на базовый (permissions, statusLine) и локальный (model, effortLevel в settings.local.json).
- добавлен .concept-software.ru в NO_PROXY в server-env-setup и bash_functions.
- README переработан: install.sh как рекомендуемый способ, документация двухуровневых настроек Claude, Developer Mode hint, расширенное описание VS Code прокси.
- Проверка:
- git clone + ./install.sh на чистой машине.