From d147b3223ec3ab44a50390fa425149786b78ae9c Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Fri, 25 Sep 2026 01:26:57 +0300 Subject: [PATCH] =?UTF-8?q?docs(gece):=2025=E2=86=9226=20Eyl=20raporu=20?= =?UTF-8?q?=E2=80=94=20ki=C5=9Fiselle=C5=9Ftirme=20v1/v2,=20hukuk=20bulgul?= =?UTF-8?q?ar=C4=B1,=20Bilal'den=20istenenler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .../2026-09-26/00-gece-raporu.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md diff --git a/docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md b/docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md new file mode 100644 index 0000000..96a3001 --- /dev/null +++ b/docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md @@ -0,0 +1,79 @@ +# 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, ~4 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. + +## Bilal'den istenen + +1. **v2 dalını incele, merge/push kararı ver** — `git log main..v2` dört commit; okuma ~30 dk, canlı araç testi ~10 dk. +2. **Yurt dışı aktarım kararı:** Türkiye'de model mi, OpenRouter/DeepSeek ile standart sözleşme mi (avukata tek soru); kararla birlikte gizlilik metnindeki iki TODO'yu (unvan/adres, dayanak cümlesi) doldur — ~1 saat + avukat. +3. **Profil onay sorusu:** "evet"in bir krediye mal olması kabul mü, yoksa (a)/(b)/(c) seçeneklerinden biri mi — tek cümlelik karar, ~2 dk.