Files
kolaytercih/docs/ekip-raporlari/2026-10-07/qa-geri-bildirim-testi.md
bilalgursen da0e9dff7a docs(ekip): 7–10 Ekim raporları, eval sonuçları, seslendirme betiği
- docs/ekip-raporlari/2026-10-07, 2026-10-09, 2026-10-10 raporları ve ekran görüntüleri
  (ses/ altındaki mp3 dosyaları depoya alınmadı, 38 MB)
- BACKLOG #38: rehber yazılarına "Dinle" düğmesi adayı
- scripts/seslendir.py (Türkçe TTS) ve .gitignore'a .venv-tts/
- scripts/eval/sonuc: 8–10 Ekim revizyon eval çıktıları

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-11 00:33:39 +03:00

12 KiB
Raw Blame History

QA — Geri bildirim 10 madde uçtan uca testi

Dal v2, HEAD 129c839, lokal dev sunucusu dev-3100 (localhost:3100), 8 Eki 2026 gecesi. Bilal'in sunucusuna dokunulmadı; sunucu kapatılmadı.

Özet

  • 9 madde geçti (1, 2-3, 4, 5, 8-9, 10 + ek kontroller), 1 madde kısmen (6): madde 6 (revizyon sınırı yok / "kalan hak" yok / paketsizde red) kodda ve akışta geçti, ama gerçek modelle revizyon isteklerinin yaklaşık yarısında model aracı hiç çağırmadı (aşağıda B1). Kullanıcıya zarar yok (güvenlik notu devreye giriyor) ama "3+ revizyon arka arkaya" sözü modele bağlı.
  • Gerçek yapay zekâ çalıştı: .env.local'da OpenRouter anahtarı var; liste üretimi kaynak:"model" (sağlayıcı Baidu, 11,5 sn). Dev mock yolu kullanılmadı.
  • Otomatik kontroller: baglanti-denetim.ts 44/44 çıkış 0; akis-denetim.ts 9/9 çıkış 0; revizyon-denetim.ts 5/5 çıkış 0; pnpm exec tsc --noEmit çıkış 0; pnpm lint çıkış 0 (tasarım denetimi 0 hata, 12 uyarı); grep -rn "kalan hak\|revizyon hakk" src 0 satır. Bu üç eval betiği sahte model uçlarıyla koşar, gerçek model davranışını ölçmez.
  • En önemli bulgular: B1 (model revizyon aracını atlıyor), B2 (giriş lokalde 3100 portunda çalışmıyor — ortam), B3 (danışman metninde iç içe bozuk /paket bağlantısı).
  • Konsolda uygulama kaynaklı hata yok (tek kayıt: B2'deki 403).

Ortam notları (test koşulları)

  • Port 3000'de başka bir proje (kolaytercih-v1) çalışıyor; testi dev-3100 ile yaptım.
  • B2 (ortam, ürün hatası değil): .env.local BETTER_AUTH_URL=http://localhost:3000. Tarayıcıdan 3100'e gidince POST /api/auth/sign-in/magic-link 403 "Invalid origin: http://localhost:3100" döner; giriş formu "Bağlantı gönderilemedi" der. Çözümüm: curl ile (Origin başlığı olmadan) bağlantıyı istedim, e-postayı mail.tm'den alıp linkin 3000 adresini 3100 yapıp açtım. Magic link uçtan uca çalışıyor (e-posta Resend ile gerçekten geldi, gönderen giris@mail.kolaytercih.com, onay sayfası + "Giriş yap" düğmesi + oturum açıldı). Yan etki: çerez localhost için port bağımsız olduğundan Bilal'in v1 (3000) geliştirme oturumu bu hesapla değişmiş olabilir.
  • Pane başka bir ajanla (tasarımcı) paylaşılıyor: tema/viewport sürekli değişti ve pane gizliyken requestAnimationFrame durduğu için React akış (Suspense) içeriği açılmadı (document.visibilityState = hidden). Görsel kanıt yerine DOM/animasyon örnekleme kullandım; ekran görüntüleri birkaç kez boş geldi (scroll kilidi + pane gizli), ürün hatası değil.
  • Yerel data/app.db'ye test verisi girdi (aşağıda hesap listesi). Ödeme yapılmadı; paket durumunu ve krediyi test hesabı için doğrudan lokal DB'de UPDATE ile verdim (has_paket=1, kredi 40).

Madde madde sonuç

1. Danışman rehber bağlantısı — GEÇTİ

  • Adım: /listem danışman sohbetinde "/rehber/sanal-gerceklik-bolumleri yazısı ne diyor?"
  • Beklenen: var olmayan /rehber/ linki çıkmaz. Gözlenen: "Rehberde 'Sanal Gerçeklik Bölümleri' diye ayrı bir yazı bulunmuyor" dedi, 4 gerçek yazıyı kart olarak verdi (hangi-bolumlerin-kontenjani-azaldi, kac-net-ile-hangi-bolum, kac-siralama-ile-hangi-bolume-girebilirim, siralama-sartlari-2026); content/rehber/*.md dosyalarının hepsi var.
  • Gerçek yazı: "Rehberdeki 'Devlet mi vakıf mı' yazısı ne diyor, linkini ver" → [...](/rehber/devlet-mi-vakif-mi); sayfa <title>'ı "Devlet mi Vakıf mı? ... — KolayTercih" ve h1 var (gerçek içerik).
  • Not: dev'de olmayan bir rehber adresi de HTTP 200 + noindex "Böyle bir sayfa yok" sayfası döner (/rehber/sanal-gerceklik-bolumleri → 200). Durum kodu kontrolü dev'de anlamsız; üretimde 404 olduğu doğrulanmadı (koddan çıkarım).
  • Betikler: baglantı-denetim 44/44 (çıkış 0), akis-denetim 9/9 (çıkış 0).

2-3. Varyant çipleri — GEÇTİ

  • /sonuc?sira=85000&tur=say Dengeli sekmesi, 300 satır yüklenip aynı üniversite+bölüm 14 grup tarandı: hepsinde çipler farklı ve boş değil (ör. Fenerbahçe Eczacılık "%50 İndirimli" / "%50 İndirimli · İngilizce"; Başkent Hemşirelik "Burslu" / "Burslu · İngilizce"; İTÜ Şehir ve Bölge Planlama "İngilizce" / "İngilizce (%30)"). "Açık Öğretim" etiketi Anadolu Üniversitesi sayfasında görünüyor.
  • Katalog: /universite/baskent-universitesi/sayfa/5 sunucu HTML'inde Tıp 6 satır: Burslu, Burslu · İngilizce, %50 İndirimli, %50 İndirimli · İngilizce, Ücretli, Ücretli · İngilizce — hepsi ayrı. (Üniversite sayfası sayfalı: ilk sayfa 50 program gösterir, Tıp 5. sayfada.)
  • /listem çekmecesi ("Kendi Listem"): katalogdan Başkent Tıp'tan 3 varyant eklendi, çekmecede "· Burslu", "· Burslu · İngilizce", "· %50 İndirimli" ayrı satırlar. Yapay zekâ listesinde (/listem tablosu) "Burslu · İngilizce" çipi görünüyor.

4. "İlk 5'i İstanbul'a göre güncelle" — GEÇTİ

  • Sihirbaz: sıra 85.000 Sayısal, alan Mühendislik, iller Ankara + İzmir + Bursa, devlet/vakıf fark etmez, 3 kredi.
  • Başlangıç liste: Ankara 17, Bursa 4, İzmir 3. Sohbette "İlk 5'i İstanbul'a göre güncelle" → revizyon sonrası (DB'den reports.result): ilk 5 satır İstanbul (Doğuş, Işık, Altınbaş, İstanbul Aydın, Nişantaşı), kalan 19 satırın hepsi sihirbaz illerinde (Ankara 15, İzmir 2, Bursa 2). revision_count 1.
  • revizyon-denetim.ts 5/5, çıkış 0.

5. Soru formu shimmer ve avatar — GEÇTİ (avatar kısmı koddan)

  • "Bana birkaç soru sor..." → araç çalışırken sohbette "Soruları hazırlıyorum…" satırı class="shimmer font-medium text-xs px-0.5 text-slate-600" ile göründü (MutationObserver: yaklaşık 4,4 sn), form gelince kalktı. tw-shimmer keyframe'i ve .shimmer kuralı sayfada yüklü.
  • Avatar: sohbet-client.tsx:308 canli && aracta ? "rota" : "nabiz"; gözle karşılaştırma yapılamadı (görsel kanıt alınamadı).

6. Revizyon sınırı yok — KISMEN (bkz. B1)

  • grep -rn "kalan hak\|revizyon hakk" src → 0.
  • Paketsiz hesap (3 kredi): "İlk 5'i İstanbul'a göre güncelle" → danışman revizyon yapmadı, "Tercih Dönemi Paketi (299 TL) ile listenin açılması gerekiyor" dedi; liste değişmedi. GEÇTİ.
  • Paketli hesap: 3 revizyon arka arkaya yapıldı (revision_count 3; kredi defterinde 3 satır report_revision, 0 kredi; her sohbet mesajı 1 kredi düştü; 40 → 34). Sınır mesajı çıkmadı. Ancak bkz. B1.

8-9. Program ayrıntı çekmecesi — GEÇTİ (ölçümle)

  • Katalogda Başkent Tıp "program ayrıntısı" açıldı. Çekmece 70 ms aralıkla örneklendi: top 647 → 62 px yaklaşık 0,6 sn, yükseklik sabit 707 px (boy sıçraması yok), sayfa kaydırması sabit (scrollY 3797 → 3797). Logo kareleri 0,2-0,9 sn belirip 1,0 sn civarı sönüyor, içerik blokları (data-sonra) 1,0-1,4 sn arasında opaklık 0 → 1 (logo → içerik açılışı oynuyor).
  • "Yıllara göre" metni çekmecede ve sayfada yok. Konsolda yeni hata yok. Gözle görsel doğrulama alınamadı (ekran görüntüsü boş geldi, bkz. ortam notu).

10. Soru formu geçişi — GEÇTİ

  • 3 soruluk form: "İleri" ile geçişte 1. soru sola çıkıp 2. soru sağdan geliyor (opaklık/x örneklemesi: 0,06 s'de 0,66@-47 / 0,34@+196; 0,3 s'de tamam), pasif sorular inert. "Geri" önceki soruya dönüyor, işaretli cevap korunuyor.
  • FormData: dilim=hayal-agirlikli, vakif-durumu=devlet, ekleme=istanbul. "Cevapları gönder" isteği /api/soru gövdesinde anketCevabi.cevaplar olarak üçü de gitti.

Ek

  • Konsol hatası yok (tek [error] 403, B2'nin giriş denemesi). pnpm lint ve pnpm exec tsc --noEmit temiz.

Hata ve gözlemler

B1 (Orta) — Model, revizyon isteğinde liste_revize aracını sık atlıyor. Paketli hesapta 7 revizyon isteğinin 3'ünde araç çağrıldı (liste gerçekten değişti); 4'ünde model "listen güncellendi/yeniden kurdum" yazıp aracı çağırmadı. Sunucu logu: [soru] revizyon beyanı var, başarılı liste_revize yok → not eklendi; ekranda "Düzeltme: Bu cevapta listen YENİDEN KURULMADI..." notu çıktı (güvenlik ağı çalışıyor, yani yalan beyan gizli kalmadı), liste değişmedi, kredi yine düştü.

  • Yeniden üretme: paketli hesapta /listem sohbetine sırayla "Listeyi güncelle: ilk 3 tercih İzmir'de olsun." → "İlk 3'ü İzmir'e göre güncelle." → "İlk 5'i Ankara'ya göre güncelle." (hepsi araçsız). "Sohbeti temizle"den sonra "İlk 5'i Ankara'ya göre güncelle." ve "İlk 5'i İzmir'e göre güncelle." araçla çalıştı. Soru formu cevaplarından sonra ("Cevaplarına göre listeyi revize ediyorum") yine araçsız.
  • Kök neden tahminim: sunucu kodu sağlam (liste-revizyon.ts paket dışında kapı yok, sayı sınırı yok); sorun model uyumu. Geçmişe yazılan sahte "yeniden kurdum" cevapları sonraki turlarda örnek oluyor olabilir; ayrıca dilim/ilk-N ifadesi serbest metin ve araç zorunlu değil. İncelenecek yer: src/lib/ai/sohbet-akisi.ts (araç seçimi), danışman prompt'u, src/lib/ai/cikti-denetimi.ts (revizyon beyanı denetimi). Öneri: revizyon niyeti algılanınca toolChoice ile aracı zorlamak ya da eval setine "revizyon çağrısı oranı" ölçümü eklemek (yapay-zeka-muhendisi). Not: gerçek modelle ölçülen tek yer burası; eval betikleri bunu yakalamaz.
  • Önem: Orta (kullanıcı "revize ettim" yazısını görmüyor ama kredi harcayıp istediği sonucu alamayabilir).

B2 (Düşük, ortam) — Lokal giriş 3100 portunda çalışmıyor. Bkz. ortam notu. Öneri: dev-3100 yapılandırmasına BETTER_AUTH_URL/NEXT_PUBLIC_APP_URL geçilmesi ya da better-auth trustedOrigins'e localhost portlarının eklenmesi (kod değiştirmedim).

B3 (Düşük) — Danışman metninde bozuk bağlantı biçimi. Paketsiz yanıtında "(299 TL, [/paket](/paket))" biçiminde iç içe markdown çıktı; arayüzde köşeli parantezler ve "Paket (Paket)" kartı olarak göründü. rehberBaglantilariniDuzelt yalnız /rehber/ bağlantılarına bakıyor (src/lib/ai/baglanti-denetimi.ts), /paket gibi dahili adresler denetlenmiyor.

B4 (Düşük) — Soru formu metinlerinde Türkçe karakter eksik. Model üretimi: "Vakif üniversiteleri listende kalsin mi?", "baska bir sehr var mi?", "Istanbul da olsun", "A/B/C" seçenek harfleri satır başında ayrı görünüyor. Prompt'a "Türkçe karakter kullan" kuralı gerek (yapay-zeka-muhendisi).

B5 (Çok düşük) — Yeniden yüklemede eski sohbet mesajları önce ham markdown (**kalın**, [a](/b)) gösterip sonra biçimleniyor (markdown parçası tembel yükleniyor, markdown-lazy). Pane gizliyken 7+ sn sürdü; normal pencerede kısa süreli olabilir, doğrulanmadı.

Test EDİLEMEYENLER

  • Madde 5'te avatar animasyonunun header logosuyla gözle eşliği ve madde 8-9'daki gerçek görünüm (boş ekran görüntüsü; pane paylaşımı).
  • Mobil genişlik (390 px) bu turda bakılmadı (pane başka ajanın viewport'una kilitliydi).
  • Üretimde (kolaytercih.com) hiçbir şey denenmedi.

Açılan test hesapları (silinebilir)

  • qa-gb1791491465@maxxspace.com (mail.tm) — lokal data/app.db: paketli, kredi 34, 1 rapor + sohbet geçmişi. Eski qa-gb1@example.com kayıt oluşmadı (Resend reddetti).

Bilal'in elle yapacakları

  1. Lokalde giriş denerken 3000 portunu kullanın ya da BETTER_AUTH_URL'i test portuna çekin (B2) — 2 dk.
  2. v1 (3000) geliştirme oturumunuzu kontrol edin; çerez paylaşıldığı için bu test hesabı oturumu açık olabilir — 1 dk.
  3. B1 için yapay zekâ mühendisine "revizyon aracı çağrı oranı" ölçümü (gerçek modelle) verilmesi — karar.

Yeni hile

  • Gizli/arka plandaki Browser pane'de requestAnimationFrame durur: React akış içeriği (div[hidden] + template[id^="B:"]) açılmaz, sayfa yarım görünür. Her adımdan önce computer screenshot almak pane'i canlandırır; visibilityState ile teşhis edilir.
  • Lokal 3100'de giriş: curl -X POST localhost:3100/api/auth/sign-in/magic-link (Origin yok) → mail.tm'den link → host'u 3100'e çevirip aç.
  • Sohbet yanıtı beklerken javascript_tool 45 sn'de zaman aşımına uğrar; gönder ve bekle ayrı çağrılarda yapılmalı.