Skip to content
Apothem
Runbook

Daftar Periksa Verifikasi Sinkronisasi Antar-Mesin

Prosedur verifikasi untuk memastikan adapter Claude Code terpasang, tervalidasi, dan terhapus dengan benar pada host baru, dengan pemeriksaan portabilitas yang lengkap.

Cakupan. Daftar periksa ini memverifikasi lapisan portabilitas instalasi / penghapusan adapter Claude Code pada host kedua yang baru. Harness lain memiliki resep verifikasi per-host tersendiri yang didokumentasikan di site/content/docs/harnesses/<harness>.mdx.

Dua jalur, dua peran. Pisahkan keduanya saat membaca daftar periksa ini. $HOME/.apothem adalah engine home — tempat pohon sumber dikloning dan tempat pemasang membaca, dapat ditimpa dengan APOTHEM_HOME. ~/.claude/ adalah akar konfigurasi Claude Code — permukaan keluaran adapter, tempat settings.json yang dimaterialisasi dan pohon pendukung ditempatkan. Mesin tidak pernah dipasang ke dalam ~/.claude/; ganti dengan path keluaran native adapter saat memvalidasi harness yang berbeda.

Verifikasi yang digerakkan operator atas lapisan portabilitas instalasi / penghapusan pada host kedua yang baru. Tingkat publikasi (vX.Y.Z) disusun pada satu host Windows; klaim portabilitas (CLAUDE.md portability: universal) memerlukan latihan ujung-ke-ujung pada host kedua sebelum invarian multi-host memiliki bobot. Daftar periksa ini adalah resep verifikasi host kedua yang kanonis (adapter Claude Code).


1. Prasyarat pada Host Kedua

Jalankan pada host kedua sebelum memulai verifikasi:

ItemPerintahDiharapkan
Git terinstalgit --versionGit 2.40+
Python 3.10+ tersediapython3 --version (POSIX) atau py -3 --version (Windows)3.10 / 3.11 / 3.12 / 3.13
Autentikasi GitHub (opsional, untuk klon / pemeriksaan API terautentikasi)gh auth statusMasuk dengan akun yang diotorisasi untuk repo saat menggunakan alur kerja terautentikasi
Shell tersediabash --version (POSIX) atau pwsh --version (Windows)Bash 4+ atau PowerShell 7+
Tidak ada engine home sebelumnyals "$HOME/.apothem" 2>&1"No such file or directory" — jika ada, cadangkan sebelum melanjutkan

2. Verifikasi Klon-dan-Instal

Jalankan pada host kedua:

# Clone the published repo to the engine home. This is NOT ~/.claude — that
# is the Claude Code configuration root the adapter writes into, and cloning
# a source tree on top of it would bury the harness's own config.
git clone https://github.com/ahmed-g-gad/apothem.git "$HOME/.apothem"
cd "$HOME/.apothem"

# (POSIX path) Run scripts/installer/install.sh dry-run first
bash scripts/installer/install.sh --dry-run                                    # exit 0; prints Dry-run complete — no changes were made.

# (POSIX path) Run scripts/installer/install.sh for real
bash scripts/installer/install.sh                                               # exit 0; idempotent

# (Windows path) PowerShell parallel
pwsh -File scripts/installer/install.ps1 -DryRun                                # exit 0; prints Dry-run complete - no changes were made.
pwsh -File scripts/installer/install.ps1                                        # exit 0

Tangkap kode keluar dan banner stdout setiap perintah. Catat di <second-host>/.audit/cross-machine-clone-install.md.

3. Disiplin Empat Elemen (sesuai src/apothem/rules/production-ready-prs.md)

Verifikasi masing-masing dari empat invarian pada host kedua:

3.1 Keamanan Tujuan yang Sudah Ada

# Re-run installer at the same destination.
bash scripts/installer/install.sh                                               # POSIX
pwsh -File scripts/installer/install.ps1                                        # Windows

Diharapkan: Pemasang mendeteksi engine home yang sudah ada, melakukan checkout tag rilis di dalamnya alih-alih menginstal ulang atau menduplikasi; kode keluar 0.

3.2 Prasyarat Diperiksa

# Run from a copy outside any checkout, with git not on PATH.
d="$(mktemp -d)" && cp scripts/installer/install.sh "$d/" && PATH=<directory holding python3, click, rich and coreutils, but no git> /bin/sh "$d/install.sh"                            # POSIX (no git)

Diharapkan: Pemasang menolak berjalan; mengeluarkan diagnostik "git not found" yang eksplisit; kode keluar bukan nol.

3.3 Jalan Ulang Idempoten

# 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

Diharapkan: Setiap pemanggilan keluar dengan 0; tidak ada efek samping setelah pemanggilan pertama; tidak ada berkas duplikat; tidak ada duplikasi RC shell-profile.

3.4 Dapat Dikonfigurasi lewat Variabel Lingkungan

# Install to a non-default engine home. APOTHEM_HOME is the destination
# override the installers actually read; see the installer-environment-variables
# reference for the full set.
APOTHEM_HOME=/tmp/alt-apothem bash scripts/installer/install.sh                 # POSIX
$env:APOTHEM_HOME='C:\tmp\alt-apothem'; pwsh -File scripts/installer/install.ps1   # Windows

Diharapkan: Pemasang menghormati variabel lingkungan; $HOME/.apothem default TIDAK dibuat; tujuan alternatif berisi tata letak yang diharapkan.

4. Verifikasi Suite Validator (Pasca-Instal)

cd "$HOME/.apothem"
make validate                                                 # conformity gate --all --strict; exit 0
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 check + ruff format --check + mypy
make test                                                     # exit 0, no failures

Diharapkan: Setiap gerbang hijau. Tangkap kode keluar dan baris ringkasan.

5. Verifikasi Penghapusan

# POSIX path — interactive uninstall
bash scripts/installer/uninstall.sh                           # answers: "y" to confirm
PYTHONPATH="$HOME/.apothem/src/apothem/_vendor:$HOME/.apothem/src" python3 -m apothem verify --harness claude-code    # reports the harness as not installed

# Re-install from the kept checkout, then uninstall non-interactively
bash scripts/installer/install.sh
bash scripts/installer/uninstall.sh --yes
PYTHONPATH="$HOME/.apothem/src/apothem/_vendor:$HOME/.apothem/src" python3 -m apothem verify --harness claude-code    # reports the harness as not installed

Diharapkan: Alur interaktif menampilkan prompt; --yes melewati prompt untuk jalan batch; kedua alur membiarkan akar konfigurasi Claude Code bebas dari berkas yang dimaterialisasi Apothem; shim apothem dihapus (~/.local/bin/apothem; shim apothem.cmd di %LOCALAPPDATA%\Microsoft\WindowsApps hanya dihapus oleh uninstall.ps1).

6. Verifikasi Pengaman Keselamatan

Pengaman penghapus adalah pemeriksaan bentuk pohon sumber, bukan berkas sentinel: ia hanya berjalan ketika target memuat src/apothem/ bersama salah satu dari pyproject.toml atau .claude-plugin/. Jalankan probe ini dengan APOTHEM_HOME, variabel yang dibaca skrip — probe yang ditulis terhadap variabel yang diabaikan skrip tidak menguji pengaman, melainkan menjalankan penghapus terhadap instalasi nyata Anda.

# Run uninstall against a directory that is not an apothem source tree.
mkdir -p /tmp/not-an-apothem-install
APOTHEM_HOME=/tmp/not-an-apothem-install bash scripts/installer/uninstall.sh --yes

Diharapkan: Penghapus menolak; mengeluarkan No apothem source found at /tmp/not-an-apothem-install — nothing to uninstall; kode keluar bukan nol. Path TIDAK disentuh.

# Run uninstall against $HOME and /.
APOTHEM_HOME=$HOME bash scripts/installer/uninstall.sh --yes 2>&1 | tail -3
APOTHEM_HOME=/ bash scripts/installer/uninstall.sh --yes 2>&1 | tail -3

Diharapkan: APOTHEM_HOME=$HOME dan APOTHEM_HOME=/ masing-masing menolak dengan diagnostik No apothem source found at …, dan tidak satu pun menyentuh sistem berkas. APOTHEM_HOME kosong sengaja dikecualikan: ia jatuh kembali ke ~/.apothem, tempat instalasi asli dapat berada.

# An explicit APOTHEM_SOURCE that is not a source tree is rejected separately.
APOTHEM_SOURCE=/tmp/not-an-apothem-install bash scripts/installer/uninstall.sh --yes

Diharapkan: Menolak dengan APOTHEM_SOURCE is not an apothem source tree: /tmp/not-an-apothem-install; kode keluar bukan nol.

7. Pelaporan

Setelah jalan pada host kedua, tangkap hasil di:

  • <second-host>/.audit/cross-machine-clone-install.md (hasil perintah klon + instal)
  • <second-host>/.audit/cross-machine-validators.md (hasil validator Bagian 4)
  • <second-host>/.audit/cross-machine-uninstall.md (hasil penghapusan dan pengaman keselamatan Bagian 5–6)

Sampaikan temuan kepada pemelihara:

  • ✅ semua invarian disiplin empat elemen berlaku + semua gerbang validator hijau + semua pengaman keselamatan penghapusan menolak target yang tidak aman → klaim portability: universal dari publikasi terverifikasi secara ujung-ke-ujung
  • ❌ kegagalan apa pun → ajukan isu di https://github.com/ahmed-g-gad/apothem/issues/new dengan bagian yang gagal dan output yang ditangkap; pemelihara melakukan triase

8. Kriteria Penerimaan

  • §1 prasyarat terpenuhi
  • §2 klon-dan-instal berhasil pada shell POSIX maupun Windows
  • §3 disiplin empat elemen berlaku (keamanan tujuan yang sudah ada; prasyarat diperiksa; idempoten; dapat dikonfigurasi lewat variabel lingkungan)
  • §4 setiap gerbang validator hijau
  • §5 penghapusan interaktif berhasil; --yes berhasil tanpa prompt
  • §6 setiap penolakan pengaman keselamatan terpicu
  • §7 hasil ditangkap pada path audit yang didokumentasikan

Ketika setiap kotak centang di atas dicentang pada host kedua yang baru, verifikasi sinkronisasi lintas-mesin selesai dan klaim portability: universal terverifikasi secara ujung-ke-ujung.

On this page