# VC-102 · Ajan düzelttiğini söylüyor ama değişen davranış doğrulanmadan kabul ediliyor

Ajan dosyayı değiştirdikten sonra sorunun çözüldüğünü bildiriyor ve iş kapanıyor. Aynı hata yolunun yeni sürümde denenmemesi, açıklamanın çalışmış kanıt yerine geçmesine yol açıyor.

- Önem: YÜKSEK. Etkisi orta. Her gün, sıradan kullanımda tetiklenir.
- Önem notu: Doğrulanmadan kabul edilen değişiklikte hatalı davranışın sürmesi esas alınır. Etki değişen işin para, yetki veya veriyle ilişkisine bağlıdır. Her metin düzeltmesi için kapsamlı test gerekmez.
- Eksen ve kategori: Sağlamlık, 16 Sözleşmeler ve testler
- Yığın: Her yığın
- Yapay zekâ kodunda: ölçülmedi. Dayanak: uzman görüşü.
- Ne zaman bakılır: İlk yayından önce, Her ay
- CWE: yok. Doğrulanmamış düzeltme kabulü bir geliştirme süreci eksikliğidir. Ortaya çıkabilecek belirli kod zayıflığı bilinmeden CWE eşlemesi yapılmaz.
- Checklist ifadesi: Ajanın düzelttim dediği hata, değişiklikten sonra yeniden denenip doğrulanıyor.
- Son inceleme: 4 Ekim 2026, Komünite editörlüğü
- Adres: https://vibecheck.komunite.com.tr/madde/ajanin-duzelttim-iddiasi-dogrulanmadan-kabul-ediliyor

## 60 saniyelik kontrol

Yalnız kendi uygulamanda ya da yazılı izin aldığın sistemde dene. Bu bir sızma testi değildir.

1. Düzeltildi iddiasının hangi komut ve gözlenen sonuca dayandığını bul.
2. Çalışan kontrolün gerçekten değişen dosyayı kullandığını doğrula.
3. Hatayı gösteren denemenin eski sürümde başarısız olduğunu kontrol et.
4. Son testten sonra aday dosyanın yeniden değişip değişmediğine bak.

## Ne oluyor

Ajan dosyaları değiştiriyor ve hatayı düzelttiğini söylüyor. Açıklama makul, değişiklik küçük, sonuç mesajı kendinden emin. Bu görünüm işin kapatılması için yeterli sanılabilir. Ancak açıklamanın doğruluğu ile uygulamanın yeni davranışı ayrı şeylerdir. Aynı hata yolunu yeni sürümde çalıştırmadan sorunun gerçekten giderildiğini bilemezsin.

Doğrulama da yalnız bir komut adı yazmak değildir. Komut gerçekten çalışmış mı, doğru dosyayı mı kullanmış, hangi ortamda hangi sonucu üretmiş? Önce test geçip sonra aday dosya değişmişse önceki sonuç yeni adayın kanıtı olmaz. Başka pakette çalışan bir test de değişen uç hakkında doğrudan güvence vermeyebilir.

Bu madde her küçük değişiklik için bütün test takımını tekrar tekrar çalıştırmayı önermez. Metin düzeltmesinde dikkatli diff incelemesi yeterli olabilir. Para, yetki veya kalıcı veri değiştiren davranışta ise hedefli kanıt gerekir. Kabul koşulu, ajanın ne söylediğinden uygulamanın ne yaptığına taşınmalıdır. Yerel kanıtın canlı dağıtımın tamamlandığı anlamına gelmediği de raporda açık kalmalıdır.

## Gerçek olay

Bu maddeye belirli bir modelin yanlış düzeltme oranını eklemiyoruz. NIST'in kod doğrulama rehberi otomatik kontrollerin tekrarlanabilir biçimde çalıştırılmasını ve önceki hataları yakalayan testlerin yeniden kullanılmasını öneriyor. Gereksinimden türeyen olumsuz senaryoların da doğrulama kapsamına alınmasını anlatıyor. [Kod doğrulama rehberi](https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity/software-supply-chain-security-guidance-3)

Bu kaynak ajan mesajını bir test çıktısı olarak kabul etmeyi desteklemez. Buradaki sonuç bir süreç yorumudur. Düzeltme iddiası, gözlenmiş sonuçla ve sınanan adayla ilişkilendirilmelidir. Örnekte bu ilişki yerel dosya özetleri ve gerçekten çalıştırılan bir kabul betiğiyle gösterilir. Süreç eksikliği için doğrudan bir CWE eşlemesi yapılmaz. Yanlış düzeltmenin belirli bir güvenlik zayıflığı oluşturup oluşturmadığı ayrıca incelenir.

## Yapay zekâ bunu neden üretiyor

**Model açıklamayı koddan tamamlar.** Ajan bir koşulu değiştirdiğinde bunun beklenen sorunu çözdüğünü çıkarabilir. Çıkarım doğru olabilir, fakat çalıştırma gözlemi değildir. Koşula hiç ulaşılmayan başka bir yol veya farklı yapılandırma sonucu değiştirebilir. Raporun değişiklik gerekçesiyle yürütülen kontrolü ayrı yazması, bu iki kanıt düzeyini birbirinden ayırır. Kendinden emin anlatım kabul ölçütü olmamalıdır.

**Planlanan komut yapılmış gibi kalabilir.** Uzun görevde ajan bir kontrolü sıradaki adım olarak belirtip başka soruna geçebilir. Kesinti veya bağlam değişimi sonrasında komutun gerçekten çalışıp çalışmadığı karışabilir. Sonuç raporu araç çıktısına bağlanmadığında eksik adım fark edilmez. Komutun çıkış durumu, hedefi ve çalıştırma kaydı bu yüzden açık tutulmalıdır. Çalıştırılamayan kontrol dürüstçe belirtilmelidir.

**Yakın bir test yeterli sanılabilir.** Ajan benzer dosyanın testini çalıştırıp değişen davranışın da kapsandığını varsayabilir. Testin kullandığı import, mock veya veri yolu gerçek değişikliğe ulaşmıyor olabilir. Kabul denemesi iddia edilen hatayı önce gösterebiliyorsa bu yanlış güven azalır. Aynı testin kusurlu sürümde neden düştüğü anlaşılmadan yalnız yeşil sonucu izlemek yeterli olmaz.

**Son değişiklik kanıttan sonra gelebilir.** Test geçtikten sonra yapılan küçük temizlik, import veya hata yolu düzenlemesi davranışı yeniden değiştirebilir. Ajan önceki başarıyı raporlamaya devam edebilir. Kanıtın dosya özeti veya aday sürümle eşlenmesi bu zaman farkını görünür kılar. Bunlar olası üretim mekanizmalarıdır. Bütün AI araçlarının aynı hatayı yaptığı veya belirli sıklıkta yanlış rapor verdiği iddiası değildir.

## Etki

Çözülmemiş hata tamamlandı diye kapanabilir. Sonraki kişi önceki rapora güvenir ve aynı davranışı yeniden incelemez. Kullanıcı problemi tekrar yaşadığında hem düzeltme hem önceki kabul süreci yeniden ele alınır. Para veya erişim sınırında yanlış güvenin iş etkisi daha yüksek olabilir.

Aşırı doğrulama da zaman ve kaynak tüketir. Bu nedenle amaç mümkün olan her kontrolü çalıştırmak değildir. İddia edilen değişikliğin riskini karşılayan yeterli kanıtı üretmek ve sınırını doğru anlatmaktır. Çalışan yerel örnek bütün dağıtımın sağlık raporu sayılmamalıdır.

## Nasıl anlarsın

Düzelttim cümlesinin yanına hangi gözlemin konduğunu bul. Komut çıktısı, sınanan dosya ve başarı koşulu birbiriyle eşleşiyor mu? Testten sonra değişiklik yapılmış mı? Kontrol yalnız derleme veya tür denetimiyse bunun iş davranışını gerçekten sınayıp sınamadığını değerlendir.

Örnekte aynı kabul betiği kusurlu ve düzeltilmiş fiyat işlevinde çalışır. Kötü sürüm ajanın bildirimini yeterli sayar. İyi sürüm gerçek alt süreç sonucunu denetler, aday ve test dosyasının özetini kaydeder. Kabul betiği çalışmazsa iş geçmez. Bu deney canlı yayın yapmaz. [Alt süreç API'si](https://nodejs.org/api/child_process.html)

## Nasıl düzeltirsin

1. **İddiayı somutlaştır.** Hangi girdi hangi yanlış sonucu üretiyordu, düzeltmeden sonra ne bekleniyor? Beklentiyi uygulamanın mevcut çıktısından bağımsız yaz.
2. **Eski hatayı göster.** Denemenin kusurlu sürümde ilgili davranış yüzünden başarısız olduğunu doğrula. Kurulum hatası regresyon kanıtı değildir.
3. **Adayı çalıştır.** Aynı kabul denemesini yeni sürümde yürüt. Normal kullanımın korunmasını da sınayacak örnek ekle.
4. **Kanıtı bağla.** Sınanan sürüm, komut ve sonucu kaydet. Çok dosyalı projede yalnız tek dosyanın özetine güvenme.
5. **Sınırı yaz.** Yapılamayan ortam kontrolünü ve yerel testin kapsamını belirt. Kanıt sonrası davranışı etkileyen değişiklik varsa ilgili kontrolü yenile.

## Bir daha olmasın

Ajan raporunda yapılan değişiklikle yürütülen doğrulamayı ayrı iste. Kabulü açıklamanın ikna gücüne değil, ilgili gözleme bağla.

## Sınır

Bu madde testlerin doğru beklenti yazdığını tek başına garanti etmez. Örneğin kabul betiği önceden incelenmiş ve sabitlenmiş olmalıdır. Boş betik başarılı çıkış verebilir, bunun denetimi test niteliği konusudur. Alt süreç bir güvenlik sandbox'ı değildir. Güvenilmeyen kod ayrı ve sırsız ortam ister. Eşzamanlı değişiklik bulunmayan tek dosyalı yerel deney, bütün depo veya canlı sürüm için kanıt sayılmaz.

## Düzeltme kodları

### Node.js: Aday dosyaya bağlı kabul kanıtı

Önce:

```js
// kabul/dogrula.js, açıklama amaçlı. Yalnız incelenmiş yerel aday dosyaları.
import { createHash } from 'node:crypto';
import { readFileSync } from 'node:fs';
export function verifyFix(candidatePath, testPath, report) {
  const digest = createHash('sha256').update(readFileSync(candidatePath)).digest('hex');
  // Ajanın özeti çalıştırma kanıtı yerine kabul ediliyor.
  if (report.fixed !== true) throw new Error('Düzeltme bildirilmedi');
  return { accepted: true, digest };
}
// testPath kabulü belirleyen bağımsız regresyon betiğidir.
// Kötü sürüm bu betiği hiç çalıştırmaz.
// Adayın hash değerini hesaplamak davranışını doğrulamaz.
// Bu örnek herhangi bir dalı birleştirmez veya yayın yapmaz.
// Güvenilmeyen kodun çalıştırılması için izolasyon ayrıca gerekir.
// Kabul metni, gerçek test sonucunun yerine geçmemelidir.
```

Sonra:

```js
// kabul/dogrula.js, açıklama amaçlı. Yalnız incelenmiş yerel aday dosyaları.
import { createHash } from 'node:crypto';
import { readFileSync } from 'node:fs';
import { spawnSync } from 'node:child_process';
import { pathToFileURL } from 'node:url';
const digest = file => createHash('sha256').update(readFileSync(file)).digest('hex');
export function verifyFix(candidatePath, testPath, report) {
  const before = digest(candidatePath), testDigest = digest(testPath);
  // testPath incelemeyle sabitlenen ve assert içeren bağımsız kabul betiğidir.
  const result = spawnSync(process.execPath, [testPath], {
    encoding: 'utf8', timeout: 5000, maxBuffer: 65536,
    env: { CANDIDATE_FILE: pathToFileURL(candidatePath).href },
  });
  if (result.error || result.status !== 0) throw new Error('Doğrulama geçmedi');
  if (digest(candidatePath) !== before || digest(testPath) !== testDigest) {
    throw new Error('Doğrulanan dosyalar değişti');
  }
  return { accepted: true, digest: before, testDigest };
}
// Alt süreç güvenlik sandbox'ı değildir. Yalnız sırsız, incelenmiş örneklerde kullan.
// Çok dosyalı projede kanıtı bütün aday sürüme bağlayan CI kaydı gerekir.
```

Düzeltmeyi kanıtlayan test:

```js
// kabul/dogrula.test.mjs, açıklama amaçlı. Gerçek alt süreç ve sentetik aday.
import test from 'node:test';
import assert from 'node:assert/strict';
import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
const { verifyFix } = await import(process.env.ORNEK_DOSYA);
test('düzelttim iddiası hatalı adayı veya çalışmayan denemeyi geçirmez', () => {
  const dir = mkdtempSync(join(tmpdir(), 'vc102-'));
  try {
    const candidate = join(dir, 'candidate.mjs'), check = join(dir, 'check.mjs');
    writeFileSync(check, `import assert from 'node:assert/strict';
      const { net } = await import(process.env.CANDIDATE_FILE);
      assert.equal(net(100,20),80); assert.equal(net(20,30),0);`);
    writeFileSync(candidate, 'export const net=(price,discount)=>price-discount;');
    assert.throws(() => verifyFix(candidate, check, { fixed: true }));
    writeFileSync(candidate, 'export const net=(price,discount)=>Math.max(0,price-discount);');
    const result = verifyFix(candidate, check, { fixed: true });
    assert.equal(result.accepted, true);
    assert.match(result.digest, /^[a-f0-9]{64}$/);
    assert.match(result.testDigest, /^[a-f0-9]{64}$/);
    writeFileSync(check, 'throw new Error("TEST_SETUP_FAILED");');
    assert.throws(() => verifyFix(candidate, check, { fixed: true }));
  } finally { rmSync(dir, { recursive: true, force: true }); }
});
```

## Ajan kuralı (AGENTS.md)

```md
## Düzelttim iddiası doğrulanmıyor (vibecheck VC-102)
- Düzeltme iddiasını gözlenen davranışa bağla.
- Çalışan komut, aday sürüm ve sonucu kaydet.
- Regresyon denemesinin eski hatayı yakaladığını göster.
- Çalıştırılmayan kontrolü geçti diye yazma.
- Değişiklikten sonra eski test sonucunu yeniden kullanma.
```

## Kaynaklar

1. [Recommended Minimum Standard for Vendor or Developer Verification of Code](https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity/software-supply-chain-security-guidance-3), NIST, 7 Ekim 2021
2. [Node.js Child Process API](https://nodejs.org/api/child_process.html), Node.js
3. [Node.js Assert API](https://nodejs.org/api/assert.html), Node.js
4. [Node.js Test Runner](https://nodejs.org/api/test.html), Node.js

---

vibecheck · Komünite editörlüğü. Metin CC BY 4.0, prompt ve kural parçaları MIT-0. Kaynak: https://vibecheck.komunite.com.tr/madde/ajanin-duzelttim-iddiasi-dogrulanmadan-kabul-ediliyor
