Artificial Intelligence

Bug Git Worktree Non-Deterministik Terungkap Saat Alat AI Dijalankan Nyata

Ringkasan

  • Pengembang ArDD menemukan kegagalan fundamental pada git worktree yang hanya terdeteksi saat alat diuji langsung, bukan saat membaca kode — mengubah desain orkestrasi agen AI paralel.

Seorang pengembang yang membangun ArDD, seperangkat keterampilan Claude Code untuk mengorkestrasi agen AI paralel, baru-baru ini berbagi temuan kritis: bug paling berbahaya pada alat pengembang tidak ditemukan dengan membaca kode, melainkan dengan menjalankannya. Pengalaman ini mengubah cara dia mendesain alur kerja agen AI dan menawarkan pelajaran bagi siapa pun yang membangun tooling otomatisasi serupa.

ArDD dirancang untuk memecah proyek menjadi rencana, daftar tugas, dan implementasi — dengan kemampuan mendelegasikan pekerjaan ke subagen yang berjalan di git worktree terpisah. Desain awal mencoba berhati-hati: sebelum mendelegasikan, ia melakukan commit state koordinasi ke branch utama agar subagen memiliki titik cabang yang stabil. Teori itu salah, dan kesalahan itu hanya terungkap saat pengembang menjalankan uji coba nyata.

Saat worktree dibuat, ternyata ia bercabang dari origin/main, bukan dari commit lokal yang baru saja dibuat. Lebih parah lagi, perilaku ini non-deterministik. Dalam satu panggilan yang sama, tujuh subagen di-spawn: enam membaca origin/HEAD sebagai base, satu membaca commit kerja aktual. Repositori, versi harness, dan batch identik — namun hasil berbeda. Tidak ada asumsi tetap yang bisa memperbaikinya.

Masalah kedua lebih aneh: perintah `git worktree add` membalik konfigurasi `core.bare = true` pada checkout utama, merusak operasi git biasa hingga dikembalikan manual. Mekanismenya tidak pernah ditemukan. Sebagai solusi darurat, koordinator kini memasang tripwire yang memeriksa kebocoran konfigurasi setelah setiap delegasi dan berteriak jika terulang.

Untuk masalah divergensi base, solusi teknisnya ringkas: skrip `worktree-align.sh` dijalankan sebagai tindakan wajib pertama subagen. Skrip itu memastikan fast-forward bersih dari branch default lokal ke branch worktree, dan menghentikan eksekusi jika tidak memenuhi syarat. Tidak ada upaya rekonsiliasi kacau — hanya pemeriksaan deterministik yang lolos atau berhenti.

Perubahan desain yang paling bertahan justru dipaksa oleh dua bug itu. Alur lama mematerialisasi state koordinasi sebelum pekerjaan yang membenarkannya ada, menciptakan dua salinan yang bisa bermusuhan. Sekarang state mengikuti branch tempat ia dihasilkan dan mendarat bersamaan dengan kode saat merge — satu-satunya momen keduanya dijamin tiba bersama.

Kotak centang berkas tugas, status siap → dalam-progres → selesai, flip register fitur dari ditugaskan → diimplementasikan, semuanya hidup di branch kerja, bukan di main secara antispasi. Implikasinya praktis: jalannya yang mati di tengah jalan kini menjadi no-op. Main tidak pernah melihat state setengah jadi, jadi tidak ada kekacauan yang perlu dibersihkan. Main tetap berkata apa yang dikatakannya sebelumnya, yang tetap benar.

Properti inilah yang menjadi inti pelajaran untuk siapa pun membangun tooling agen paralel: jangan materialisasi state koordinasi sebelum pekerjaan; desain sehingga agen yang ditinggalkan tidak meninggalkan kekacauan. Pendekatan ini mengubah kegagalan parsial dari bencana operasional menjadi non-peristiwa.

Di balik perbaikan teknis, ada postur yang lebih luas. Bagian-bagian yang menyentuh state bersama yang dapat dimutasi — branch git, siklus hidup worktree — kini dibangun seperti yang diharapkan dari insinyur junior yang teliti: tolak hal yang ambigu, jangan pernah tebak, dan di mana akar masalah tak bisa diperbaiki, pasang tripwire agar kegagalan berisik, bukan diam.

Postur itulah yang menjadi takeaway nyata, dan ia spesifik untuk tooling agen, di mana modus kegagalan dominan adalah tebakan salah yang percaya diri dan diam. Tidak satu pun dari temuan ini terjangkau dengan menatap kode lebih lama. Butuh menjalankan alat dan mengamati apa yang benar-benar terjadi, bukan apa yang disuruh — yang, ternyata, adalah satu-satunya bagian yang tidak bisa dikerjakan framework pun.

Bagi ekosistem pengembang Indonesia yang mulai mengadopsi alur kerja AI-assisted coding seperti Cursor, Windsurf, atau Claude Code, pelajaran ini sangat relevan. Banyak tim lokal membangun wrapper atau orkestrasi sendiri di atas LLM, dan kecenderungan alami adalah mempercayai desain di kertas. Nyata di lapangan, perilaku sistem versi terdistribusi seperti git penuh kejutan yang hanya muncul di runtime.

Praktisi di Indonesia sebaiknya mengadopsi prinsip "verify, don't trust" saat mengintegrasikan agen AI ke pipeline CI/CD atau sistem deploy otomatis. Tripwire sederhana — seperti pengecekan SHA commit sebelum merge, atau validasi state branch pasca-eksekusi — bisa mencegah insiden yang sulit didiagnosis di production. Tooling open-source seperti `git worktree` powerful, tapi perilaku edge-case-nya butuh pengujian stres nyata, bukan asumsi dokumentasi.

Mengapa Ini Penting

Artikel ini mengungkap kesenjangan fundamental antara desain teoretis dan perilaku runtime dalam tooling agen AI — area yang masih minim literasi di komunitas pengembang Indonesia. Sebagian besar tim lokal baru mulai membangun orkestrasi sendiri di atas LLM, dan cenderung mengabaikan pengujian integrasi nyata pada sistem versi terdistribusi. Temuan non-determinisme git worktree dan korupsi config core.bare adalah contoh nyata bug yang tidak akan tertangkap unit test atau code review, tapi hanya muncul di production. Prinsip "verify, don't trust" dan desain state yang tidak meninggalkan kekacauan saat agen gagal, adalah pola arsitektur yang wajib diadopsi sejak dini agar ekosistem AI engineering Indonesia tidak mengulang kesalahan yang sama.

Sumber Asli
Dev.to
Tanggal
14 Juli 2026
Waktu Baca
5 menit