AI Agent untuk Migrasi Kode Legacy: Panduan

Migrasi itu terbatas, repetitif, dan dapat diverifikasi, yang merupakan kebalikan dari tugas terbuka tempat agen kesulitan. Versi framework atau bahasa target mendefinisikan arti selesai, transformasi yang sama berlaku di banyak berkas, dan sistem yang ada adalah oracle rujukan yang bisa Anda pakai untuk menguji hasilnya. Bentuk itu langsung memainkan kekuatan seorang agen.
Bangun jaring pengaman terlebih dahulu. Characterization test menegaskan apa yang dilakukan kode hari ini alih-alih apa yang seharusnya dilakukannya, mengubah sistem lama menjadi spesifikasi yang dapat dieksekusi yang harus dipertahankan agen. Tanpa mereka Anda memercayai pemahaman agen atas kode yang tak seorang pun lain ingat, dan perubahan perilaku yang diam-diam akan lolos tanpa disadari.
Gunakan headless mode untuk menskripkan satu agen per modul, sehingga kegagalan di satu unit tetap terisolasi alih-alih menggagalkan batch. Beri tiap agen satu modul dan satu target test yang harus lolos, catat tiap hasil, dan jalankan ulang hanya unit yang gagal. Kelompokkan perubahan terkait menjadi pull request yang dapat ditinjau alih-alih satu diff raksasa.
Mereka kesulitan dengan pengetahuan turun-temurun yang tak pernah masuk ke dalam kode: workaround untuk bug sebuah vendor, urutan yang diam-diam diandalkan sebuah job di hilir. Agen membaca sintaks dengan fasih tetapi dengan percaya diri memodernkan perilaku tak terdokumentasi hingga hilang. Sebuah keanehan yang terlihat seperti bug kadang menyangga beban, dan itulah yang harus ditangkap characterization test.
Ya. Sebuah characterization test yang lolos tetap melewatkan perilaku yang tak terpikir untuk ditangkap, jadi jaga seorang manusia di tombol merge. Karya Simon Willison tentang async code-research agent menyarankan membiarkan agen mencoba migrasi di branch sekali pakai atau paralel, memperlakukan keluarannya sebagai draf, dan membiarkan seseorang memutuskan apa yang benar-benar di-merge.

Ringkasan Utama
Migrasi legacy, upgrade framework, dan port bahasa itu terbatas, repetitif, dan dapat diverifikasi, yang membuatnya sangat cocok untuk AI agent yang dijalankan dalam batch headless. Satu hal yang tak bisa ditawar adalah jaring pengaman: characterization test yang mematok perilaku saat ini sebelum satu baris pun berubah, agar Anda sadar ketika sebuah agen memodernkan sebuah aturan hingga lenyap.
Migrasi legacy adalah pekerjaan yang tidak diinginkan siapa pun dan yang cepat atau lambat dibutuhkan setiap basis kode: pindah dari framework yang usang, port layanan lama ke bahasa yang didukung, naikkan dependensi yang masih diimpor tiga ratus berkas. Ia membosankan, mekanis, dan berisiko sekaligus, yang justru menjadikannya salah satu pekerjaan terbaik untuk diserahkan ke sebuah AI agent.
Masalahnya, kode legacy menjadi legacy justru karena tidak ada yang ingat mengapa ia melakukan apa yang dilakukannya, dan seorang agen akan dengan riang menulis ulang perilaku yang tidak dipahaminya. Panduan ini membahas mengapa migrasi cocok untuk agen, cara membangun jaring pengaman terlebih dahulu, dan di mana pekerjaan itu tetap bisa salah.
Kebanyakan tugas agen bersifat terbuka, dan yang terbuka itulah tempat agen kesulitan. Migrasi adalah kebalikannya: tujuannya terdefinisi, transformasinya berulang di banyak berkas, dan keberhasilannya dapat dicek terhadap perilaku lama. Bentuk itu memainkan kekuatan seorang agen.
Tiga sifat menjadikan migrasi sebagai kasus penggunaan yang menonjol:
Sebelum Anda memigrasikan apa pun, tangkap apa yang dilakukan kode itu hari ini. Characterization test, yang menegaskan perilaku saat ini alih-alih perilaku yang dimaksud, mengubah sistem lama menjadi spesifikasi yang dapat dieksekusi yang harus dipertahankan agen. Tanpa mereka, Anda memercayai pemahaman agen atas kode yang tak seorang pun lain juga memahaminya.
Begitu jaringnya terpasang, migrasi terparalelisasi dengan rapi. Headless mode memungkinkan Anda menskripkan satu agen per modul, sehingga kegagalan di satu unit tetap terisolasi alih-alih menggagalkan batch:
# One headless agent per module, isolated failures
for mod in $(cat modules.txt); do
claude -p "Port $mod from Enzyme to React Testing Library. \
Keep behavior identical. Run npm test -- $mod until it passes." \
--output-format json >> migration.log
doneBeri tiap agen satu modul dan satu target test yang harus lolos, bukan seluruh repo. Tugas kecil yang terisolasi menjaga kegagalan tetap terbatas, membuat kemajuan mudah dilacak di log, dan membiarkan Anda mengulang satu unit tanpa menjalankan ulang semua yang sudah berhasil.
Sebuah migrasi yang berulang mengikuti busur yang sama entah Anda mengupgrade framework atau memport bahasa. Bergeraklah dalam irisan, dan verifikasi tiap irisan sebelum yang berikutnya.
Kegagalan berkumpul di sekitar hal-hal yang disembunyikan kode legacy. Seorang agen membaca sintaks dengan fasih tetapi tidak bisa melihat pengetahuan turun-temurun yang tak pernah masuk ke dalam kode: workaround untuk bug sebuah vendor, urutan yang diam-diam diandalkan sebuah job di hilir.
Karya Simon Willison tentang async code-research agent menyarankan sikap yang berguna: biarkan agen mencoba migrasi di branch sekali pakai atau paralel, perlakukan keluarannya sebagai draf, dan biarkan manusia yang memutuskan apa yang benar-benar di-merge. Agen menjelajah; Anda menyetujui.
Agen dengan percaya diri memodernkan perilaku tak terdokumentasi hingga hilang. Sebuah keanehan yang terlihat seperti bug kadang bersifat menyangga beban, dan seorang agen akan membersihkannya tanpa ragu. Characterization test itulah yang menangkap ini: tanpa mereka, regresi terkirim diam-diam dan muncul di produksi berminggu-minggu kemudian.
Begitu satu migrasi berfungsi dari ujung ke ujung, polanya berskala, selama gerbang review ikut berskala dengannya.
AI agent benar-benar pandai dalam migrasi legacy, tetapi hanya di dalam harness yang mengasumsikan mereka akan salah pada kasus-kasus halus. Bangun jaring karakterisasi, migrasikan dalam irisan yang dapat diverifikasi, sebar dengan run headless, dan jaga seorang manusia di tombol merge. Lakukan itu dan migrasi yang tidak diinginkan siapa pun menjadi akhir pekan penuh batch terawasi alih-alih satu kuartal penuh kecemasan.