Seremoni Merge PR untuk Pemelihara Tunggal
Kapan pemelihara dapat men-merge pull request miliknya sendiri secara langsung, dan seremoni untuk proteksi branch yang mensyaratkan persetujuan dan memberlakukannya bagi admin.
Rujukan kanonik untuk men-merge sendiri PR di bawah proteksi branch proyek. Proteksi aktif pada
mainmensyaratkan 0 tinjauan yang menyetujui dan membiarkanenforce_adminsnonaktif, sebagaimana tercatat di halaman Proteksi branch. Karena itu, pemelihara men-merge pull request miliknya sendiri secara langsung. Seremoni alih-sementara di halaman ini hanya berlaku ketika proteksi mensyaratkan persetujuan dan memberlakukannya bagi admin.
1. Kebuntuan
Proteksi main yang aktif membawa:
required_pull_request_reviews.required_approving_review_count: 0enforce_admins: false
Di bawah pengaturan ini tidak ada kebuntuan. Pull request pemelihara di-merge dengan gh pr merge <pr-number> --squash --delete-branch setelah pemeriksaan status wajibnya hijau dan percakapan tinjauannya diselesaikan.
Kebuntuan hanya ada ketika proteksi membawa kedua pengaturan yang lebih ketat ini:
required_pull_request_reviews.required_approving_review_count: 1enforce_admins: true
Aturan ini benar untuk skenario multi-pemelihara (setiap perubahan mencapai main melalui PR yang ditinjau rekan; admin tidak dikecualikan). Aturan ini menghasilkan kebuntuan bagi pemelihara tunggal: kebijakan GitHub melarang persetujuan-mandiri atas PR yang Anda buat sendiri, dan enforce_admins=true memblokir penimpaan gh pr merge --admin terhadap persyaratan persetujuan tinjauan. Dengan enforce_admins: false, --admin melewati persyaratan persetujuan dan tidak ada alih yang diperlukan, tetapi opsi itu juga melewati pemeriksaan wajib yang merah, jadi pastikan pemeriksaan tersebut hijau sebelum menggunakannya.
Ada tiga jalur resolusi:
| Jalur | Kapan digunakan |
|---|---|
Setel required_approving_review_count: 0 secara permanen (pengaturan aktif) | Pakai hanya jika repositori akan tetap dengan pemelihara tunggal tanpa batas waktu; membalik maksud tinjauan dari proteksi |
| Seremoni alih-sementara | Pemelihara tunggal men-merge sendiri selama proteksi mensyaratkan persetujuan dengan enforce_admins=true; menjaga invarian proteksi di luar jendela merge |
| Sediakan identitas bot CI dengan akses tulis | Pakai hanya jika onboarding multi-pemelihara sudah dekat; persetujuan oleh bot melemahkan maksud tinjauan manusia dari proteksi |
Repositori ini saat ini menggunakan jalur nol-persetujuan permanen. Seremoni alih-sementara adalah jalur kanonik setiap kali proteksi mensyaratkan persetujuan dan memberlakukannya bagi admin.
2. Seremoni Alih-Sementara
Invarian seremoni: keadaan proteksi di awal seremoni sama dengan keadaan proteksi di akhir. Pelonggaran hanya hidup di dalam jendela merge.
Bentuk manual:
# 1. Open the PR, push branch, wait for CI green.
gh pr create --base main --head <feature-branch> --title "..." --body "..."
gh pr checks <pr-number> # poll until all green
# 2. Relax approver-count to 0.
gh api repos/<owner>/<repo>/branches/main/protection/required_pull_request_reviews \
-X PATCH -F required_approving_review_count=0
# 3. Squash-merge with admin override (admin override now succeeds because the
# review-approval requirement is the only block enforce_admins refuses).
gh pr merge <pr-number> --squash --delete-branch --admin
# 4. Restore approver-count to 1.
gh api repos/<owner>/<repo>/branches/main/protection/required_pull_request_reviews \
-X PATCH -F required_approving_review_count=1Bentuk terbungkus: lihat scripts/dev/admin_merge.py untuk pembungkus Python atomik yang menjalankan langkah 2 → 3 → 4 dalam satu urutan non-interaktif dengan keamanan rollback try / finally saat langkah 3 gagal.
python scripts/dev/admin_merge.py <pr-number>3. Invarian
- Jendela alih diminimalkan. Langkah 2 → 3 → 4 dieksekusi dalam satu urutan non-interaktif. Proteksi berada dalam keadaan longgar hanya selama durasi panggilan API merge — di bawah satu detik pada setiap eksekusi yang teramati.
- Pemulihan bersifat tanpa syarat. Langkah 4 berjalan bahkan ketika langkah 3 gagal (klausa
try/finallypembungkus memastikan pemulihan pada jalur keluar mana pun). Upaya merge yang gagal tidak meninggalkan proteksi dalam keadaan longgar. - Gerbang CI dipertahankan sepanjang proses, selama
enforce_adminsaktif.required_status_checkstidak terpengaruh oleh alih; denganenforce_admins: truemerge tetap mensyaratkan konteks pemeriksaan status yang dikonfigurasi berstatus hijau. Denganenforce_admins: false, merge--adminpada langkah 3 juga melewati pemeriksaan wajib yang merah, jadi jangan jalankan seremoni dalam keadaan tersebut. - Jejak audit terlihat. Anotasi
gh pr merge --adminmuncul dalam metadata merge PR; alih API proteksi muncul dalam log audit repositori di bawah identitas pemelihara.
4. Kapan TIDAK Menggunakan Seremoni
Selama proteksi mensyaratkan 0 tinjauan yang menyetujui atau membiarkan enforce_admins nonaktif, seremoni tidak diperlukan: lakukan merge secara langsung seperti yang dijelaskan bagian 1.
Seremoni ini untuk merge-mandiri atas PR milik pemelihara sendiri. Ketika peninjau rekan tersedia (kontributor dengan akses tulis), jalur standar gh pr review --approve + gh pr merge --squash --delete-branch adalah yang benar dan seremoni tidak diperlukan.
Jika repositori meng-onboard pemelihara kedua, pensiunkan seremoni: alur tinjauan PR standar memulihkan maksud tinjauan manusia dari proteksi tanpa alih apa pun.
5. Mengaudit Eksekusi Lampau
Setiap pemanggilan seremoni mendarat pada tiga permukaan tahan lama yang dapat diperiksa operator setelahnya:
- Metadata merge pada PR.
gh pr view <pr-number> --json mergedBy,mergedAt,mergeCommitmengembalikan aktor merge, cap waktu merge, dan SHA commit squash. AktormergedBycocok dengan identitas pemelihara yang menjalankan langkah 3. - Log audit repositori.
gh api /repos/<owner>/<repo>/actions/runs --jq '.workflow_runs[] | select(.event=="push")'mengaitkan eksekusi CI pasca-merge dengan commit merge; log audit aturan proteksi repositori (riwayatgh api /repos/<owner>/<repo>/branches/main/protectionmelalui antarmuka Settings → Branches) menampilkan alih langkah 2 dan langkah 4 yang mengapit jendela merge. - Riwayat git pemelihara.
git log main --first-parent --onelinemendaftar setiap commit squash-merge padamaindengan nomor PR terkait pada subjek commit (sufiks(#<pr-number>)sesuai bawaangh pr merge --squash), memungkinkan operator menelusuri setiap pendaratan lampau kembali ke PR dan pemanggilan seremoninya.
Ketika scripts/dev/admin_merge.py adalah titik masuk, log non-interaktifnya (stderr) menyebutkan tiga panggilan API proteksi dan panggilan API merge secara berurutan; menyalurkan stderr-nya ke tee (2>&1 | tee) menangkap fragmen audit per-eksekusi tanpa bergantung pada retensi log sisi GitHub.
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.
Contoh
Contoh Apothem — penelusuran yang dikerjakan dari awal hingga akhir untuk menyusun adapter, aturan, hook, dan suite rencana.