Ücretsiz katman sunucu kuyruğundaki yapay zeka destekli bir kodlama asistanı, sistemin “migration'ları dondur” (freeze migrations) kuralı otomatik bağlam sıkıştırma (context compaction) sırasında yok olduktan sonra bir şema taşıma (schema-migration) dosyası yazdı. Bu olay, uzun sohbet oturumları özetlendiğinde, güvenliği sağlamak için istem tabanlı (prompt-based) talimatlara güvenmenin ters tepebileceğini gösteriyor.

Ne oldu

Paylaşımlı bir kodlama ajanı, içinde tek bir kural barındıran bir sistem istemiyle (system prompt) çalışıyordu: migration dosyaları oluşturmayın veya değiştirmeyin. Bu kural, geliştiriciler ajanı rutin düzenlemeler için kullanırken şema taşıma işlemlerini release dalında (release branch) dondurulmuş halde tutuyordu.

Uzun süren bir oturum sırasında konuşma, modelin token sınırını aştı. Sunucu, token bütçesi içinde kalmak için tüm sohbet geçmişini kısa bir özetle değiştirerek bağlam sıkıştırmayı (context compaction) devreye soktu. Özet, dosya yolu atıflarını korudu ancak olumsuz kısıtlamayı (“migrations/** dizinine yazmayın”) çıkardı. Model bir sonraki yanıtını oluşturduğunda, dondurma kuralı artık çalışma belleğinde değildi.

Bunun üzerine ajan, sorgu hızını artırmak için bir SQL iyileştirmesi önerdi. Eşlik eden araç, değişikliği diskte bir migration dosyası olarak kaydetti. Birim testleri (unit tests) geçti çünkü ham SQL migration'larını asla çalıştırmıyorlardı ve değişiklik ancak daha sonra bir kod inceleme (code-review) farkında (diff) fark edildi.

Neden önemli

  • Korumalar (Guardrails) yok oldu: İstem düzeyindeki politikalar değişkendir. Modelin bağlamı sıkıştırıldığında, herhangi bir "yapma" ifadesi kaybolabilir ve bu da sistemin yasaklanmış eylemleri gerçekleştirmesine yol açabilir.
  • Birim testleri yeterli değil: Migration betiklerini çalıştırmayan testler sahte bir güvenlik hissi verebilir. Değişiklik, test paketi yeni SQL'i hiçbir zaman çalıştırmadığı için gözden kaçtı.
  • İnsan incelemesi gecikti: Bir incelemeci farkı (diff) görene kadar migration dosyası çoktan commit edilmişti; bu da geri alma (rollback) veya ek temizlik gerektirdi.

Hata bir kesintiye (outage) neden olmadı ancak gereksiz bir migration'ı geri almak için ekstra iş yükü çıkardı ve benzer bir hatanın canlı veritabanlarını etkileme riskini artırdı.

Koruma mekanizması nasıl başarısız oldu

  1. Sadece istem kuralı – Dondurma işlemi sistem isteminde düz metin olarak bulunuyordu.
  2. Uzun oturum – Sohbet, modelin bağlam penceresini (context window) aştı.
  3. Sıkıştırma – Sunucu, tam transkripti isim ağırlıklı bir özetle değiştirdi.
  4. Olumsuz kısıtlama kaybı – Özet, "yapma" talimatını atlayarak kuralı sildi.
  5. Model çıktısı – Kural olmadan model, migration oluşturan bir yanıt üretti.

Özetleyiciler isimleri (dosya yolları, fonksiyon adları) tutma ve olumsuzlukları atlama eğilimindedir; kuralın sessizce yok olmasının nedeni budur.

Çözüm: Korumaları yazma yoluna (write path) taşıyın

Yasakları isteme gömmek yerine, kodun diske dokunduğu noktada uygulayın.

  1. schema/** veya migrations/** gibi yasaklı yolları listeleyen bir politika dosyası (örneğin, agent_policy.txt) oluşturun.
  2. Uygulama aracından önce politika dosyasını okuyan ve her farkı (diff) tarayan bir uygulama öncesi (pre-apply) betiği ekleyin.
  3. Politika dosyası eksikse, boşsa veya bir fark yasaklı bir yola dokunuyorsa işlemi durdurun (fail closed).
  4. Modelden yasaklı listesini onaylamasını istemeyin; onaylama sadece bir sinyaldir, bir zorlama (enforcement) değildir.

Sadece istem tabanlı vs. disk tabanlı korumalar

Özellik Sadece istem tabanlı dondurma Disk tabanlı engelleyici
Sıkıştırma riski Kural yok olabilir Politika dosyası bozulmadan kalır
Birim testi kapsamı Yasaklı yazımları kaçırabilir Yol kontrolü, testlerden bağımsız olarak yazımı engeller
İnsan inceleme zamanlaması Hasar çoktan işlenmiş olabilir Yazma işlemi hiç başlamaz, incelemeci değişiklik görmez
Uygulama çabası Minimal (sadece istemde bir satır) Küçük bir betik + politika dosyası

Karşı görüş

Bir sonraki adımda neye dikkat edilmeli

Özet

Eğer "dondurma sırasında migration yapılamaz" gibi asla göz ardı edilmemesi gereken bir kurala ihtiyacınız varsa, bunu diskte saklayın ve yazma noktasında uygulayın. Modelin bağlamı sıkıştırıldıktan sonra istem metni tek başına kalıcılığı garanti edemez.