Files
kolaytercih/docs/gece-vardiyasi/2026-09-26/00-gece-raporu.md

9.5 KiB
Raw Blame History

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.