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

91 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)](/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ı.