docs(gece): 25→26 Eyl raporu — kişiselleştirme v1/v2, hukuk bulguları, Bilal'den istenenler
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
79
docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md
Normal file
79
docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md
Normal file
@@ -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.
|
||||||
Reference in New Issue
Block a user