Pembangun kini boleh memulakan beberapa sesi ejen pengekodan secara serentak tanpa bimbang tentang fail keadaan (state files) yang ditulis semula atau pertembungan fail tersembunyi. Corak penasihat “share-nothing” mengasingkan ruang kerja setiap ejen dan memberi amaran tentang potensi konflik. Pendekatan ini menggantikan kunci keras (hard locks) dengan daftar (registry) ringan yang menandakan kerja yang bertindih sebelum ia berlaku, memastikan saluran paip (pipelines) terus berjalan walaupun sesi mengalami kegagalan (crash).
Mengapa ejen selari menimbulkan masalah
Menjalankan lebih daripada satu pembantu pengekodan automatik dalam satu repositori mempercepatkan penjanaan kod, pengujian, atau penstrukturan semula (refactoring). Dalam praktiknya, dua masalah muncul dengan segera.
- Kerosakan keadaan (State corruption) – Dua ejen menulis ke fail keadaan yang sama; penulisan terkemudian akan menulis semula penulisan sebelumnya, sekali gus memadamkan kemajuan.
- Pertembungan fail (File collision) – Dua ejen menyunting fail sumber yang sama tanpa menyedari kehadiran satu sama lain. Konflik akan muncul kemudian, apabila perbezaan (diff) menunjukkan perubahan yang bercanggah.
Kedua-dua isu ini membazirkan masa pembangun dan boleh memperkenalkan pepijat (bugs) yang sukar dikesan.
Peraturan “share nothing”
Idea utamanya mudah: setiap ejen mendapat ruang kerja (scratchpad) peribadi sendiri pada cakera dan hanya menulis ke fail yang tergolong dalam sesi tersebut. Hanya satu fail yang dikongsi secara sengaja dibenarkan bagi setiap cawangan (branch), dan ia mengikut peraturan “last-writer-wins”—ejen mana sahaja yang menulis paling akhir akan menentukan kandungan muktamad.
Satu lapisan kehadiran (presence layer) menjejaki setiap sesi aktif:
- Nama cawangan (branch)
- Senarai fail yang sedang diakses
- Cap masa aktiviti terakhir
Apabila sesi baharu bermula, ia akan merujuk kepada daftar tersebut. Jika sesi lain sedang mengendalikan mana-mana fail yang sama, pembangun akan menerima amaran sebelum sebarang kerja bermula.
Kunci penasihat (advisory) vs. kunci penghalang (blocking)
Fail kunci tradisional bertindak seperti jalan mati: sebaik sahaja kunci diambil, sebarang proses lain akan menunggu sehingga kunci dilepaskan. Jika sesi pemilik mengalami kegagalan (crash), kunci tersebut boleh kekal tanpa tamat, memaksa pencarian manual untuk fail kunci yang usang.
Model penasihat adalah lebih lembut. Ia mengeluarkan amaran apabila potensi konflik dikesan tetapi tidak menghentikan sesi baharu. Jika entri daftar sudah lama—bermaksud proses yang menciptanya tidak lagi wujud—sistem hanya akan memberi amaran, membolehkan pembangun memutuskan sama ada ingin meneruskan atau tidak.
Cara melaksanakan corak ini
- Bahagikan keadaan mengikut penulis – Berikan setiap ejen direktorinya sendiri untuk fail sementara dan keadaan. Simpan fail kongsi untuk data global yang sebenar dan hanya gunakan peraturan “last-writer-wins” di sana.
- Suntik kesedaran semasa pelancaran – Sebelum ejen bermula, baca daftar kehadiran dan bandingkan senarai fail yang diminta dengan entri sedia ada. Batalkan atau beri amaran jika terdapat pertindihan.
- Sahkan kelangsungan semasa masa bacaan – Apabila merujuk entri daftar, semak sama ada ID proses yang direkodkan masih berjalan pada OS. Buang entri yang milik proses yang telah mati.
- Utamakan penasihat berbanding penghalang – Biarkan pembangun mengekalkan kawalan. Amaran membolehkan mereka meneruskan, menjeda, atau membatalkan, sekali gus mengelakkan kebuntuan (deadlock).
- Jejak keadaan menunggu – Apabila banyak ejen aktif, perhatian pembangun menjadi kekangan (bottleneck). Paparkan ejen mana yang sedang menunggu input manusia supaya kerja boleh disusun semula mengikut keutamaan.
Semua ini boleh dibina dengan direktori fail JSON biasa; tiada pangkalan data luaran atau bas mesej (message bus) diperlukan. Format storan yang ringkas memudahkan sistem untuk diaudit dan mudah alih merentasi pelbagai persekitaran.
Risiko dan hujah balas
Sesetengah pasukan mungkin berhujah bahawa kunci keras menjamin keselamatan: tiada dua ejen yang boleh menulis ke fail yang sama. Imbalannya ialah pengurangan daya tahan—sesi yang terhenti meninggalkan kunci yatim (orphaned locks) yang melambatkan keseluruhan aliran kerja.
Perkara yang perlu diperhatikan
Jika anda mengendalikan pelbagai pembantu kod dipacu AI, corak penasihat “share nothing” menawarkan jalan pragmatik untuk mengelakkan mereka daripada mengganggu satu sama lain. Dengan mengasingkan keadaan, mendedahkan niat lebih awal, dan membiarkan manusia memutuskan bila untuk meneruskan, kaedah ini mengimbangi keselamatan dengan fleksibiliti yang diperlukan oleh saluran paip pembangunan moden.
