All Posts
TRMarch 31, 2026 4 min read

Organik Kod Üretmek: Çevrimiçi Depo Hafızası ile Gelecek Pull Request'leri Öngörmek

Giriş

Yapay zeka destekli yazılım mühendisliği son üç yılda gözle görülür bir ivme kazandı. Büyük dil modelleri (Large Language Models, LLM) üzerine inşa edilmiş kodlama agent'ları, SWE-bench gibi küratörlü benchmark'ların önemli bir kısmını başarıyla tamamlarken, HumanEval ve MBPP gibi klasik kütüphaneler neredeyse doyuma ulaştı. Bu başarı rakamları, LLM agent'larının endüstriyel kullanıma hazır olduğu yönünde bir iyimserlik yarattı. Ancak karmaşık kod depolarının profesyonel bakımcıları hala temkinli. Onların gözlemi net: AI üretimi kod genellikle fonksiyonel olarak doğru olsa da, gerçek projelerde sıklıkla reddediliyor. Reddedilme sebebi hata yapması değil, ürettiği kodun "yabancı" hissettirmesi; yani projeye hiç bakmamış birinin elinden çıkmış gibi olması.

Bu makale, "Learning to Commit: Generating Organic Pull Requests via Online Repository Memory" başlıklı çalışmayı detaylı bir şekilde ele alarak, kod üretiminde fonksiyonel doğruluğun ötesinde bir gereklilik olan "organiklik" (organicity) kavramını ve bu özelliği kazandırmak için önerilen Çevrimiçi Depo Hafızası (Online Repository Memory) mekanizmasını inceliyor.

Ana Analiz: Organiklik Açığı ve Statik Anlayışın Sınırları

Mevcut kodlama agent'larının gerçek dünyadaki başarısızlıklarının kök nedeni, değerlendirme paradigmalarının yapısal bir körlüğüne dayanıyor. SWE-bench gibi benchmark'lar yazılım mühendisliğini izole, tek seferlik görevler dizisi olarak ele alıyor: Agent bir issue görüyor, kod tabanını düzenliyor ve testler geçerse başarılı sayılıyor. Ancak bu süreçte agent, birikimli bir bilgiyi (accumulated knowledge) ileriye taşımıyor. Dahası, değerlemeler tipik olarak kronolojik sırayı gözetmeksizin yapılıyor ve bir deponun kurallarının zamanla nasıl evrildiği göz ardı ediliyor.

Burada karşımıza "organiklik" kavramı çıkıyor. Organik kod, sadece sözdizimsel olarak doğru veya fonksiyonel olarak çalışan kod değil; projenin içsel mimarisine, yıllar içinde birikmiş örtük kısıtlamalara, içsel API'lerin (internal APIs) kullanım stillerine ve bakımcıların tercihlerine uygun olarak "büyümüş" gibi görünen koddur. Mevcut sistemler depoya son snapshot üzerinden eriştiğinde, yani kodun mevcut haline baktığında, aslında sadece bitmiş binayı görüyor; ancak hangi desteklerin, arayüzlerin ve sınırların neden eklendiğini, yani binanın inşa ediliş mantığını kaçırıyor. Sonuçta ortaya çıkan "yabancı kod" (alien code), mevcut yardımcı fonksiyonların gereksiz yeniden implementasyonlarıyla dolu, mimari olarak uyumsuz ve stilistik olarak yabancı pull request'ler üretiyor.

Bu durum, yeni bir mühendisin olgun bir kod tabanına katılma süreciyle tezat oluşturuyor. İnsan mühendis hemen editör açmaz; önceki commit'leri okur, modül sınırlarını inceler, hangi içsel araçların idiomatik olduğunu keşfeder ve bakımcıların tercihlerini içselleştirir. Mevcut agent'lar bu aşamayı tamamen atlıyor.

Ana Analiz: Supervised Contrastive Reflection ve Beceri Çıkarımı

"Learning to Commit" çerçevesi, bu açığı Çevrimiçi Depo Hafızası ile kapatmayı öneriyor. Temel fikir, organikliğin commit geçmişinden öğrenilebilir olmasıdır; çünkü commit geçmişi, projenin zaman içinde nasıl evrilmeyi seçtiğinin kaydını tutar.

Metodoloji sıkı bir kronolojik bölünmeye (chronological split) dayanıyor. Agent, belirli bir tarih kesme noktasından önceki commit'lere odaklanarak "denetimli karşıtlık temelli yansıtma" (supervised contrastive reflection) gerçekleştirir. Bu süreçte agent, geçmişteki her bir issue'yu çözmek için kör bir şekilde (blindly) tahminde bulunur, ardından ürettiği diff'i o konuda gerçekleşmiş oracle diff (gerçek değişiklik) ile karşılaştırır. Aradaki fark, sürekli büyüyen ve artımlı olarak güncellenebilen beceri (skill) kümesine damıtılır. Bu beceriler, kodlama stili, içsel API kullanımı ve mimari değişmezleri (architectural invariants) yakalayan, yeniden kullanılabilir desenlerdir.

Yeni bir PR açıklaması geldiğinde, agent artık jenerik ön eğitim bilgilerine (pretraining priors) güvenmek yerine, birikmiş bu becerileri kullanarak kod üretir. Bu sayede değişiklikler, projenin kendi evrimine dayanır; yani isimlendirme konvansiyonlarına, tercih edilen soyutlamalara ve bakımcı tercihlerine uyum sağlar.

Değerlendirme açısından bu yaklaşım önemli bir avantaj sunar: Ön eğitim verisi sızıntısını (data leakage) doğal olarak engeller. Beceriler sadece kesme noktasından önceki commit'lerden oluşturulurken, değerlendirme görevleri gerçekten gelecekte birleştirilmiş (genuinely future) commit'lerden çekilir. Başarı sadece fonksiyonel doğrulukla değil; kod stili tutarlılığı, içsel API yeniden kullanım oranı ve değiştirilmiş bölge tutarlılığı gibi çok boyutlu metriklerle ölçülür.

Kendi Yorumum ve Özgün Çıkarımlar

Bu çalışma, LLM sistemlerindeki en önemli paradigma değişimlerinden birini temsil ediyor: bağlamı tek bir oturum içinde yönetmekten, oturumlar ve zaman arasında hafızayı yönetmeye ve güncellemeye geçiş. Statik retrieval (bilgi getirim) yaklaşımlarından dinamik, büyüyen hafıza sistemlerine doğru bu kayma, sadece yazılım mühendisliğinde değil, evrimsel artefaktların bulunduğu her alanda kritik olacaktır.

Özellikle dikkat çekici olan, agent'ın "kod arkeolojisi" (code archaeology) yaparak öğrenmesidir. İnsan geliştiricilerin dokümantasyon okumaktansa, kodun tarihsel katmanlarını kazarak anlamlandırması gibi; agent da neden bir fonksiyonun Mart 2023'te değiştirildiğini anlamaya çalışıyor. Bu temporal (zamansal) yaklaşım, mevcut implementasyonun ne olduğundan ziyade, neden öyle evrildiğini kavramayı hedefliyor.

Supervised contrastive reflection'un getirdiği denetimli öğrenme unsuru da kritik. SWE-Bench-CL gibi çalışmalarda olduğu gibi sadece denetimsiz öz-yansıtma (unsupervised self-reflection) ile yetinilseydi, agent kendi kendini güçlendiren hatalar biriktirebilirdi. Ancak gerçek commit'lerle yapılan karşılaştırma, bir tür uzman denetimi (expert supervision) sağlıyor ve böylece organizasyonel bilginin güvenilir bir şekilde aktarılması mümkün oluyor.

Bu yaklaşımın hukuk belgeleri, tıbbi kayıtlar veya mimari tasarım geçmişleri gibi sıralı artefaktların olduğu diğer alanlara yayılmasını beklemek mantıklı. Her durumda, sistemin mevcut durumu anlaması yetmez; o duruma nasıl gelindiğini, hangi kararların alındığını ve bu kararların arkasındaki örtük kuralları kavraması gerekir.

Sonuç

"Learning to Commit" çalışması, kodlama agent'larının endüstriyel benimseme önündeki en büyük engellerden birini somut bir şekilde ele alıyor. Fonksiyonel doğruluğun yeterli olmadığı, kodun ait olduğu ekosistemin kurallarına uygun olarak "organik" bir şekilde üretilmesi gerektiği vurgusu ö