Files
kolaytercih/docs/ekip-raporlari/2026-10-09/qa-revizyon-koda-bagli.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

88 lines
9.2 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 - Liste revizyonu koda bağlı (v2, HEAD e9dfa35)
Lokal dev sunucusu (gerçek OpenRouter modeli), 9 Eki 2026 gece. Tarayıcı: Browser pane. Kod değiştirilmedi.
## Özet
- **Paketli hesapta revizyon çalışıyor.** 4 ardışık istek ("ilk 5 Ankara olsun", "vakıfları çıkar", "daha güvenli olsun", "İzmir'i de ekle") listeyi gerçekten değiştirdi (DB'de 4 ayrı `report_revision`), her birinde hap + sunucu şablon cevabı + toast geldi, "YENİDEN KURULMADI" notu hiç çıkmadı, kredi her istekte tam 1 düştü.
- **Form çalışıyor:** "listemi yeniden düzenlemek istiyorum" formu açtı, form cevabı (bedelsiz) listeyi kurdu. **Ama "listemi değiştir" formu açmadı** (B1).
- **Paketsizde kaldı (B2, en önemli):** "ilk 5 Ankara olsun" paket uyarısı vermedi; model soru formu açtı, form cevabı "listen yeniden kurulacak" dedi, liste hiç değişmedi.
- **Gecikme (B3):** niyet çağrısı 3 koşuda 12-14 sn sürdü, 5 koşuda 1,4-2,8 sn. 15 sn sınırı aşılmadı ama 12 sn'lik beklemede kullanıcı yalnızca "yazıyor" görüyor.
- Mekanik: `akis-denetim` 13/13, `revizyon-denetim` 5/5. Konsol/sunucu logunda uygulama hatası yok (aşağıda hidrasyon uyarısı).
## Sonuç tablosu
| # | Senaryo | Sonuç |
|---|---|---|
| 1a | ilk 5 Ankara olsun | GEÇTİ. İlk 5 = Ankara 5, rev 3→4, kredi 33→32, şablon cevap (ilk 5 listesi + "Ekrandaki liste yenilendi"), hap "Listeni yeniden kurdum" |
| 1b | vakıfları çıkar | GEÇTİ. Vakıf 3→0 (24 devlet), ilk 5 Ankara korundu, kredi -1 |
| 1c | daha güvenli olsun | GEÇTİ. 5/13/6 → 4/12/8, cevap "iskelet: güvenli ağırlıklı (4/12/8)", kredi -1 |
| 1d | İzmir'i de ekle | GEÇTİ. "iller: İzmir eklendi", 4/12/8 korundu, kredi -1 (İzmir zaten listedeydi, değişiklik görünmez) |
| 2 | listemi değiştir | KALDI. Niyet "diger" → normal sohbet cevabı, form yok, 1 kredi gitti |
| 2b | listemi yeniden düzenlemek istiyorum | GEÇTİ. Form (6 seçenek + serbest metin) açıldı; serbest metin "vakıf üniversiteleri de olsun, devlet ve vakıf karışık" → liste yeniden kuruldu (vakıf 5), cevap "üniversite tipi: fark etmez", form cevabı kredi düşürmedi |
| 3 | listemdeki 3. programa not ekle, ne düşünüyorsun? | GEÇTİ. Niyet "diger" (2,8 sn), normal sohbet (program_detay aracı, 3. program doğru: Hacettepe Gıda Müh.), liste aynı, kredi -1 |
| 4 | Paketsiz: ilk 5 Ankara olsun | KALDI. Liste değişmedi, kredi -1, ama paket uyarısı yok (B2) |
| 6 | akis 13/13, revizyon 5/5 | GEÇTİ |
Not: "Düzeltme: listen YENİDEN KURULMADI" yalnız eski (önceki turlardan kalan) mesajda görüldü; bu koşunun hiçbir mesajında yok (DB'de 0 kayıt).
## Gecikmeler (5. madde)
Ölçüm: istemciye fetch sarmalayıcısı (başlık gelene kadar geçen süre = niyet çağrısı, çünkü yanıt akışı niyet bitince açılıyor) ve sunucu logundaki `[soru] revizyon niyeti` satırı.
| İstek | Niyet çağrısı | İlk hap | Toplam |
|---|---|---|---|
| ilk 5 Ankara olsun | 14,0 sn | ~14 sn | 22,6 sn (sunucu) |
| vakıfları çıkar | 12,3 sn | - | ~25 sn (kayıttan) |
| daha güvenli olsun | 12,8 sn | 13,1 sn | 21,4 sn |
| İzmir'i de ekle | 1,4 sn | - | ~12 sn (DB'de rev artışı) |
| listemi değiştir (diger) | 12,2 sn | - | ~19 sn |
| listemi yeniden düzenlemek istiyorum (form) | 1,9 sn | - | - |
| form cevabı | 2,0 sn | - | ~25 sn |
| not ekle (diger) | 2,8 sn | - | ~9 sn |
15 sn'den uzun niyet bekleyen yok; en kötü 14,0 sn. Dağılım iki kümeli: ~1,4-2,8 sn ya da ~12-14 sn. Mühendis raporundaki "OpenInference yavaş" teşhisi tek bir sağlayıcıyı dışlamakla çözülmemiş görünüyor: 12-14 sn'lik kümeye 3 farklı istekte rastlandı (hangi sağlayıcı olduğu logda yok).
## Hatalar
**B1 (Orta) "listemi değiştir" form açmıyor.** Adımlar: paketli hesap, sohbete "listemi değiştir". Beklenen: soru formu. Gerçekleşen: niyet çıkarımı `"diger"` (12,2 sn) → normal sohbet; model da formu açmadı, "İstanbul da eklenmesini istemiştin" gibi geçmişten (eski form cevabından) bir şey önerdi. Aynı anlama gelen "listemi yeniden düzenlemek istiyorum" formu açtı (niyet `revizyon`, `form (eksik: istek)`, 1,9 sn). Kanıt: sunucu logu `[soru] revizyon niyeti: "diger" "" "12219 ms"`. Şüpheli: `src/lib/ai/revizyon-niyeti.ts` niyet prompt'u; kısa/belirsiz istek "diger"e düşüyor. Tek seferde iki mesaj denendi, tekrar sayısı yetersiz; "ara sıra" olabilir. 1 kredi harcandı.
**B2 (Yüksek) Paketsiz hesapta revizyon isteği yanlış yönleniyor ve sahte vaat veriyor.** Adımlar: paketsiz hesap (5 kredi deneme, listesi var), "ilk 5 Ankara olsun". Beklenen: paket uyarısı, liste aynı. Gerçekleşen: liste aynı, kredi -1, ama niyet çağrısı yok (`araç: soru_sor`), model "Listenin revizyonu için netleştirmemiz gereken birkaç şey var" deyip 2 sorulu form açtı ("cevaplayınca listeni hemen güncelleyeceğim"). Formu cevaplayınca (bedelsiz, API ile gönderdim, `anketId b11ead8e…`, `{adet:5,dilim:hayal}`) model "Listen yeniden kurulacak, birazdan güncel halini göreceksin" dedi; liste değişmedi, hiçbir revizyon çağrısı olmadı. Kanıt: `reports.revision_count` 0 kaldı, `p3.txt` liste aynı. Şüpheli: `src/app/api/soru/route.ts` paketsiz dalı niyet çıkarımını atlıyor ama `soru_sor` aracı modele açık kalıyor; `danisman-prompt.ts:81` "paket YOK, /paket'e yönlendir" talimatını model dinlemedi. Kullanıcı açısından: ödemeye değil boş bir forma yönleniyor. Öneri (yazılımcıya): paketsizde `soru_sor`'u kapat ya da regex tetiklenince koddan sabit paket uyarısı ver (koda bağlı ilkeyle aynı).
**B3 (Orta) Niyet çağrısı bimodal gecikme.** Bkz. gecikme tablosu; 3/8 çağrı 12-14 sn. Bu sürede ekranda yalnızca bekleme göstergesi var, "Listeni yeniden kuruyorum" hapı ancak niyet bitince gelir. Öneri: `OPENROUTER_NIYET_MODEL` için ayrı ölçüm ya da niyet çağrısında sağlayıcı sıralaması/zaman aşımı (mevcut 20 sn).
**B4 (Düşük, gözlem) Kesilen istek kredisi.** Dev sunucusu istek sırasında öldüğünde (aşağıdaki ortam notu) "vakıfları çıkar" mesajı kaydedilmiş, cevap yazılmamış, kredi düşmüştü; tekrar gönderince ikinci kez düştü (kullanıcı 2 kredi ödedi). Bu ortam kaynaklı ama sunucu çökmesinde iade yok demektir.
**B5 (Düşük) Hidrasyon uyarısı.** Dev konsolunda `A tree hydrated but some attributes of the server rendered HTML didn't match` (her /listem açılışında 2-4 kez) ve motion `'lab(...)' is not an animatable color` uyarısı. Bu dalın işi mi bilinmiyor, kaynağı araştırılmadı.
## Test ortamı notları (ürün hatası değil)
- Dev sunucusu iki kez benim dışımda öldü (kod 143; `next dev` aynı dizinde ikinci sunucuyu kabul etmiyor, başka bir oturum 3000'de sunucu açtı, sonra o da kapandı). 3100'de kendi sunucumu yeniden açtım ve işim bitince kapattım. Port 3000'deki sunucuya dokunmadım.
- İlk denemede sayfanın tekrar tekrar yenilenmesi benim fetch sarmalayıcımın hatasıydı (RSC isteğini bozuyordu), düzelttim. Sarmalayıcı olmadan da revizyon sonrası belge yeniden yükleniyor ("navigate type: reload"); nedeni bulunamadı. Şüphe: dev'de `data/app.db` proje klasöründe olduğu için dosya izleyicisi tetikleniyor olabilir. Üretimde beklenmez; doğrulanmadı.
- Giriş: `qa-gb1791491465@maxxspace.com` mail.tm şifresi `Qa-<ts>!` desenindeydi; magic link'i mail.tm'den aldım, 3000 adresini 3100'e çevirdim. Paketsiz hesaba geçmek için uygulamanın kendi Dev panelindeki "Anında gir" (yalnız lokal) ile `qa-6eki-b@example.com` hesabına geçtim; bu, tarayıcıdaki `localhost` oturum çerezini değiştirdi (Bilal'in v1 oturumunu etkilemiş olabilir).
- Kodla gelen `listeSenkronla({items: []})` çağrısı /listem ilk açılışında görüldü; `saved_lists` kaydı `[]`. Önceden dolu muydu bilinmiyor, kontrol edilmedi.
## Test edilemeyenler
- Son hâlin gerçek modelle toplu eval'i (QA kapsamı dışı).
- 375 px görünüm ve form UI'ının dar ekran davranışı: pencere 800 px idi; formun "Cevapları gönder" düğmesi yatay kaydırma içinde ekran dışında kaldı (x=874) ve tıklanamadı, bu yüzden form cevabını API ile gönderdim (paketsiz). Bu görünüm sorunu olabilir ya da pencere darlığı; ayrıca bakılmalı.
- Zaman aşımı yolu (niyet 20 sn'yi aşarsa "okuyamadım" + iade): tetiklenmedi.
## Hesaplar ve veri (silme için)
- `qa-gb1791491465@maxxspace.com` (paketli; kredi 33→25, rapor rev 3→8, liste şu an 24 devlet+vakıf karışık, 4/12/8)
- `qa-6eki-b@example.com` (paketsiz; kredi 2→1, liste aynı)
- Yeni hesap açılmadı. Kredi harcayan çağrılar: yukarıdaki 8 + 1 sohbet mesajı.
## Bilal'in elle yapacakları
1. B2'yi yazılımcıya ver (paketsiz revizyon yönlendirmesi): 10 dk.
2. B3 için niyet çağrısı sağlayıcı/model kararı.
3. Formu 375 px'te elle dene ("Cevapları gönder" görünüyor mu).
## Yeni hile
- Dev sunucusu başka oturumla çakışıp ölürse: `preview_start dev-3100` yeniden aç; `fetch` sarmalayıcıda `i.url` yerine `i.href||i.url||String(i)` kullan (URL nesnesi RSC'yi bozar).
- Paketsiz/paketli geçişi için Dev panelinin "Anında gir" alanına var olan hesabın e-postasını yaz (magic link atlanır).
- Anket cevabını UI olmadan göndermek: `POST /api/soru {clientMessageId, anketCevabi:{anketId, cevaplar}}` (anketId `chat_messages.meta`'dan).