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>
This commit is contained in:
bilalgursen
2026-10-11 00:33:39 +03:00
parent e9dfa354f8
commit da0e9dff7a
81 changed files with 18396 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
On Ekim günü ne yaptık.
Bilal beş sorun bildirdi. Beşi de çalışma ağacında düzeltildi; commit atılmadı, dev sunucusu kapatıldı. Tip denetimi, lint ve tasarım denetimi sıfır hata verdi.
Bir: Danışmanla liste revizyonu.
Paketli hesapta liste değişmiyordu. Eval betiğini gerçek modelle koşturunca üç neden çıktı.
Birincisi, etkisiz kural. Aday listemi yeniden oluştur dediğinde model üniversite tipi fark etmez diye boş bir kural uyduruyordu. Liste değişmeden yeniden kuruluyor, ekranda listeni yeniden kurdum yazıyordu.
Artık zaten geçerli olanı tekrar eden alanlar atılıyor; kural boş kalırsa soru formu açılıyor.
İkincisi, zaman aşımı. Niyet çağrısı bazen on iki ile yirmi saniye sürüyor, kopunca isteğini okuyamadım deyip kredi iade ediyordu. Şimdi düz mesajda varsayılan form açılıyor; o formun cevabı modelsiz, doğrudan kodla kurala çevriliyor.
Sıfır saniye, sıfır çağrı. Eval'de dört koşunun dördü geçti.
Üçüncüsü, regex kapısı. Oluştur, baştan, sıfırdan, yeni liste, tercihlerimi güncelle kalıpları görülmüyordu; eklendi. Listemi değiştir artık form açıyor.
Ek olarak, vakıf olmasın gibi açık bir tip isteğini model düşürürse kod tamamlıyor.
İki: Listem sayfası bileşenleri.
Tasarımcı ekrana bakarak düzeltti. Sohbeti temizle penceresi dahil tüm modalların tabanı site diline çekildi: gri bant kalktı, yuvarlak köşe, kart zemini, kalın başlık, turuncu ana düğme ve ikincil düğme.
Sohbet başlığındaki düğmeler kırk dört piksel dokunma alanına çıktı, kredi hapı üst çubuktakiyle aynı oldu, telefonda taşan pe de fe düğmesi düzeldi. Elle yazılmış turuncu düğmeler tek kaynağa bağlandı.
Üç: Tadımlık bölümü.
Masaüstünde yükseklik beş yüz doksan dokuzdan üç yüz yetmiş iki piksele indi, yüzde otuz sekiz kısaldı. Tek kart, iki sütun: solda adayın kendi sırasıyla başlayan başlık, üç kanıt satırı ve çağrı düğmesi; sağda gerçek bir rapor satırı.
Kanıtlar: üç risk dilimi, iki bin yirmi bir ile iki bin yirmi altı arası altı yıllık veri, garanti komisyon reklam yok.
Dört: Boş sekme.
Sonuç sayfasında dengeli sıfır olsa da o sekme açılıyordu. Artık ilk dolu dilim açılıyor; sıra dengeli, güvenli, hayal. Filtre değişip açık sekme boşalırsa dolu olana geçiyor.
Beş: Sohbet panelinin hareketi.
Genişlet ve daralt yayı sihirbaz adımıyla aynı yaya bağlandı. Sütun genişliği ve sayfa kaydırması da aynı yayı kullanıyor.
Senin bakman gerekenler.
Sonuç sayfasında girişsiz, telefon ve masaüstünde tadımlık başlığı ve üç kanıt metni. Garanti, komisyon, reklam yok sözü dışarıya söylenecek söz olarak uygun mu.
Listem sayfasında çöp ikonu penceresi ve ana sayfadaki sihirbaz penceresi, çünkü modal tabanı değişti. Paket kartındaki iki liste revizyonu metnini sınırsız yaptım, paket sayfasıyla aynı. Kalan iş:
danışmanın bildikleri ipucu dokunmatikte çalışmıyor, ayrı bir iş.

View File

@@ -0,0 +1,35 @@
# On Ekim günü ne yaptık
Bilal beş sorun bildirdi. Beşi de çalışma ağacında düzeltildi; commit atılmadı, dev sunucusu kapatıldı. Tip denetimi, lint ve tasarım denetimi sıfır hata verdi.
## Bir: Danışmanla liste revizyonu
Paketli hesapta liste değişmiyordu. Eval betiğini gerçek modelle koşturunca üç neden çıktı.
Birincisi, etkisiz kural. Aday "listemi yeniden oluştur" dediğinde model "üniversite tipi fark etmez" diye boş bir kural uyduruyordu. Liste değişmeden yeniden kuruluyor, ekranda "listeni yeniden kurdum" yazıyordu. Artık zaten geçerli olanı tekrar eden alanlar atılıyor; kural boş kalırsa soru formu açılıyor.
İkincisi, zaman aşımı. Niyet çağrısı bazen on iki ile yirmi saniye sürüyor, kopunca "isteğini okuyamadım" deyip kredi iade ediyordu. Şimdi düz mesajda varsayılan form açılıyor; o formun cevabı modelsiz, doğrudan kodla kurala çevriliyor. Sıfır saniye, sıfır çağrı. Eval'de dört koşunun dördü geçti.
Üçüncüsü, regex kapısı. "Oluştur", "baştan", "sıfırdan", "yeni liste", "tercihlerimi güncelle" kalıpları görülmüyordu; eklendi. "Listemi değiştir" artık form açıyor.
Ek olarak, "vakıf olmasın" gibi açık bir tip isteğini model düşürürse kod tamamlıyor.
## İki: Listem sayfası bileşenleri
Tasarımcı ekrana bakarak düzeltti. Sohbeti temizle penceresi dahil tüm modalların tabanı site diline çekildi: gri bant kalktı, yuvarlak köşe, kart zemini, kalın başlık, turuncu ana düğme ve ikincil düğme. Sohbet başlığındaki düğmeler kırk dört piksel dokunma alanına çıktı, kredi hapı üst çubuktakiyle aynı oldu, telefonda taşan pe de fe düğmesi düzeldi. Elle yazılmış turuncu düğmeler tek kaynağa bağlandı.
## Üç: Tadımlık bölümü
Masaüstünde yükseklik beş yüz doksan dokuzdan üç yüz yetmiş iki piksele indi, yüzde otuz sekiz kısaldı. Tek kart, iki sütun: solda adayın kendi sırasıyla başlayan başlık, üç kanıt satırı ve çağrı düğmesi; sağda gerçek bir rapor satırı. Kanıtlar: üç risk dilimi, iki bin yirmi bir ile iki bin yirmi altı arası altı yıllık veri, garanti komisyon reklam yok.
## Dört: Boş sekme
Sonuç sayfasında dengeli sıfır olsa da o sekme açılıyordu. Artık ilk dolu dilim açılıyor; sıra dengeli, güvenli, hayal. Filtre değişip açık sekme boşalırsa dolu olana geçiyor.
## Beş: Sohbet panelinin hareketi
Genişlet ve daralt yayı sihirbaz adımıyla aynı yaya bağlandı. Sütun genişliği ve sayfa kaydırması da aynı yayı kullanıyor.
## Senin bakman gerekenler
Sonuç sayfasında girişsiz, telefon ve masaüstünde tadımlık başlığı ve üç kanıt metni. "Garanti, komisyon, reklam yok" sözü dışarıya söylenecek söz olarak uygun mu. Listem sayfasında çöp ikonu penceresi ve ana sayfadaki sihirbaz penceresi, çünkü modal tabanı değişti. Paket kartındaki "iki liste revizyonu" metnini sınırsız yaptım, paket sayfasıyla aynı. Kalan iş: danışmanın bildikleri ipucu dokunmatikte çalışmıyor, ayrı bir iş.

View File

@@ -0,0 +1,137 @@
# /listem bileşen denetimi — tasarımcı raporu (10 Eki 2026)
Bilal'in geri bildirimi: "/listem'deki konuşmayı silme gibi ekranlar yeni dizayn anlayışımıza
uygun değil." Sayfadaki her bileşen DESIGN.md'ye (§2, §3, §4.1, §4.4, §7, §8, §11) göre
denetlendi; uyumsuzlar düzeltildi ve ekranda doğrulandı. Commit atılmadı.
## Özet (5 madde)
1. **Modal tabanı site diline çevrildi** (`src/components/ui/dialog.tsx`): shadcn'in
`rounded-xl` + ring + gri `DialogFooter` bandı gitti; yüzey §4.4 sade kutu
(`rounded-2xl border-slate-200 bg-card p-6`), başlık §3 h3 (`font-heading text-xl font-bold`),
açıklama `text-slate-600`, aksiyonlar bantsız. Tüm modallar kazandı; sohbet silme diyaloğu
artık `variant="cta"` + `variant="ikincil"`, `size="lg"` (44 px+).
2. **Sohbet başlığı**: `size-7` düğmeler → görünür 32 px + görünmez 44 px dokunma alanı (§8);
amber kredi hapı → üst çubuktaki kredi hapının dili (§11.1 V4, amber risk tonuydu);
375 px'te "DanışmanlaKonuş" artık kırpılmıyor.
3. **Elle yazılmış turuncu CTA'ların hepsi `variant="cta"`** (`listem-govde`, `listem-bos-cta`,
`tercih-degisti-modali`, `liste-uretici`, `sohbet-client`); outline'lar `variant="ikincil"`.
`rapor/components` altındaki 9 `elle-cta` uyarısı sıfırlandı.
4. **375 px'te yatay taşma giderildi**: liste başlığındaki düğme grubu `shrink-0` taşıyordu,
"PDF" sağdan taşıyordu (ölçüldü, ekran görüntüsü alındı); artık alt satıra sarıyor.
5. **Sessiz eylem** (§11.2 m.2/6): "Kaydettiklerim" çipi silinince anında yok oluyordu; şimdi
`AnimatePresence` + `YAY.varsayilan` ile küçülerek söner, komşular kayar; hareketi azalt'ta yalnız
opaklık. Boş durumlardaki `Sparkles` → marka işareti (§7 "AI izi", §11.2 m.3).
`pnpm tasarim:denetim`: **0 hata, 42 uyarı** (öncesi 51; kalan uyarıların hiçbiri /listem
dosyalarında değil — tek istisna `sohbet-baglanti.tsx:279 elle-yay`, bu iş kapsamı dışı, paralel
işte). `npx tsc --noEmit`: temiz.
## Ne değişti (dosya · satır · kural)
### `src/components/ui/dialog.tsx` (taban — 6 modal etkilenir)
- `DialogContent`: `rounded-xl bg-popover p-4 text-sm ring-1 ring-foreground/10` →
`rounded-2xl border border-slate-200 bg-card p-6 text-slate-900` + `motion-reduce` zoom kapalı
(§4.4, §2.3, §8). Kapatma çarpısı aynen (§4.3).
- `DialogFooter`: `-mx-4 -mb-4 rounded-b-xl border-t bg-muted/50 p-4` bandı kaldırıldı →
`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`; varsayılan kapatma düğmesi
`outline "Close"` → `ikincil lg "Kapat"`.
- `DialogTitle`: `text-base font-medium` → `text-xl leading-tight font-bold text-slate-900` (§3).
- `DialogDescription`: `text-muted-foreground` → `text-sm leading-relaxed text-slate-600`,
link hover turuncu (§2.1).
### `src/features/rapor/components/sohbet-client.tsx`
- `BASLIK_DUGMESI` sabiti: üç başlık düğmesi (genişlet / bilgi / temizle) tek sınıf; görünür
`size-8`, `before:-inset-1.5` ile 44 px dokunma alanı, ikon `size-4` (§4.7, §8). `size-9`
denendi, 375 px'te başlığı kırpıyordu.
- `KREDI_HAPI` sabiti: `user-nav.tsx` kredi hapının sınıf dizisi (slate kenarlık, `Coins text-amber-500`,
`SayiRulo`), boy `h-8`; "kredi" sözcüğü `hidden sm:inline`.
- "Danışmanın bildikleri" (i) düğmesi `max-sm:hidden`: Radix Tooltip dokunmatikte açılmıyor
(ölü düğme, §11.2 m.9) ve 375'te başlığı kırpıyordu. Dokunmayla açılan karşılığı (popover) ayrı iş.
- "Kaydettiklerim" çipleri `motion.span` + `AnimatePresence` (`YAY.varsayilan`); çarpı 24 px görünür,
`before:-inset-2.5` ile 44 px.
- "Sohbeti temizle" diyaloğu: `variant="ikincil" size="lg"` Vazgeç, `variant="cta" size="lg"` onay.
- Boş durum: `Sparkles` → `AnimasyonluMark oynat={false} renk="turuncu"`.
- Kredi bitti kutusu: amber uyarı kutusu kaldı (§2 tablo), `size="sm"` buton → `variant="cta"
size="lg" w-full` + `ArrowRight`; metin `text-amber-900`.
- Gönder düğmesi: elle `bg-orange-500` → `variant="cta" size="icon"`.
### `src/features/rapor/components/listem-govde.tsx`
- `IKINCIL_BUTON`: elle hover/active sınıfları → `"h-11 px-4"`; üç düğme `variant="ikincil"`.
- Düğme grubu `shrink-0` kaldırıldı, `max-w-full` (375 px taşma düzeltmesi).
- Kilit satırı: `bg-orange-100 text-orange-700` ikon dairesi → §4.4 ikon kutusu
(`size-11 rounded-xl bg-primary/10` + `size-5 text-primary`); CTA `variant="cta" size="lg"`,
ok `ArrowRight className="size-4"`.
- Paket kartı CTA `variant="cta"`.
### `src/features/rapor/components/listem-bos-cta.tsx`
- `CTA_SINIF` elle turuncu → `"mt-6"` + `variant="cta"` iki dalda.
### `src/features/rapor/components/listem-icerik.tsx`
- Boş durum `Sparkles size-10` → `AnimasyonluMark oynat={false}`; "Paketin aktif" şeridi
`Sparkles` → `Check`.
### `src/features/rapor/components/tercih-degisti-modali.tsx`
- `DialogTitle` üstündeki `text-lg` ezmeleri kaldırıldı (taban `text-xl`).
- Aksiyon satırı `flex-col-reverse … sm:flex-row sm:flex-wrap sm:justify-end`; "Şimdilik kalsın"
`ikincil lg`; "Tekrar dene" / "Listemi güncelle" / "Paketi aktive et" / "Kredi yükle" `cta lg`;
"Listeme dön" `cta lg`. "Tekrar dene"de ikon sona alındı (§4.1 desen).
### `src/features/rapor/components/liste-uretici.tsx`
- Dört ekranın turuncu düğmesi `variant="cta"`; "Listemi kontrol et" `variant="ikincil" size="lg"`.
## Ekranda ne gördüm
Dev sunucusu Bilal'in açık sunucusuydu (`localhost:3000`), kapatılmadı. Giriş Dev paneliyle
(`qa-gb1791491465@maxxspace.com` paketli, `qa-6eki-b@example.com` paketsiz). Sohbete mesaj
gönderilmedi; silme diyaloğu her seferinde "Vazgeç" ile kapatıldı.
| Genişlik / tema | Hesap | Gördüğüm |
|---|---|---|
| 1280 açık (önce) | paketli | Silme diyaloğu: gri alt bant, h-9 butonlar, ring'li `rounded-xl`, ince `font-medium` başlık. |
| 375 açık (önce) | paketli | Başlık "Danışmanl…" kırpık; **"PDF" düğmesi sağdan taşıyor**; diyalog bantlı. |
| 375 açık (sonra) | paketli | "DanışmanlaKonuş" tam; 32 px düğmeler + "25" hapı; diyalog: bold başlık, tam genişlik turuncu CTA, altında ikincil Vazgeç, çarpı sağ üstte; PDF alt satıra sardı, taşma yok. |
| 1280 açık (sonra) | paketli | Diyalog ortada, "Vazgeç · Sohbeti temizle" sağa yaslı, bant yok. Başlık düğmeleri ve "25 kredi" hapı slate dilinde. |
| 1280 koyu (sonra) | paketli | Diyalog `bg-card` koyu yüzey, kenarlık görünür, CTA turuncu; sayfa geneli token'la döndü. |
| 375 koyu (sonra) | paketli | Sohbet başlığı ve giriş kutusu doğru. |
| 1280 koyu | paketsiz (1 kredi) | Kilit satırı: mavi ikon kutusu + "Analizleri aç — 299 TL →" h-12; "Son 1 kredin" notu; paket kartı CTA tam genişlik turuncu. |
| 375 koyu | paketsiz | Kilit satırı dikey, CTA tam genişlik; paket kartı CTA; **Tercihlerin değişmiş** modalı (profil farkı vardı): bold başlık, diff tablosu, "Paketi aktive et →" tam genişlik, altında "Şimdilik kalsın" ikincil — 812 px'e sığdı. |
| 1280 açık | paketsiz | Katalog arama modalı (dialog tabanını paylaşır): kendi `rounded-2xl bg-card p-0` ezmeleriyle değişmedi, ring yerine kenarlık. |
| 1280 açık | paketsiz | Tercih profili kapısı ("Yeni sıralaman nedir?", üst çubuk sıralama hapından): `rounded-2xl` + slate kenarlık, bold başlık, hap form alanı, "Vazgeç · Tercihlere geç →" — tabandaki değişiklik içeriği bozmadı. |
Tema sonunda "Açık"a geri alındı, viewport emülasyonu sıfırlandı.
## Neye bakmadım (koddan çıkarım)
- **Kredi bitti kutusu** (kredi 0): görmek için mesaj gönderip kredi harcamak gerekirdi; koddan
çıkarım — amber kutu + tam genişlik CTA, 343 px'te sığar.
- **Sihirbaz modalı ve hero formu** (`sihirbaz-modal.tsx`, `hero-form.tsx`): kapı modalıyla aynı
`p-6 gap-0 sm:max-w-3xl` ezmesini taşıdıklarından tabandan yalnız köşe/kenarlık (ring →
`border-slate-200`) ve kalıtsal `text-sm`'in kalkması değişir; kapı modalında bunun içeriği
bozmadığını gördüm, bu ikisine ayrıca bakmadım.
- Liste üretim ekranları (`liste-uretici.tsx`: kredi yetersiz / hata / sunucu yok / sürüyor):
tetiklenmesi üretim gerektirir; yalnız varyant değişti, yerleşim aynı.
- "Kaydettiklerim" çip animasyonu: test hesaplarında kayıtlı profil çipi yoktu; silme hareketi
ekranda izlenmedi (kod: `AnimatePresence` + `layout`, hareketi azalt dalı var).
- 768 px'e bakılmadı.
## Kalan şüpheler / backlog önerisi
1. **"Danışmanın bildikleri" ipucu dokunmatikte ölü** (Tooltip hover/odak). Telefonda gizledim;
kalıcı çözüm dokunmayla açılan popover (sitede `popover.tsx` yok — `shadcn add popover` +
§4.6 dili). Küçük iş.
2. **Paket kartı metni "2 liste revizyonu"** (`listem-govde.tsx:492`) — DESIGN §4.20'ye göre
7 Eki'den beri revizyon sayı sınırı yok; ürün/hukuk metni olduğu için `[BİLAL]`.
3. Sohbet panelindeki `ScrollButton` `shadow-md` ve `CevapIskeleti` `rounded-lg` prompt-kit'ten;
§4.4 "başka gölge yok" ile çelişiyor ama DESIGN §4.20 prompt-kit kabuğunu kabul ediyor —
dokunmadım.
4. `rapor-listesi.tsx` ve `tadimlik-satiri.tsx` çalışma ağacında başka oturumun değişikliklerini
taşıyor; kilit satırının turuncu arka plan bandı oradan geliyor, bakmadım.
5. `DialogContent` tabanındaki `duration-100` + `zoom-in-95` tw-animate sınıfları; §6 "yay/eğri
hareket.ts'ten" kuralının CSS tarafı `--egri-*` ile yazılmamış (önceden de böyleydi).
## Bilal'den istenen
1. `/listem`'de çöp ikonuna basıp diyaloğun yeni hâline bir bak (375 + masaüstü, 1 dk).
2. Ana sayfada sihirbaz modalını bir kez aç; taban köşe/kenarlık değişikliği oraya da yansıdı (1 dk).
3. Paket kartındaki "2 liste revizyonu" ifadesi kalacak mı, karar (1 dk).

View File

@@ -0,0 +1,68 @@
# Tasarımcı — /sonuc tadımlığı: daha kısa, daha ikna edici (10 Eki 2026)
Bilal: "tadımlık çok büyük yer kaplıyor; pazarlamacı tarafı eksik."
## Özet (5 madde)
1. **Yükseklik:** 1280 px'te **599 → 372 px** (%38 kısa; hedef ≥ üçte bir), 375 px'te **1002 → 819 px**. Telefonda örnek satır + CTA birlikte ~470 px: tek ekranda (812) okunuyor.
2. **Kurgu:** Tek kart, masaüstünde iki sütun — solda öğrencinin kendi sırasıyla başlık ("**85.000.** sıra için 24 tercih, her satırı böyle gerekçeli") + üç kanıt + turuncu CTA; sağda gerçek rapor satırı. Telefonda sıra: başlık → örnek → CTA. Kutu içinde kutu kalktı (eski `rounded-xl bg-slate-50` iç blok yok; örnek alanı kartın kendi bandı).
3. **Pazarlama dili:** Üç kanıt marka mesaj mimarisinin üç sütunu (veri · yöntem açıklığı · dürüst vaat), rakamlar tek kaynaktan (`DILIM_ETIKET`, `VERI_ARALIGI`, `VERI_YIL_SAYISI`). Vaat/garanti/korku/sahte sosyal kanıt yok.
4. **Durum yansıyor (§11.2 md. 1, 6):** sıra başlıkta; sihirbaz seçimi varsa etiket "Sırana ve seçimlerine uygun örnek satır" olur ve yeni satır blur çözülerek gelir (`kt-unblur`, azalt'ta yalnız opaklık); ilk boyada sahne yok.
5. **Teknik:** analitik (`tadimlik_goruntulendi`, `giris_cta_tiklandi/tadimlik`), `girisUrl` callback'i, SSR genel satır + `/api/tadimlik` yarış koruması aynen. `pnpm tasarim:denetim` 0 hata, `npx tsc --noEmit` temiz. Commit atılmadı.
## Değişen dosyalar
- `src/features/rapor/components/tadimlik-satiri.tsx` — yerleşim ve metin yeniden; mantık aynı. CTA artık `Button variant="cta" size="lg"` (elle `bg-orange-500` kalktı).
- `src/features/rapor/components/rapor-listesi.tsx` — `RaporSatirDetayi`'ye isteğe bağlı `sikistir` prop'u (yalnız ölçü: `text-sm`, `p-3`, `gap-2`; varsayılan değişmedi, rapor listesi etkilenmez).
- `page.tsx`, `tadimlik-bolumu.tsx`: dokunulmadı.
## Önce / sonra ölçüm (`getBoundingClientRect`, başsız Chromium + CDP)
| Genişlik | Önce | Sonra | Fark |
|---|---|---|---|
| 1280 px | 599 px | 372 px | −227 px (%38) |
| 375 px | 1002 px | 819 px | −183 px (%18) |
| 375 px, örnek + CTA | — | ~470 px | tek ekran |
Listesi olan ziyaretçi (liste çerezi = 3): bölüm tablonun altında (375'te y=4129, 1280'de y=2520), yükseklik aynı. Yatay taşma yok (`scrollWidth ≤ innerWidth` iki genişlikte de).
## Metin değişiklikleri
| Eski | Yeni |
|---|---|
| Rozet: "Yapay zekâdan örnek satır" | "Yapay zekâ listesi" |
| h2: "Yapay zekâ listendeki her satırı böyle anlatır" | "**85.000.** sıra için 24 tercih, her satırı böyle gerekçeli" (sıra `tr-TR` biçimli, mavi) |
| Paragraf: "Sıralamana uygun bir programın gerekçesi, yerleşme riski ve taban trendi — 24 tercihlik listenin her satırı bu formatta kurulur, ilk üçü hemen açılır." | Üç kanıt: "3 risk dilimi: Hayal · Dengeli · Güvenli" · "2021–2026 YÖK Atlas verisi, 6 yıl" · "Garanti, komisyon, reklam yok; [yöntem açık](/meraklisina)" |
| Kart altı: "Bu, 24 satırlık Yapay Zeka listenden yalnızca bir örnek." + "Kredi kartı gerekmez · Google ya da e-posta ile 30 saniyede · Giriş sonrası liste hemen üretilir" | Örnek etiketi: "Sırana uygun örnek satır" / "Sırana ve seçimlerine uygun örnek satır"; CTA altı: "Kredi kartı gerekmez · 30 saniyede giriş · İlk 3 satır hemen açık" |
| CTA: "Kendi listemi oluştur" | aynı (listenin tamamını vaat etmez; `ACIK_SATIR`=3 bağı yorumda korundu) |
## Ekranda bakılanlar
Gerekçe: oran, hiyerarşi, sütun dengesi ve metin sarması koddan görünmez. Bilal'in dev sunucusu (3000) kullanıldı; önizleme sekmesi başka bir oturum tarafından `/listem`'de kullanıldığı için ona dokunulmadı (bir kez 375'e küçültülüp geri alındı), görüntüler başsız Chromium'dan (`~/Library/Caches/ms-playwright` kabuğu, CDP) alındı. Giriş yapılmadı, hiçbir CTA'ya basılmadı.
- **1280 px açık/koyu:** iki sütun dengede (sol 21 rem). Başlık 2 satır, kanıtlar tek satır (üçüncüsü link sarmalı), CTA tam genişlik, not 2 satır. Sağda logo + ad + üniversite + Devlet çipi + il, sparkline + ~78.178., "Dengeli · Riskli · Devlet", iki kutu yan yana. Koyu temada yüzey `bg-card`, örnek bandı `bg-slate-50` → en koyu zemin; sorun yok.
- **375 px açık/koyu:** rozet, 2 satır başlık, 3 kanıt (üçüncüde "yöntem açık" bütün olarak ikinci satıra iner), örnek bandı (logo gizli — rapor listesiyle aynı §4.15 kararı), iki kutu alt alta, CTA ve not. Taşma yok.
- **Sihirbaz seçimi olan ziyaretçi** (localStorage profil: Mühendislik & Teknoloji, devlet): satır Sakarya Bilgisayar Mühendisliği'ne döndü, etiket "Sırana ve seçimlerine uygun örnek satır". 1280'de görüldü.
- **Listesi olan ziyaretçi** (liste çerezi): tadımlık tablonun altında, kart birebir aynı. 375'te görüldü.
Bakılmayan: 768 ve 1024 px (768–1023 tek sütun, kutular yan yana — koddan çıkarım); gerçek `prefers-reduced-motion` davranışı (CSS `kt-unblur-sade` dalı var); uzun üniversite adı ("Adana Alparslan Türkeş Bilim ve Teknoloji Üniversitesi") tadımlık havuzunda rastlanmadı — `SATIR_ALT_AD` sarar, koddan çıkarım.
## Tek kaynaklar ve §11
- Kanonik parçalar: `SectionEyebrow`, `Button variant="cta" size="lg"` + sondaki `ArrowRight`, `UniLogo`, `TurCipi`, `SATIR_*` sınıfları, `RaporSatirDetayi`, `DILIM_ETIKET`, `VERI_ARALIGI`/`VERI_YIL_SAYISI`, `kt-unblur`. Yeni bağımlılık yok, `dark:` yok, elle turuncu yok.
- En yakın vaka: **V4** (üst çubuk = kullanıcının durumu): başlık öğrencinin sırasını söyler, etiket seçimini tanır. Kurgu `PikselCtaYuzeyi`'nin "metin solda, kreatif sağda" düzeninden.
- §11.5: referans vaka açık ✓ · her eylemin cevabı (CTA `active:scale`, satır değişince blur çözülmesi) ✓ · durum yansıyor ✓ · tek sahne (ilk boyada hareket yok) ✓ · telefonda gizlenen yok (logo §4.15 gereği, sparkline zaten `md:`) ✓ · azalt'ta bilgi tam ✓ · hareket.ts/variant/bağımlılık ✓ · dış kaynak yok ✓.
## Denetim
`pnpm tasarim:denetim`: **0 hata, 42 uyarı** (hiçbiri bu iki dosyada; `elle-cta` uyarıları `sihirbaz-cagri-karti.tsx`, `cta-sira-form.tsx`, `tercih-degisti-modali.tsx`'te — başka iş). `npx tsc --noEmit` temiz.
## Backlog önerisi
- `sihirbaz-cagri-karti.tsx:282/304/334` ve `cta-sira-form.tsx:284`: elle yazılmış turuncu CTA'lar `variant="cta"`'ya alınmalı (denetim uyarısı; küçük).
- `trBaslikDuzeni("İSTANBUL ÜNİVERSİTESİ-CERRAHPAŞA")` → "İstanbul Üniversitesi-cerrahpaşa": tire sonrası kelime büyük harfe çevrilmiyor; tüm listelerde görünür (küçük, `src/lib/slug.ts`).
## Bilal'den istenen
1. `/sonuc`'a girişsiz girip 375 ve masaüstünde karta bakması; başlık cümlesi ve üç kanıt metnini onaylaması (2 dk).
2. Üçüncü kanıttaki "Garanti, komisyon, reklam yok" ifadesi markanın dış sözü olacak — uygun mu? (1 dk) [BİLAL]

View File

@@ -0,0 +1,53 @@
# Revizyon niyet modeli kıyası (10 Eki 2026)
## Soru
"Liste revize edilirken sorun yaşanıyor; daha önce çalıştık, neden hâlâ?" + "OpenRouter'da modeli değiştirsek mi (GLM?)"
## Teşhis
Revizyon mantığı 9 Eki'den beri koda bağlı ve doğru (QA: paketli hesapta 4/4 revizyon, sahte beyan 0).
Kalan sorun tek yerde: sohbet mesajını yapısal kurala çeviren **niyet çıkarımı** çağrısı
(`src/lib/ai/revizyon-niyeti.ts`, 20 sn zaman aşımı). Model `deepseek/deepseek-v4-flash`
OpenRouter'da **16 üst sağlayıcıya** dağılıyor; eval'de aynı gün Baidu, StreamLake, Wafer,
Venice, DigitalOcean, Alibaba, DeepInfra, Mancer gördük. Gecikme iki kümeli (1,5-2 sn / 12-20 sn),
20 sn'yi aşınca çağrı düşüyor → niyet "belirsiz" → istek normal sohbete gidiyor, liste değişmiyor
(QA B3 "bimodal gecikme" bulgusu bu). Ayrıca aynı istek iki koşuda farklı kural üretebiliyor
(r14 "ilk 10 İstanbul + sadece devlet": bir koşuda form, birinde tip eksik).
## Ölçüm (pnpm eval:revizyon --tekrar 2, 16 senaryo × 2, niyet modeli env'den; sohbet deepseek sabit)
| Niyet modeli | Geçen | Kural doğru | Niyet p50 / p90 / max | $/çağrı | Sağlayıcı |
|---|---|---|---|---|---|
| deepseek-v4-flash (koşu 1) | 31/32 | 21/22 | 2,0 / 5,1 / 6,0 sn | 0,00014 | 5 farklı |
| deepseek-v4-flash (koşu 2) | 29/32 | 19/22 | 5,0 / 15,1 / **20,0 sn (zaman aşımı)** | 0,00008 | 4 farklı |
| **google/gemini-3.1-flash-lite (koşu 1)** | **32/32** | **22/22** | 1,6 / 1,9 / 2,4 sn | 0,00101 | yalnız Google |
| **google/gemini-3.1-flash-lite (koşu 2)** | 30/32 | 20/22 | 1,3 / 1,9 / 2,4 sn | 0,00073 | yalnız Google |
| z-ai/glm-4.7-flash | 29/32 | 19/22 | 3,2 / 15,4 / 20,0 sn | 0,00019 | Venice, Cloudflare |
| z-ai/glm-5.3-flash (reasoning low) | 24/32 | 14/22 | 1,9 / 6,4 / 9,3 sn | 0,00023 | 18 farklı |
| z-ai/glm-5.3-flash (reasoning alanı yok) | 26/32 | 16/22 | 2,0 / 7,9 / 12,1 sn | 0,00034 | 17 farklı |
| qwen/qwen3.5-flash | 21/32 | 11/22 | 1,3 / 3,3 / 3,8 sn | 0,00015 | Alibaba |
| openai/gpt-5-nano, claude-haiku-5.5 | — | — | — | — | 400 "Provider returned error" (strict json_schema; incelenmedi) |
Ham sonuçlar: `scripts/eval/sonuc/2026-10-10T20-*-revizyon.json`. Toplam harcama ≈ 0,12 $.
GLM: 5.3-flash ve gpt-5-nano `reasoning_effort: "none"` isteğini 400 ile reddediyor
("Reasoning is mandatory"); bunun için `AI_REASONING_EFFORT` env'i eklendi (`src/lib/ai/cagri.ts`).
Reasoning açıkken bile GLM deepseek'ten kötü: kuralı daha sık kaçırıyor ve 17-18 sağlayıcıya dağıldığı
için gecikme yine iki kümeli.
## Karar önerisi
Niyet çıkarımı için `OPENROUTER_NIYET_MODEL=google/gemini-3.1-flash-lite`. Gerekçe: tek sağlayıcı
(gecikme tek kümeli, max 2,4 sn, zaman aşımı yok), en yüksek isabet, maliyet 7 kat ama mutlak
olarak 1.000 revizyon ≈ 1 $. Sohbet ve liste üretimi deepseek'te kalır (orada sorun ölçülmedi).
Yapılacaklar:
1. Gitea secrets'a `OPENROUTER_NIYET_MODEL=google/gemini-3.1-flash-lite` ekle (ci.yaml satırı hazır).
2. Deploy sonrası `[soru] revizyon niyeti` log satırlarında süre ve sağlayıcıya bak.
3. `/gizlilik` metni "OpenRouter (ABD) aracılığıyla" diyor; üst sağlayıcı adı geçmiyor → değişiklik gerekmez
(güvenlik-uyum ajanı teyit etsin).
4. (Yapıldı) Gemini "ilk 10 İstanbul, vakıf olmasın" isteğinde tipi `ilkTercihler` içine yazıyordu.
Niyet prompt'una kapsam cümlesi + şema açıklaması eklendi; prompt tek başına yetmeyince
`tipKuraliniTamamla` (revizyon-niyeti.ts) "vakıf olmasın / sadece devlet" kalıbında üst düzey
`universiteTipi`'ni koddan tamamlar hâle getirildi. Son tam koşu (16 × 2): 31/32 geçti,
kural 21/22, p50 1,3 sn; tek kaçan r04#2 ("İstanbul da eklensin" → iller.ekle bir koşuda düştü, stokastik).
5. Ayrı bir iş: QA B2 (paketsiz hesapta sahte form vaadi) ve B1 ("listemi değiştir" → diger) bu kıyasın
konusu değil; backlog'da.