Files
kolaytercih/docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md
bilalgursen 2f01d06592
All checks were successful
Deploy / deploy (push) Successful in 7m12s
docs: Türkiye'de sağlayıcı adayları, 26 Eyl kararları (onay ücretsiz, model Türkiye'de), rapor eki
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 10:46:37 +03:00

87 lines
10 KiB
Markdown
Raw Permalink 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.
# 25→26 Eylül gecesi: kişiselleştirme v1 + v2
> Bilal'in "founder ve ürünün en yetkilisi olarak çalış, sabah okuyacağım" talimatıyla. Sesli özet: `~/Desktop/kolaytercih-gece-raporu-2026-09-26.m4a` (Yelda sesi, 2,5 dk).
## Özet (5 madde)
1. **v1 (main) bitti:** üniversite sayfasındaki "Örgün öğrenci" karesine "%44 kadın · %56 erkek" satırı geldi (YÖK İstatistik 2025-26, örgün ön lisans+lisans, üniversite geneli). Commit `05402f9`. Push edilmedi.
2. **v2 dalı açıldı ve dört commit'le doldu** (`../kolaytercih-v2` worktree'si): YÖK Atlas'ın atıp saklamadığımız alanları DB'ye alındı (ücret, burs, dil, öğretim türü, akreditasyon, kadro, baraj, ilçe, 194 koşul metni; 21.493 program); danışmana dört araç geldi (program ara, program detay, üniversite künyesi, profil kaydet); kapalı listeli profil "Kaydettiklerim" çipleriyle görünür ve silinebilir; bir sonraki liste bu profille süzülür. `pnpm build` v2'de temiz geçti.
3. **Hukuk araştırması sürpriz çıkardı:** gizlilik metni "Anthropic" diyor, kod OpenRouter → DeepSeek kullanıyor (Çin'de saklama). Bu tek başına aydınlatma ihlali. Daha önemlisi: sürekli sohbet aktarımı için "açık rıza" yolu 2024'ten beri kapalı; ya Türkiye'de model ya Kurul standart sözleşmesi gerekiyor. v2'de metin koda eşitlendi; dayanak kararı sende.
4. **Denenemeyen tek şey:** gerçek modelle araç çağrısı. Yerelde OpenRouter anahtarı yok; araç gövdeleri ve döngü sahte istemciyle test edildi, DeepSeek'in araç çağrısını gerçekten nasıl yürüttüğü canlıda ilk soruda görülecek. Reddederse kod düz sohbete düşüyor, kullanıcı hata görmüyor.
5. **Bilal'den istenen (aşağıda 3 madde):** v2'yi inceleyip merge kararı; sağlayıcı/aktarım kararı; profil onay sorusunun bedeli.
## 1. Ne yapıldı, nerede
### main (3 commit, push edilmedi)
| Commit | İş |
|---|---|
| `05402f9` | Kadın/erkek oranı üniversite sayfasında; `scripts/yok-istatistik-uret.py` E/K sütunlarını okur, `kadinYuzdesi()` yardımcısı |
| `f5e8e4f`, `ddf3505` | Araştırma belgesi (`docs/arastirma/2026-09-25-kisisellestirme/README.md`) + hukuk ve rakip araştırması (`hukuk-ve-rakipler.md`, 31 kaynak, 22 rakip adresi) |
| `da554c5` | KARARLAR.md: gecenin kararları |
### v2 (dal `v2`, 4 commit, worktree `/Users/bilalgursen/Desktop/kolaytercih-v2`)
| Commit | İş |
|---|---|
| `c23910c` | **Dalga 1 — veri.** `pnpm ozellik --yil 2026 --db …` betiği (`scripts/program-ozellik.ts`) API'den `program_ozellik` + `kosul` tablolarını doldurur; ham döküm `data/ham/` (gitignore). `src/lib/program-ozellik.ts` okuyucu. DB commit'te (yokatlas.db 17→21 MB). |
| `aa20517` | **Dalga 2 — araçlar + profil.** `src/lib/ai/araclar.ts` (4 araç), `cagri.ts` `sohbetAkisiAraclarla` (stream'de tool_calls biriktirme, en fazla 4 tur, sağlayıcı reddederse düz sohbet), `danisman-profil.ts` (kapalı liste, zod), drizzle `0005` `danisman_profil` tablosu, `/api/soru/profil` GET+DELETE, sohbet başlığında çipler, analitiğe yalnız alan adı. |
| `5a04db7` | **Havuz + KVKK metni.** Profil havuzu süzer (dil, örgün, burs, ücret, ev ili + km); havuz 24'ün altına düşerse gevşetme sırası profil → il → kategori; `/meraklisina` şeması ve metni aynı commit'te eşitlendi (AGENTS.md kuralı). Gizlilik metni yeniden yazıldı, giriş kartı "okudum/kabul" ayrımı, sohbet girişine "kişisel bilgi yazma" uyarısı. |
### Öğrenci gözüyle ne değişti (v2)
Öğrenci danışmana "İzmir'de kalmak istiyorum, vakıfta 400 bin üstü olmaz, İngilizce olsun" yazar. Danışman sorar: "Bunu profiline kaydedeyim mi?" Evet derse üç çip belirir: *Yaşadığı il: İzmir*, *Yıllık ücret en fazla 400.000 TL*, *Öğretim dili: İngilizce*. Sonra "Ege'de bilgisayar mühendisliği kaç sırayla alıyor?" diye sorunca danışman uydurmaz, `program_ara` ile DB'den okur ve profildeki süzgeçleri kendiliğinden uygular; sonuç sıfırsa profilsiz tekrar deneyip "profilinin dışında şunlar var" der. Listeyi yeniden ürettiğinde havuz bu üç tercihle süzülür; havuz dar kalırsa önce profil gevşetilir ve yapay zekâ uyarılarda bunu söyler. Çipteki çarpı alanı siler; bir sonraki liste onsuz kurulur.
## 2. Doğrulama (çalıştırıldı)
- `pnpm exec tsc --noEmit` ve `pnpm lint` (eslint + tasarım denetimi): main ve v2'de temiz; tasarım denetimi 0 hata, 12 eski uyarı (meraklisina-demo, bu geceyle ilgisiz).
- `pnpm build` v2'de: çıkış kodu 0, 1.935 statik sayfa. `.next` silindi (disk).
- Araç gövdeleri gerçek DB'de koştu: `program_ara` (profil: Ankara 300 km, İngilizce, ≤600 bin → 29 eşleşme, 8 gösterilen; Eskişehir Teknik 53.950 dengeli), `program_detay` (MÜDEK, kadro 2/2/10/10, baraj 300.000, evden 200 km, koşul metinleri), `universite_profili` (ODTÜ: URAP 3/198, 30.055 öğrenci, hoca başına 40, %40 kadın; Boğaziçi %44 kadın), bilinmeyen alan reddi ("din" → hata).
- Araç döngüsü sahte istemciyle: parçalı gelen iki tool_call birleşti, ikisi de çalıştı, ikinci turda mesaj sırası `system, user, assistant(tool_calls), tool, tool` doğru.
- Havuz: profilsiz 60 program; İzmir 250 km + İngilizce + ≤400 bin → 58 program, 6 il; Kars 60 km + burslu + İngilizce → dar, profil gevşetildi; sihirbazda Ankara seçiliyken km uygulanmadı (tasarım gereği).
- **Koddan çıkarım (çalıştırılmadı):** gerçek DeepSeek araç çağrısı; tarayıcıda çip görünümü (AGENTS.md: tarayıcı açma); `danisman_profil` göçü konteyner açılışında `db-goc.mjs` ile uygulanır (mevcut 0000-0004 ile aynı yol).
## 3. Hukuk: ne bulundu, ne yapıldı, ne bekliyor
Tam belge: `docs/arastirma/2026-09-25-kisisellestirme/hukuk-ve-rakipler.md` (A resmî durum, B rakip tablosu, C 24 maddelik sıralı liste).
**Bulgular (kısa):**
- Gizlilik metni kodla çelişiyordu (Anthropic ≠ OpenRouter/DeepSeek). 2026 cezası 85 bin–1,7 milyon TL aralığında. **v2'de düzeltildi.**
- Sürekli aktarım için açık rıza yolu kapalı (KVKK md. 9/6, Ocak 2025 rehberi). Seçenek: Türkiye'de model **ya da** Kurul standart sözleşmesi + 5 iş günü içinde bildirim. OpenRouter/DeepSeek'in bunu imzalaması belirsiz. Resend (İrlanda) için de aynı soru. **Karar sende + avukat.**
- Profil için açık rıza şart görünmüyor; Kurul rehberi kişiselleştirmeyi ayrı faaliyet sayıyor, önerilen kurgu "kaydedeyim mi?" onayı. **v2'de uygulandı** (`PROFIL_ONAY_SOR`); bedeli: "evet" bir kredi.
- VERBİS: <50 çalışan ve <100 milyon TL bilanço → muaf (büyük olasılıkla biz). VERBİS-dışı veri sorumlusu, şartı kalkan veriyi 3 ay içinde imha etmeli → **imha betiği yazılmadı**, süreler avukat onayı bekliyor.
- 18 yaş altı: ayrı madde yok; veliyle okuma notu ve "ödemeyi velin yapmalı" **metne eklendi**; 17 yaşındakine ücretli paket satışı avukata.
- Cinsiyet özel nitelikli değil; sağlık/engel öyle → sormuyoruz. Giriş/ödeme e-postası işlem iletisidir, İYS gerekmez; içine kampanya cümlesi eklenmez.
- Rakipler: çoğu (YÖK Atlas'ın resmî robotu dâhil) aydınlatma koymuyor; yurt dışı aktarımı standart sözleşmeyle açıklayan tek örnek Doping Hafıza.
**Gizlilik metninde açık bırakılanlar (kodda TODO):** veri sorumlusu unvanı ve adresi; yurt dışı aktarımın hukuki dayanağı cümlesi; saklama süresi sayıları (yazdım: sohbet+profil 12 ay, hesap silme 30 gün, imha 3 ay, fatura 10 yıl — avukat onaylamalı).
## 4. Bilinen sınırlar ve riskler
- **Model desteği:** OpenRouter üzerinden DeepSeek'in stream'de tool_calls üretmesi varsayımı. Üretmezse ya da 400 dönerse kod düz sohbete düşer; ilk canlı soruda `[soru] araç:` log satırına bak.
- **Onay sorusu maliyeti:** "kaydedeyim mi? → evet" akışı öğrenciye bir kredi yazar. Alternatifler: (a) onay mesajını ücretsiz say, (b) `PROFIL_ONAY_SOR=false` ile doğrudan kaydet ve çipteki çarpıya güven (avukat "gri alan" dedi), (c) cevabın altında "Kaydet" düğmesi (ek iş, ~yarım gün).
- **Sohbet bütçesi:** araç sonuçları JSON olarak geçmişe giriyor; bir soruda en fazla 2-3 araç isteniyor, `max_tokens` 1024 aynı kaldı. Uzun koşul metinleri 240 karaktere kırpılıyor.
- **Ham döküm tarihi:** `data/ham/ozellik-2026-2026-09-24.jsonl.gz` UTC tarihiyle adlandı (gerçek çekim 25 Eyl gece). Kozmetik.
- **app.db:** ana checkout'ta `data/app.db` senin değiştirdiğin hâliyle duruyor, dokunmadım; v2'de de değişmedi (göç deploy'da uygulanır).
- **DGS/yatay geçiş:** kod yazılmadı (karar: ayrı sayfa, sonraki dalga).
## 5. Sıradaki adımlar (öneri)
1. v2'yi merge etmeden önce: canlıda ya da anahtarlı bir ortamda danışmana üç soru sor (biri tercih cümlesi içeren), araç loglarını ve çipleri gör.
2. Dalga 3: öncelik çiplerini veriye bağlama ("İş bulma", "Yüksek maaş" kalkar; "Akreditasyonlu", "Evden yakın" eklenir), uyum puanı ve satır başına "neden bu program" cümlesi.
3. Ek Madde-1 sayfası (veri DB'de, SEO değeri var); DGS Tablo-2 ayrı tur.
4. İmha betiği (sohbet/profil 12 ay) — süreler onaylanınca.
## Ek (26 Eyl, sabaha karşı): iki karar geldi ve uygulandı
Bilal: "ücretsiz olsun, sunucu Türkiye'de."
- **Onay ücretsiz** (v2 `7042385`): "kaydedeyim mi?" sorusuna kısa evet/hayır kredi harcamaz; istemci bakiyeyi `X-Kredi-Dusuldu` başlığına göre günceller. 8 vakalık test geçti (gerçek soru içeren "evet ama …" bedava geçmez).
- **Model Türkiye'de:** kod sağlayıcıyı `.env`'den okur (`AI_BASE_URL`, `AI_API_KEY`), OpenRouter adları geriye uyumlu. Aday tablosu ve öneri: `docs/arastirma/2026-09-25-kisisellestirme/turkiye-saglayici.md` — ilk deneme LLMTR (OpenAI uyumlu, Türkiye etiketli Qwen 3.6 35B), B planı baykAI (yazılı DPA veriyor), EVREN'e erişim sorusu (bugünkü DeepSeek v4-flash orada). Sağlayıcı seçilince gizlilik metni aynı commit'te yeniden yazılacak; Resend (İrlanda) ayrı karar.
## Bilal'den istenen
1. **v2 dalını incele, merge/push kararı ver** — `git log main..v2` beş commit; okuma ~30 dk, canlı araç testi ~10 dk.
2. **LLMTR'de hesap aç ve anahtarı ver** (`AI_BASE_URL=https://llmtr.com/v1`), ben araç çağrısı + liste şeması + gecikme testini koşarım; aynı gün LLMTR ve baykAI'a DPA/veri merkezi sorusu — ~20 dk.
3. **Gizlilik metnindeki unvan/adres TODO'sunu doldur** — ~5 dk.