Контрольный список проверки межмашинной синхронизации
Процедура проверки, подтверждающая, что адаптер Claude Code корректно устанавливается, проверяется и удаляется на новом хосте, с полными проверками переносимости.
Область применения. Этот контрольный список проверяет слой переносимости установки / удаления адаптера Claude Code на новом втором хосте. У других инструментов есть собственные рецепты проверки для каждого хоста, задокументированные в
site/content/docs/harnesses/<harness>.mdx. Путь~/.claude/— это каноническое место установки адаптера Claude Code; при проверке другого инструмента подставьте путь, нативный для соответствующего адаптера.
Управляемая оператором проверка слоя переносимости установки / удаления на новом втором хосте. Уровень публикации (
vX.Y.Z) был создан на единственном хосте Windows; утверждение о переносимости~/.claude/(CLAUDE.mdportability: universal) требует сквозного прогона на втором хосте, прежде чем многохостовой инвариант обретёт вес. Этот контрольный список — канонический рецепт проверки на втором хосте (адаптер Claude Code).
1. Предварительные условия на втором хосте
Выполните на втором хосте перед началом проверки:
| Пункт | Команда | Ожидается |
|---|---|---|
| Git установлен | git --version | Git 2.40+ |
| Python 3.10+ доступен | python3 --version (POSIX) или py -3 --version (Windows) | 3.10 / 3.11 / 3.12 / 3.13 |
| Аутентификация GitHub (опционально, для аутентифицированного клонирования / проверок API) | gh auth status | Выполнен вход под авторизованной учётной записью репозитория при использовании аутентифицированных рабочих процессов |
| Shell доступен | bash --version (POSIX) или pwsh --version (Windows) | Bash 4+ или PowerShell 7+ |
Нет существующего каталога ~/.claude/ | ls ~/.claude 2>&1 | "No such file or directory" — если присутствует, сделайте резервную копию перед продолжением |
2. Проверка клонирования и установки
Выполните на втором хосте:
# Clone the published repo to ~/.claude (the install destination)
git clone https://github.com/ahmed-g-gad/apothem.git ~/.claude
cd ~/.claude
# (POSIX path) Run scripts/installer/install.sh dry-run first
bash scripts/installer/install.sh --dry-run # exit 0; Quick Start banner
# (POSIX path) Run scripts/installer/install.sh for real
bash scripts/installer/install.sh # exit 0; sentinel-file check; idempotent
# (Windows path) PowerShell parallel
pwsh -File scripts/installer/install.ps1 -DryRun # exit 0; Quick Start banner
pwsh -File scripts/installer/install.ps1 # exit 0Зафиксируйте код выхода и баннер stdout каждой команды. Запишите в <second-host>/.audit/cross-machine-clone-install.md.
3. Дисциплина четырёх элементов (согласно src/apothem/rules/production-ready-prs.md §8.3)
Проверьте каждый из четырёх инвариантов на втором хосте:
3.1 Безопасность файла-сторожа
# Re-run installer at the same destination.
bash scripts/installer/install.sh # POSIX
pwsh -File scripts/installer/install.ps1 # WindowsОжидается: Установщик обнаруживает существующий действительный ~/.claude/ (файл-сторож присутствует), выполняет быструю перемотку (fast-forward) вместо переустановки или дублирования; код выхода 0.
3.2 Проверка предусловий
# Temporarily move git out of PATH.
PATH=/usr/bin:/bin bash scripts/installer/install.sh # POSIX (no git)Ожидается: Установщик отказывается запускаться; выдаёт явную диагностику «git not found»; код выхода ненулевой.
3.3 Идемпотентный повторный запуск
# Run installer N times back-to-back.
for i in 1 2 3 4 5; do bash scripts/installer/install.sh; done # POSIX
1..5 | ForEach-Object { pwsh -File scripts/installer/install.ps1 } # WindowsОжидается: Каждый вызов завершается с кодом 0; никаких побочных эффектов после первого вызова; никаких дублирующихся файлов; никакого дублирования RC shell-profile.
3.4 Настраивается через переменные окружения
# Install to a non-default location.
CLAUDE_PROJECT_DIR=/tmp/alt-claude bash scripts/installer/install.sh # POSIX
$env:CLAUDE_PROJECT_DIR='C:\tmp\alt-claude'; pwsh -File scripts/installer/install.ps1 # WindowsОжидается: Установщик учитывает переменную окружения; ~/.claude/ НЕ изменяется; альтернативное место назначения содержит ожидаемую структуру.
4. Проверка набора валидаторов (после установки)
cd ~/.claude
make validate # 50 conformity validators
make headers-doctor # file-header-grep → passed:true
make ai-surfaces-doctor # multi-surface-coherence → passed:true
make plans-doctor # no-global-plans + plans-discipline-language
make lint # ruff + mypy
make test # pytest 265/265Ожидается: Каждый шлюз зелёный. Зафиксируйте коды выхода + строки сводки.
5. Проверка удаления
# POSIX path — interactive uninstall
bash scripts/installer/uninstall.sh # answers: "y" to confirm
ls ~/.claude 2>&1 # "No such file or directory"
# Re-install from clone, then uninstall non-interactively
git clone https://github.com/ahmed-g-gad/apothem.git ~/.claude
bash scripts/installer/uninstall.sh --yes
ls ~/.claude 2>&1 # "No such file or directory"Ожидается: Интерактивный поток запрашивает подтверждение; --yes пропускает запрос для пакетных запусков; оба потока оставляют ~/.claude/ чисто удалённым; связанные ссылки на переменные окружения shell-profile очищаются.
6. Проверка защитных ограждений безопасности
# Run uninstall against a path that fails the sentinel-file check.
mkdir -p /tmp/not-a-claude-install
CLAUDE_PROJECT_DIR=/tmp/not-a-claude-install bash scripts/installer/uninstall.sh --yesОжидается: Деинсталлятор отказывается; выдаёт диагностику «sentinel-file missing; refusing to remove unsafe target»; код выхода ненулевой. Путь НЕ был затронут.
# Run uninstall against $HOME, /, or empty path.
CLAUDE_PROJECT_DIR=$HOME bash scripts/installer/uninstall.sh --yes 2>&1 | tail -3
CLAUDE_PROJECT_DIR=/ bash scripts/installer/uninstall.sh --yes 2>&1 | tail -3
CLAUDE_PROJECT_DIR='' bash scripts/installer/uninstall.sh --yes 2>&1 | tail -3Ожидается: Каждая отказывает с явной диагностикой «unsafe target»; ни одна не затрагивает файловую систему.
7. Отчётность
После прогона на втором хосте зафиксируйте результаты в:
<second-host>/.audit/cross-machine-clone-install.md(результаты команд клонирования + установки)<second-host>/.audit/cross-machine-validators.md(результаты валидаторов из Раздела 4)<second-host>/.audit/cross-machine-uninstall.md(результаты удаления + безопасности из Разделов 5–6)
Доведите выводы до сопровождающего:
- ✅ все инварианты дисциплины четырёх элементов выполняются + все шлюзы валидаторов зелёные + все защитные ограждения безопасности удаления отвергли небезопасные цели → утверждение
portability: universalпубликации проверено сквозным образом - ❌ любой сбой → заведите задачу на
https://github.com/ahmed-g-gad/apothem/issues/newс указанием сбойного раздела + захваченного вывода; сопровождающий выполняет сортировку
8. Критерии приёмки
- §1 предварительные условия выполнены
- §2 клонирование и установка проходят успешно как в оболочках POSIX, так и Windows
- §3 дисциплина четырёх элементов выполняется (безопасность файла-сторожа; проверка предусловий; идемпотентность; настраивается через переменную окружения)
- §4 каждый шлюз валидатора зелёный
- §5 интерактивное удаление проходит успешно;
--yesпроходит успешно без запроса - §6 каждый отказ защитного ограждения безопасности срабатывает
- §7 результаты зафиксированы по задокументированным путям аудита
Когда каждый флажок выше отмечен на новом втором хосте, сопровождающая задача межмашинной синхронизации (COMPLETION.md §7 связывающее ограничение) считается закрытой.
Создание нового адаптера среды
Руководство по созданию и публикации нового адаптера среды Apothem.
Церемония слияния PR для единственного сопровождающего
Церемония для самостоятельного слияния pull request'ов, когда правила защиты ветки и enforce_admins иначе заблокировали бы единственного сопровождающего.