Örnek Oturum · İyi Bir Vibe Coding Seansının Anatomisi
Aşağıda gerçekçi bir oturum kaydı var: sandbox not uygulamasına arama kutusu ekleniyor. Sol taraf oturumun akışı, 🖍 işaretli kutular kenar notları — "burada neden böyle yapıldı" açıklamaları. Bu dosyayı Seviye 1'i bitirdikten sonra okuyun; her hamlenin dersini tanıyacaksınız.
KULLANICI:
Bağlam: sandbox klasöründeki not uygulaması; notlar tek sayfada listeleniyor. Hedef: liste üstüne arama kutusu — yazdıkça notları başlık ve içerikte filtrelesin. Kısıtlar: yeni paket kurma; mevcut renk/tasarımı değiştirme; sadece ilgili dosyalara dokun. Kabul: 3+ notla arama çalışıyor; kutu boşken tüm liste görünüyor;
npm run buildhatasız.
🖍 Kenar notu: 4-parça şablon (ders 1.1) eksiksiz. Özellikle kabul kriterindeki "kutu boşken tüm liste" maddesine dikkat — bu bir uç durumdur. Uç durumu baştan yazmak, sonra hata ayıklamaktan ucuzdur.
KULLANICI: (Shift+Tab — plan mode'a geçer)
🖍 Kenar notu: İş birden çok dosyaya dokunabilir; kullanıcı "önce plan" dedi (ders 1.3). Küçük bir yazı düzeltmesi olsaydı plan mode tören olurdu.
AI (plan): Şu planı öneriyorum: (1) app/page.tsx içine arama durumu ve kutu ekle; (2) filtre mantığını ayrı yardımcı fonksiyona koy; (3) components/NoteList.tsx'e filtrelenmiş listeyi geçir; (4) boş-sonuç durumu için "sonuç bulunamadı" mesajı ekle; (5) styles/theme.css'te kutu için yeni renk değişkeni tanımla.
KULLANICI: 5. adımı çıkar — kısıtlarda "tasarımı değiştirme" var, mevcut giriş alanı stilini aynen kullan. 4. adım iyi fikir, kalsın. Onaylıyorum.
🖍 Kenar notu: Plana gerçek bir itiraz (ders 1.3): AI "iyileştirme" refleksiyle kısıt dışına taşmıştı (yeni renk değişkeni). Kullanıcı planda yakaladı — iş yapıldıktan sonra yakalasa geri aldıracaktı. Ayrıca planın iyi önerisini (boş-sonuç mesajı) kabul etti: denetim, körü körüne reddetmek değildir.
AI: (değişiklikleri yapar, diff gösterir: app/page.tsx +18/−2, components/NoteList.tsx +9/−1)
KULLANICI: Diff'te page.tsx'te silinen 2 satır ne, neden gitti?
🖍 Kenar notu: Diff'in üç sorusu (ders 1.4): dosyalar doğru ✓ (plandakiler), boyut orantılı ✓ (~30 satır), silinenler? — işte o soruluyor. Silinen satır sorusu refleks olmalı.
AI: Silinen 2 satır, not listesini doğrudan render eden eski satırlardı; artık filtrelenmiş liste üzerinden render ediliyor. Davranış aynı, kaynak değişti.
KULLANICI: Tamam. Build çalıştır, çıktıyı kısaltmadan göster.
AI: (çalıştırır) npm run build → HATA: Type error: Property 'baslik' does not exist... Did you mean 'title'?
🖍 Kenar notu: Kapı çalıştı (ders 2.3). "Bitti" beyanına gerek kalmadan mekanik hakem konuştu. Kullanıcı build'i commit'ten ÖNCE istedi — doğru sıra.
KULLANICI: Düzeltmeden önce: kök neden ne? Basit dille anlat.
AI: Filtre fonksiyonunu yazarken not alanının adını baslik varsaydım; oysa bu projede alan adı İngilizce: title. Kök neden: mevcut veri yapısını okumadan isim tahmin etmem. Düzeltme: fonksiyonda baslik → title.
🖍 Kenar notu: Kök neden döngüsü (ders 2.4): "düzelt" değil, "önce açıkla" istendi. Açıklama ikna edici: ne bozuktu (yanlış alan adı), neden oldu (tahmin), niye tekrarlamaz (gerçek şemaya bakıldı). Bu aynı zamanda küçük bir halüsinasyon örneği — AI var olmayan alan adını kendinden emin kullandı (ders 1.7).
AI: (düzeltir) Build → BAŞARILI. İsterseniz kabul kriterlerini deneyelim.
KULLANICI: Ben deniyorum. (uygulamayı açar: 4 not ekler, "market" arar → 1 sonuç ✓; kutuyu boşaltır → 4 not görünüyor ✓; olmayan kelime arar → "sonuç bulunamadı" ✓)
🖍 Kenar notu: Doğrulama merdiveninin 1. basamağı (ders 1.5): kendin dene. Kullanıcı kabul kriterlerini TEK TEK işaretledi — "açtım, güzel duruyor" değil.
KULLANICI: (YENİ, temiz bir oturum açar)
Bu projede "arama kutusu: başlık+içerikte canlı filtre, boş kutuda tam liste" işinin bittiği iddia ediliyor. Bağımsız denetçi ol: değişiklikleri incele, kriterleri kanıtla kontrol et, uç durumları listele. Hiçbir şeyi düzeltme — GEÇTİ/KALDI + kanıt raporu ver.
İKİNCİ AJAN (rapor): Kriterler: GEÇTİ (kanıt: filtre fonksiyonu her iki alanda arıyor; boş sorgu tüm listeyi döndürüyor; build günlüğü temiz). Uç durum notu: arama BÜYÜK/küçük harfe duyarlı — "Market" yazınca "market" notu bulunuyor ama "MARKET" yazınca da bulunuyor ✓; ancak Türkçe 'İ/i' dönüşümünde bir nota rastlanmadı, 'İstanbul' başlıklı notu 'istanbul' araması bulamayabilir. Test edilmesini öneririm.
🖍 Kenar notu: İkinci ajanın değeri (ders 1.5): işi yapan oturumun hiç düşünmediği bir uç durum (Türkçe büyük İ) buldu. Temiz bağlam = önyargısız göz. Kullanıcı raporu da sorgusuz kabul etmeyecek: iddiayı bizzat deneyecek.
KULLANICI: (dener: "İstanbul" notu, "istanbul" aramasında gerçekten çıkmıyor) Bulgu doğru. (ana oturuma döner) İkinci bir denetimde şu bulgu çıktı: Türkçe 'İ/i' dönüşümünde arama kaçırıyor. Kök nedenini bul, düzelt, build + kriterleri tekrar doğrula.
AI: (düzeltir: karşılaştırma Türkçe-uyumlu küçük harfe çevrilerek yapılıyor; build ✓)
KULLANICI: Doğruladım. Bu hâli commit'le; açıklamaya arama özelliğini ve Türkçe harf düzeltmesini yaz.
🖍 Kenar notu: Kayıt noktası (ders 2.2): doğrulanmış sağlam adım → commit. Yarın bir şey bozulursa dönülecek yer burası.
AI: Commit atıldı: "Not arama: başlık+içerik canlı filtre; TR harf duyarlılığı düzeltildi."
Bu oturumun karnesi
| Hamle | Ders | Sonuç |
|---|---|---|
| 4-parça istem + uç durumlu kabul kriteri | 1.1 | Tahmin payı kapandı |
| Plan mode + kısıt-taşması itirazı | 1.3 | Kapsam sızması işten önce yakalandı |
| Diff'te silinen satır sorusu | 1.4 | Şeffaf gerekçe alındı |
| Build kapısı commit'ten önce | 2.3 | Hata mekanik yakalandı |
| Kök neden isteme | 2.4 | Yama değil kalıcı düzeltme |
| Kendin deneme + ikinci-ajan denetimi | 1.5 | Görünmeyen uç durum (Türkçe İ) bulundu |
| Doğrulanmış adımda commit | 2.2 | Güvenli kayıt noktası |
Toplam ek süre: belki 10 dakika. Karşılığı: kullanıcıya hiç ulaşmayacak iki hata ve tam olarak ne yapıldığını bilen bir ürün sahibi. Denetim, yavaşlamak değildir — hatayı ucuzken yakalamaktır.