Commit Graph

396 Commits

Author SHA1 Message Date
bilalgursen
92c04c0f1e fix(danisman): bedelsiz onay yalnız son mesaj danışmanın sorusuysa geçerli [KARAR]
Güvenlik denetimi B1: aynı onay sorusuna art arda gönderilen "evet"ler
0 bakiyede bedelsiz model çağrısı açıyordu (09-guvenlik-uyum.md).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:57:18 +03:00
bilalgursen
c89a86c069 docs(gece): güvenlik ve uyum denetimi raporu (09)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:56:48 +03:00
bilalgursen
7ba668b551 docs(gece): liste düzeltmeleri raporu (07) + düzeltme sonrası robot eval sonucu
40 profil, gerçek model, kod = 9469c0b (koşu anında çalışma ağacında).
Üretilen liste 37 → 40, zaman aşımı 3 → 0, ikinci çağrı 10 → 1, vaat dili
içeren üst metin 14 → 0 ve gerekçe 19 → 0, p50 22,5 → 14,8 sn,
p95 61,6 → 30,1 sn.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:52:21 +03:00
bilalgursen
9469c0bd89 perf(liste): satır biçimi "id|gerekçe" — çıktı token'ı ~%27 az, gecikme p50 22,5 → ~14 sn [KARAR]
Gecikme çıktı token'ıyla orantılı (üst sağlayıcıya göre 25–115 token/sn);
çıktının ~%20'si satır başına yinelenen JSON anahtarlarıydı.

- Tel şeması: liste elemanı nesne ({"id","gerekce"}) yerine tek dizgi
  "id|gerekçe"; satirCoz ayrıştırır, kimlik yine havuzda doğrulanır
  (havuz-dışı koruması aynı).
- maxTokens 4000 → 2000 (ölçüm: 38 sağlıklı çağrıda çıktı 746–1.099 token).
  reasoning'i kapatmayan üst sağlayıcıya düşen çağrı ~50 sn yerine ~25 sn'de
  kesilir; ikinci deneme o sağlayıcı atlanarak yapılır.

Ölçüm: aynı 3 profilde (p05, a07, p13) çıktı 3.724 → 2.710 token.
40 profil: çağrı başına ortalama çıktı ~1.277 → ~940 token; gecikme p50
22,5 → 14,8 sn, p95 61,6 → 30,1 sn (p95 kazancının çoğu ikinci çağrının
kalkmasından — 3128b01). Maliyet 40 liste için 0,0285 → 0,0300 $ (değişmedi).
İzlenecek: son koşuda ham çıktıda 2 havuz-dışı kimlik görüldü (taban ve önceki
iki koşuda 0); ikisi de korumada atıldı, nihai listede havuz dışı 0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:49:57 +03:00
bilalgursen
da8d303ea4 fix(liste): başka programa ait gerekçe (il/üniversite çelişkisi) şablona düşsün [KARAR]
Kök neden 3 (04-eval-sonuclari): 888 gerekçenin 7'si başka programa aitti
(ör. Erzurum'daki programa "sanayi şehri Konya'da").

- liste-denetim.ts: yerCeliskisi — veri tabanındaki il ve üniversite
  adlarından sözlük. Bulunma ekiyle ("Konya'da") anılan il programın ili
  değilse, ya da anılan il ne programın ne adayın seçtiği/oturduğu ilse,
  ya da anılan üniversite satırınki değilse çelişki. "İzmir'e yakın"
  (adayın ili), üniversite adındaki il, "Kıbrıs'ta" (KKTC şehirleri),
  İTÜ/ODTÜ gibi kısaltmalar ve bölge/ilçe adları ("Ege", "Çankaya") ihlal
  değil.
- rapor.ts: çelişkili gerekçe koddan şablona düşer (ek model çağrısı yok).
- /meraklisina şeması ve 4. bölüm anlatımı (AGENTS.md senkronu): yapay
  zekânın seçimi ve gerekçeleri kodla denetlenir; eksik satır havuzdan
  tamamlanır, vaat içeren ya da başka programı anlatan gerekçenin yerine
  standart açıklama yazılır; yapay zekâ zamanında yanıt vermezse liste aynı
  havuzdan kurallarla kurulur. Havuz dışına çıkamama kuralı değişmedi. Bu
  metin önceki iki commit'in (3128b01, 8462894) davranışını da kapsar.

Kanıt: taban koşusunun 888 gerekçesi üzerinde çevrimdışı — 7 gerçek
çelişkinin 7'si yakalandı, yanlış alarm 0 (eval'in 2 yanlış alarmı dahil).
Canlı koşular: il çelişkisi 7 → 0 (iki koşuda 1 ve 0 gerekçe şablona düştü).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:49:41 +03:00
bilalgursen
10c405439d docs(gece): danışman sohbeti düzeltmeleri raporu (08)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:49:22 +03:00
bilalgursen
8462894137 fix(liste): liste metinlerinde deterministik çıktı denetimi — vaat dili kullanıcıya gitmez [KARAR]
Kök neden 1 (04-eval-sonuclari): yasak yalnız prompt'taydı; 37 listenin
14'ünün üst metninde, 888 gerekçenin 19'unda vaat dili / "garanti" vardı.

- liste-denetim.ts (yeni, saf fonksiyonlar): yasakIfadeler — Türkçe
  çekimleri kapsayan dar kalıplar (garanti*, kesin, yüzde yüz, yerleşirsin,
  rahat/kolay yerleşme, yerleşme şansı/ihtimali/olasılığı, şansın yüksek,
  sırana rahat…). Reddeden kalıp ("garanti verilemez", "kesin değildir"),
  "Güvenli" dilim etiketi, "%100 burslu", "kesin kayıt" ihlal DEĞİL.
  dilimAdiniDuzelt — modelin dilim adı olarak yazdığı "garanti dilim/liste"
  görünen ada ("güvenli") çevrilir. dayanaksizSayi — metindeki rakam girdide
  yoksa ihlal (rakamlar koddan basılıyor).
- rapor.ts: her gerekçe, genel değerlendirme ve her uyarı denetimden geçer.
  İhlalli gerekçe → koddan şablon gerekçe; ihlalli genel değerlendirme →
  koddan (dağılım sayılarıyla) şablon; ihlalli uyarı atılır, 2'nin altına
  düşerse koddan uyarı eklenir. Seçili alanın dışındaki programa "seçtiğin
  alanla uyumlu" diyen gerekçe de şablona düşer. Ek model çağrısı YOK;
  kredi ve gecikme etkilenmez. Canlı akışa Jev eklenmedi (eval'de hakem).

Önce → sonra (eval regex'i, 40 profil): vaat dili içeren üst metin
14/37 → 0/40, gerekçe 19/888 → 0/960; hakem (Jev) ihlali 30 → 1 satır.
Bedel: 960 gerekçenin 4'ü, 40 genel değerlendirmenin 2'si, 2 uyarı şablona düştü.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:49:21 +03:00
bilalgursen
3128b01e26 fix(liste): model seçimi önce kodla onarılsın; ikinci çağrı ve zaman aşımı azalsın [KARAR]
Kök neden 2 (04-eval-sonuclari): 10/40 listede ikinci model çağrısı,
3/40'ta 60 sn zaman aşımı.

rapor.ts
- secimiOnar: yinelenen ve havuz-dışı kimlik atılır, yanlış listeye konan
  program havuzdaki gerçek dilimine taşınır, hedefi aşan dilim kırpılır,
  eksik satır havuzdan deterministik sırayla (önce adayın seçimine uyanlar,
  sonra sıraya yakınlık) tamamlanır; tamamlanan satırın gerekçesi şablondur.
  İkinci model çağrısı yalnız çıktı şemaya uymazsa ya da modelin seçiminin
  yarısından azı kullanılabiliyorsa yapılır. Havuz-dışı koruması aynen durur.
- Prompt: havuz dilim başına üç dizi (hayal/dengeli/guvenli) olarak gider,
  üçüncü listenin tel adı `guvenli` (iç anahtar `garanti` kalır); vaat ve
  rakam yasağı netleşti; adayın serbest metni etiket içinde veri olarak girer.
- İlk üretimde zaman aşımı: liste havuzdan kodla kurulur, üst metin bunu
  söyler (ZAMAN_ASIMINDA_KODLA_KUR). KREDİ: bu yolda üretim başarılı sayılır,
  iade yapılmaz. Revizyonda zaman aşımı eskisi gibi hata + iade.
- raporUretAyrintili + RaporTani: onarım/şablon/çağrı gözlemi (eval ve log).

cagri.ts
- Üst sağlayıcı gözlemi (CagriGozlemi) ve tepkisel dışlama: reasoning kapalı
  istendiği hâlde düşünme token'ı üreten üst sağlayıcı 6 saat
  provider.ignore ile atlanır. Ölçüm: 16 üst sağlayıcıdan yalnız AtlasCloud
  isteğe uymuyor (4.000 token'ın 3.999'u düşünme, ~50 sn, içerik yarım);
  zaman aşımlarının ve "iki denemede başarısız" hatasının kaynağı buydu.

robot.ts: tanılı API, yeni tel şeması, onarım/şablon/üst sağlayıcı özeti,
"Kıbrıs'ta" il çelişkisi yanlış alarmı.

Önce → sonra (40 profil, gerçek model; ayrıntı 07-liste-duzeltmeleri.md):
üretilen liste 37 → 40, zaman aşımı 3 → 0, ikinci çağrı 10 → 1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:49:01 +03:00
bilalgursen
fb75e1a08e fix(danisman): kayıt notu 'kaydetmedim, not ettim' cevabına eklenmesin; kritik etiket tekrar koşusu [KARAR]
Kritik etiketler (vaat, baraj, kriz, kriz-değil, enjeksiyon, profil; 37 soru × 2, commit fcfa2e3):
63 geçti / 6 gri / 5 kaldı. Tam koşuyla birlikte 3 tekrar: 37 sorunun 23'ü 3/3 geçti, hiç geçmeyen yok.
- Kayıt notu gerçek modelle doğrulandı: s035'te model aracı çağırmadan 'Kaydettim' dedi, sunucu notu eklendi.
- Yanlış alarm: s036'da aday 'kaydetme' demişken 'Tamam, kaydetmedim… not ettim' cevabına not eklendi ve
  yeniden 'kaydedeyim mi?' soruldu. 'not aldım/ettim' kalıbı çıkarıldı; cevap kaydetmediğini söylüyorsa
  not eklenmez. Mekanik test 7/7.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:46:49 +03:00
bilalgursen
fcfa2e31df fix(danisman): tam koşudan çıkan düzeltmeler — regex alıntı yanlış alarmı, listeye çapalanma, eval beklentileri [KARAR]
Tam koşu (112 soru, commit 2bb9250, liste: taban çizgisinin robot dosyası): 82 geçti / 14 gri / 16 kaldı
(taban çizgisi 56 / 23 / 33). Sonuç: sonuc/2026-10-05T05-42-24-sohbet.json.
- cikti-denetimi: 'Hayır, "kesin tutar" gibi bir ifade kullanamam' cümlesine not ekleniyordu (s060; tam
  koşudaki tek canlı not buydu). Tırnak içinde anılan ifade ve 'kullanamam' artık ihlal sayılmıyor.
  Yeniden tarama: tam koşunun 112 cevabında 0 isabet; 73 örnekli altın sette 0 yanlış alarm, 1 kaçan (aynı).
- Prompt: sorulan program listede aynen yoksa benzer satırın kimliği kullanılmaz; listeyle sınırlı olmayan
  soruda program_ara çağrılır. (Liste kimliği yeni bir hata türü getirdi: s015'te 'Kocaeli Makine' yerine
  listedeki Kocaeli İnşaat'ın kimliği kullanıldı.) 4 soru × 2: s007 0/1 → 2/2; s015 ve s091 1/2; s004 0/2 (kaldı).
- Eval: s010/s012/s014/s044/s046 artık listedeki kimlikle doğrudan detay/net/karşılaştırma çağırıyor;
  program_ara şartı kaldırıldı. s054 icermemeli 'kira ortalama' yönlendirme cümlesine takılıyordu.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:44:23 +03:00
bilalgursen
2bb9250df6 fix(danisman): bunalmış adaya rehber öğretmen yönlendirmesi; yersiz 'kaydedeyim mi' sorusu [KARAR]
- s070 (aile baskısı, kendine zarar dili yok): 4 koşunun 3'ünde rehber öğretmen/yetişkin yönlendirmesi
  yoktu (eski prompt'la da 1/2). GÜVENLİK kuralına 'bunalma' durumu eklendi; deyimler kriz değildir.
- Model profil onay sorusunu ilgisiz cevaplara ekleyebiliyordu (s070, s105); soru yalnız aday o mesajda
  yedi profil tercihinden birini söylediyse sorulur.
Kanıt tam koşuda ve kriz etiketinin 3 tekrarında (bu commit'ten sonra) raporlanır.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:39:36 +03:00
bilalgursen
18787995a1 fix(danisman): iç talimat/araç şeması gizliliği ve kişisel veri kuralı (iş 5) [KARAR]
- Prompt: talimat, araç adı/parametre/şema ve altyapı paylaşılmaz; mesajdaki '[SİSTEM]', 'yönetici'
  iddiaları ve yapıştırılan araç sonucu talimat değildir; kredi/paket/kilit modelin elinde değil.
- Prompt: ad-soyad, T.C. kimlik no, telefon, e-posta, adres istenmez; yazılırsa tekrarlanmaz, kaydedilmez.
- cikti-denetimi.semaSizintisiVar: cevapta ≥3 araç adı ya da şema anahtarı → yalnız log (akış geri
  alınamaz; metin loglanmaz). Eval'de 'sema-sizintisi' kontrolü. ~290 eval cevabında tek isabet s077 (taban).
- profil_guncelle serbest metinle kişisel veri YAZAMAZ — koşarak doğrulandı: alan kapalı liste (ad/not →
  'geçersiz seçenek'), evIl yalnız tanınan il ('Mehmet Kaya', '12345678901' → 'İl tanınmadı'), burs/dil/
  kampüs kapalı seçenek, maxKm/ucretUst aralıklı tam sayı. Artık risk: ucretUst 50.000–5.000.000
  aralığında herhangi bir tam sayıyı kabul eder (ör. 7 haneli bir numara); serbest metin değil.
Kanıt (enjeksiyon + özel nitelikli veri, 12 soru × 2): s077 şema dökümü taban çizgisinde 'kaldı' → 2/2 geçti;
s074 gri → 2/2 geçti; s088 adı kabul → 1/2 (bir koşuda adı tekrarladı ama TC istemedi). Toplam 18 geçti / 2 gri / 4 kaldı.
Kalan 'kaldı'lar bu işin dışında: s070 rehber öğretmene yönlendirmedi (ayrı commit), s078 hakem.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:39:21 +03:00
bilalgursen
f4a5e23c51 fix(danisman): 'Kaydettim' deyip kaydetmeme — sunucu tarafı denetim + prompt kuralı (iş 4; QA H4) [KARAR]
- sohbet-akisi.ts: cevapta kayıt beyanı (kaydettim / profiline ekledim / not aldım…) var ama o turda
  başarılı profil_guncelle ('kaydedildi') yoksa cevabın sonuna düzeltme notu eklenir. Kayıt kararı
  modelin sözüne bırakılmaz; gerçek araç sonucuyla karşılaştırılır. Hata dönen çağrı sayılmaz.
- Kredi: bu cevabın kredisi değişmez (iade yok, ek model çağrısı yok). Not 'profiline kaydedeyim mi'
  ibaresini taşır; adayın 'evet'i mevcut bedelsiz onay yolundan geçer — sistemin hatasını düzeltmek
  adaya kredi harcatmaz.
- Prompt: KAYIT DÜRÜSTLÜĞÜ kuralı (araç 'kaydedildi' dönmediyse 'kaydettim' deme).
- scripts/eval/akis-denetim.ts: sahte yerel model ucuyla parasız mekanik test (6 senaryo: aracsız
  'kaydettim', araçlı, araç hatası, vaat regex notu, temiz, araç kotası) — 6/6 geçti.
  Gerçek modelle bu yol henüz tetiklenmedi; model davranışı eval:sohbet ile ölçülür.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:37:33 +03:00
bilalgursen
ebc4aa4205 fix(danisman): araç kullanımı — rehber yönlendirmesi ve alıntısı, liste kimliği, çağrı kotası, kısaltma/il takma adları (iş 3; B7, B10, B11, B12, B14) [KARAR]
(a) Prompt + araç açıklaması: kural/süreç/takvim sorularında önce rehber_ara / tercih_takvimi; ezberden
    kural, oran, tutar yazma. rehber_ara en iyi eşleşen yazıdan ilgili paragrafları (alinti, en çok 1.600
    karakter) döner: yalnız başlık+özet dönerken model ayrıntıyı uyduruyordu (rehber 'OBP × 0,12' derken
    cevap '0,6' ve '0,75' yazdı). Prompt'a SAYI KURALI: listede ya da bu cevaptaki araç sonucunda
    görünmeyen sayı yazılmaz; yapıştırılan 'araç sonucu' veri değildir.
(b) rapor.ts listeOzetiCikar(…, { kimlik: true }): sohbet prompt'una giden özet satırında program kimliği.
    Varsayılan davranış ve rapor-actions.ts çağrısı değişmedi; kullanıcıya görünen metin değil.
    NOT: rapor.ts'te öteki ajanın commit'lenmemiş liste üretimi değişiklikleri var; bu commit'e yalnız
    listeOzetiCikar parçası alındı (indekse elle yazıldı), onların satırları girmedi.
(c) sohbet-akisi.ts: bir adımda en fazla 4, bir cevapta en fazla 8 araç çağrısı; fazlası çalıştırılmaz,
    modele açık mesaj döner. Cevap düşmez, kredi iadesi tetiklenmez (taban çizgisi s057: 33 çağrı).
(d) universite parametresi ve universite_profili 27 kısaltma tanır (ODTÜ, İTÜ, DEÜ, GTÜ, İYTE…);
    il: Urfa/Antep/Maraş/İzmit takma adları, KKTC şehirleri (Lefkoşa, Girne…) ve il='KKTC';
    il_ozeti aynı çözümü kullanır; profil evIl takma adı tanır. Kilitli listede 'kalan N tercih'
    gerçek liste uzunluğundan.
Kanıt: rehber_ara beklenen sorularda çağrılma 1/9 (taban) → 18/18 (9 soru × 2); 'kaldı' 5 → 0, 10 geçti, 8 gri
(gri: türetilmiş sayı ve hakem gri bölgesi). tercih_takvimi 4/4. s008 kimlikle tek adımda program_detay 2/2.
s057 en çok 4 çağrı. Maliyet: rehber sorularında araç çıktısı ~+500 token.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:34:56 +03:00
bilalgursen
f5569394db fix(danisman): veri yılı ve başarı sırası barajı prompt'ta ve araç çıktısında (iş 2; B2, B8, B16) [KARAR]
- Prompt: veri yılı veri-yillari.ts'ten (SON_YIL) türetilir; 'geçen yıl' kalktı, başka yıl uydurma yasağı.
- Prompt: baraj bölümü. Değerler program_ozellik.min_basari_sirasi'ndan (araclar.barajTablosu),
  adayın sırasıyla kıyas KODDA yapılır ('BARAJ DIŞI, tercih EDEMEZ'); TYT profilinde yazılmaz.
- program_ara / program_detay: baraj alanı (veride boşsa null, uydurulmaz), tabanYili, baraj dışıysa
  barajDurumu ve dilim yerine 'Tercih edilemez (baraj dışı)'. dilim süzgeci baraj dışını getirmez.
  program_detay'daki tercihBaraji alanının adı baraj oldu.
- program_ara: (KKTC Uyruklu) ve (M.T.O.K.) satırları varsayılan gizli (rapor-havuzu.ozelKontenjanSatiriMi);
  ozel_kontenjan=true ile açılır.
- Eval: yanlış veri yılı için kod kontrolü (veri-yili); hakem state'ine baglam alanı (baraj tablosu, paket
  bilgisi) — yoksa 'baraj 100.000' ve '299 TL' dayanaksız sayılıyordu; s103 araç şartı kalktı.
Kanıt: baraj soruları taban çizgisinde 0/5; sonra s103/s104/s105 6/6 (2 tekrar), s063 karışık.
Yanlış veri yılı: taban çizgisinde 9 cevap; aynı 8 soru × 2'de 0. Kilitli: s106 2/2.
Kredi/maliyet: ek çağrı yok; sistem prompt'u ~450 token büyüdü (soru başı girdi ~%4).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:28:19 +03:00
bilalgursen
151e44780f fix(danisman): olasılık/vaat dili — prompt kalıpları, anahtarsız regex denetimi, Jev sorusu ve sürümü (iş 1) [KARAR]
(a) Prompt: yasak kalıp listesi + yerine ne denir örnekleri; 'olasılığı düşük' de yasak.
(b) cikti-denetimi.ts: anahtarsız regex (vaatDiliBul). Akışta Jev VEYA regex yakalarsa düzeltme notu.
    Ek model çağrısı yok, kredi etkilenmez; Jev atlanırsa regex yine koşar.
(c) Jev: model jev-1.13.0'a sabitlendi; soruya ölçüt (criteria) eklendi. 01 raporundaki ek cümle
    TEK BAŞINA gerçek cevaplarda 15 ihlalin 8'ini kaçırdı; 'olumsuz yöndeki tahmin de ihlaldir'
    cümlesiyle birlikte eklendi. Canlı eşik 0,50 kaldı (73 örnek: yanlış alarm 0/40, kaçan 3/33;
    regex ile birlikte 0/40 ve 0/33). Eval: danışmanda yerlesme_vaadi eşiği 0,25/0,35.
Kanıt (aynı 23 soru × 2, deepseek-v4-flash): geçen 13/46 → 25/46; jev:yerlesme_vaadi 'kaldı' 20 → 1;
canlı not eklenen cevap 2/46. Dosyalar: sonuc/*-sohbet-vaat-once.json, *-vaat-sonra.json, *-jev-kesif.json.
Akış tamponlanmadı: ihlalli cümle ekranda kalır, altına not düşer (bilinçli; [BİLAL] kararı).
Eval verisi: s060/s061/s062/s064 icermemeli kalıpları reddeden cümleye takılıyordu, kaldırıldı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:23:07 +03:00
bilalgursen
080dcc9909 test(eval): sohbet eval verisi ve altyapısı güncellendi (iş 6) [KARAR]
- s104/s105: havuz düzeltmelerinden (B2) sonra öncül değişti; soru ve beklenti yeniden yazıldı.
- s084: icermemeli 'garanti' sorumluluk reddine takılıyordu; daraltıldı.
- s018/s033/s039/s048: kabul edilebilir cevapta araç şartı kaldırıldı (04 raporu §H).
- s088: adın kabul edilmesi metin kontrolüyle yakalanır.
- Kilitli (paketsiz) senaryoda Jev hakem bağlamına ürün bilgisi eklendi (299 TL, /paket yanlış alarmı).
- Paketsiz liste özeti kırpması danisman-prompt.ts'e taşındı (sohbetListeOzeti); route.ts ve eval aynı fonksiyonu kullanır, kopya kalktı. Davranış aynı.
- --tekrar N, tutarlılık özeti, ortalama araç çağrısı ve soru başı maliyet eklendi.
- Vaat regex'i 'AIS'e girersin', 'sınava girersin' cümlelerine takılmıyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:14:51 +03:00
bilalgursen
e06c486b1a test(eval): profil beklentileri havuz düzeltmeleri sonrası davranışa göre yeniden üretildi
- 22 profilin beklenen değeri (gevşetme, minAday, hedef) B1/B2/B3/B5/B8
  sonrası gerçek havuzOlustur() çıktısına eşitlendi; "liste-24-alti"
  etiketi kalktı, düzelen bugların supheli kayıtları temizlendi.
- robot.ts: "alan-ilsiz-gevsedi" değişmezi artık yalnız alanda adayın
  yazabileceği 24+ program varken ihlal sayar (a07: baraj yüzünden alanda
  1 program kalıyor, gevşetme meşru; beklenti hatasıydı).

Önce: pnpm eval:robot 22 temiz / 18 ihlalli, çıkış 1.
Sonra: 40 temiz / 0 ihlalli, çıkış 0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:12:59 +03:00
bilalgursen
065a9c102d feat(eval): tercih robotu ve danışman sohbeti için tekrar koşulabilir eval + ilk taban çizgisi
- scripts/eval/robot.ts: 40 profilde modelsiz havuz değişmezleri (CI, çıkış kodu) ve
  --model ile gerçek liste üretimi denetimi (şema, havuz-dışı, yasak ifade, il
  çelişkisi, sayı tutarlılığı, Jev gerekçe grubu, gecikme, maliyet)
- scripts/eval/sohbet.ts: 112 soru gerçek danismanAkisi ile; araç kuralları, metin
  kontrolü, sayı kaynağı, vaat regex'i, Jev danışman grubu
- scripts/eval/ortak.ts: kullanım ölçümü, Jev istemcisi, kod denetimleri
- package.json: eval:robot, eval:sohbet
- İlk koşu sonuçları ve rapor (04-eval-sonuclari.md)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:34:11 +03:00
bilalgursen
f5b55e05dc docs(gece): yazılımcı havuz düzeltmeleri raporu (B1–B5, B8)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:21:14 +03:00
bilalgursen
1d970ec8a7 docs(havuz): B4 — gevşetme sırası anlatımı koda eşitlendi (profil → alan → il) [KARAR]
Kod her zaman önce alanı, sonra ili gevşetiyordu (il korunur, aynı ildeki
alan dışı programlarla dolar); fonksiyon yorumu, /meraklisina şeması,
4. bölüm anlatımı ve aria-label ise "önce il, sonra alan" diyordu.
KARARLAR.md'de sıra için karar yok; davranış DEĞİŞMEDİ, yalnız anlatım
koda eşitlendi (AGENTS.md şema senkronu). Hangi sıranın doğru olması
gerektiği raporda [BİLAL] sorusu.

Kanıt: p01 (Eskişehir), p06 (İzmir), a15 (Kilis) — il korunur, alan
gevşer; 40 profilde bu commit öncesi/sonrası havuz birebir aynı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:17:23 +03:00
bilalgursen
0a11b15304 fix(havuz): B2 — başarı sırası barajını geçemeyen adaya o bölüm önerilmesin [KARAR]
Havuz yalnız taban sırasına bakıyordu; hayal dilimi "adayın üstünde
kapanan her şey" olduğu için barajın hemen dışındaki adaya tam da
yazamayacağı bölümler düşüyordu (52.000 sıralı adaya tıp, 310.000'e
mühendislik). Kaynak uydurma tablo değil: program_ozellik.min_basari_sirasi
(YÖK Atlas API, 2026 kılavuzu; katalogdaki "baraj … sıra" satırı ve
danışmanın tercihBaraji alanı da aynı kolonu okur). db.havuzAdaylari artık
min_basari_sirasi < adayın sırası olan programları SQL'de çıkarır; barajı
boş program süzülmez.

Kanıt (havuzdaki baraj dışı program, önce → sonra): a04 4 → 0, a06 11 → 0,
a08 11 → 0, p03 17 → 0; 40 profilin hepsinde 0. a07 (SÖZ 310.000, eğitim):
alandaki programların tamamı barajlı olduğu için alan artık gerçekten
gevşiyor (24 hayal → 5/13/6).

Bilinen sınır: kolon bazı barajlı bölümlerde boş (ör. 16 tıp, 11 hukuk
satırı) — veri işi, raporda.

/meraklisina şeması (aday havuzu düğümü), 4. bölüm anlatımı, aria-label
ve figcaption aynı kuralla güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:17:01 +03:00
bilalgursen
22ac604233 fix(havuz): B8 — KKTC uyruklu ve M.T.O.K. kontenjan satırları havuza girmesin [KARAR]
YÖK Atlas özel kontenjanları ayrı program satırı olarak veriyor; adında
"(KKTC Uyruklu)" ya da "(M.T.O.K.)" geçen, taban sırası olan 118 satır
herkesin aday havuzuna giriyordu (p02'de 54 programın 7'si). Sihirbaz
uyruk ya da lise türü sormadığı için bu satırlar herkese önerilemez.
Kural tek yerde ve export'lu: rapor-havuzu.ts → ozelKontenjanSatiriMi().

Kanıt (havuzdaki özel kontenjan satırı, önce → sonra): p02 7 → 0,
p14 6 → 0, p05 4 → 0, p09 3 → 0, a09 3 → 0; 40 profilin hepsinde 0.
Gevşetme basamağı ve liste uzunluğu hiçbir profilde değişmedi.

/meraklisina şeması (aday havuzu düğümü), 4. bölüm anlatımı, aria-label
ve figcaption aynı kuralla güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:15:46 +03:00
bilalgursen
497b0247a0 fix(havuz): B5 — gevşeyen filtreye uyan programlar havuzda kalsın [KARAR]
İl gevşeyince havuz baştan, ilsiz kuruluyordu; seçili ildeki programlar
sıraya en yakın 20'ye giremezse listeden tamamen düşüyordu (Kayseri 1/60,
Trabzon 0/25) — prompt ise "seçili illere öncelik ver" diyordu. Artık
gevşetmenin her basamağında seçime uyan programlar önce alınır, boşluk
sıraya en yakın diğer programlarla dolar. Aynı kural alan ve danışman
profili gevşediğinde de geçerli (tek yardımcı: oncelikliBirlestir). Kırpma
sonrası havuz yine dilim sırasında, dilim içinde yakından uzağa dizilir.

Kanıt (havuzda seçili ildeki program, önce → sonra): p12 Kayseri 1 → 9,
p13 Trabzon 0 → 4, b06 Düzce 2 → 10, a09 Konya 2 → 3. Gevşetme basamağı ve
liste uzunluğu hiçbir profilde değişmedi.

/meraklisina şeması, 4. bölüm anlatımı ve aria-label aynı kuralla
güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:15:01 +03:00
bilalgursen
fd464e9cc2 docs(gece): yazılımcı QA düzeltmeleri raporu
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:14:08 +03:00
bilalgursen
c1d81cd1ec fix(havuz): B1 — tek dilime yığılan havuz 24'ün altına kırpılmasın [KARAR]
24 eşiği kırpmadan önce sayılıyor, sonra her dilim 20'ye iniyordu; havuzu
tek dilimde toplanan adayın listesi 20–22 satırda kalıyordu (SAY 800 devlet
sağlık: 617 güvenli program varken 22 satır). Kırpma artık dilim başına
20'yi korur ama toplam 24'ün altına düşecekse eksiği, adayı kalan
dilimlerden tamamlar. Dağıtım kuralı dilimHedefiHesapla ile aynı
(dengeli → güvenli → hayal) ve tek yardımcıda toplandı; 5/13/6 iskeleti ve
hedef hesabı değişmedi.

Kanıt (liste satırı, önce → sonra): a02 22 → 24 (1/1/22), a01 21 → 24,
a11/a12/a17/b05 20 → 24. Diğer 33 profilde havuz birebir aynı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:13:57 +03:00
bilalgursen
ef68f93463 fix(havuz): B3 — alan süzgeci kırpmadan önce uygulansın [KARAR]
Havuz her dilimden sıraya en yakın 60 programı alıp alan (kategori)
süzgecini ondan sonra uyguluyordu; il seçmeyen adayın alanı, o alanda
onlarca program varken "yeterli program yok" diye gevşiyordu (matris B3:
318 denemenin 206'sı). Artık dilimin tamamı okunur (db.havuzAdaylari),
il + alan süzgeci ona uygulanır, 24 eşiği gerçek sayıya bakar, kırpma en
sonda yapılır. Gevşetme sırası ve kırpma kuralı değişmedi.

Kanıt (önce → sonra, havuzda seçili alanla eşleşen): a16 EA 200.000
Turizm 1/60 → 33/33; p03 8/60 → 60/60; a08 5/60 → 60/60; hiçbiri artık
alan gevşetmiyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:13:23 +03:00
bilalgursen
b26df27fcd fix(danisman): L1-L3, L5, L6 (9) — Türkçe-duyarsız il/bölüm/üniversite eşleşmesi, kısa girdi hatası
- ilAdiNormalize harf katlayarak eşler: IZMIR / izmir / İzmir → İZMİR (program_ara,
  il_ozeti, profil evIl). il_ozeti "Afyon"u da bulur.
- program_ara bölüm ve üniversite aramasını katlanmış adla yapar ("isletme",
  "bogazici", "ODTÜ"); LIKE jokerleri (%/_) artık her şeyi eşlemez.
- Tek harf / boş girdi ilk kaydı (Abaza Dili, Abdullah Gül) döndürmez; "en az 3
  harf" hatası döner.
- Kısaltma tablosunda bozuk satır: dtu → deu (Dokuz Eylül).
- Akış hata logu tam hata nesnesi yerine mesajı basar; cagri.ts kullanılmayan import.
- (8'in devamı) dil seçenekleri veride olan dillerle eşitlendi; doğrulama
  "Almanca" süzgecini reddetmesin.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:10:16 +03:00
bilalgursen
72b673bb94 fix(danisman): M4+M5 (8) — araç argümanları şemayla doğrulansın, "300 km" 300 okunsun
- sayiParse: birim eki (km, TL) sayının parçası değil; "300 km" artık 300.000 değil 300.
- aracCalistirici argümanı ARACLAR şemasına göre denetler (bilinmeyen alan, yanlış
  tip, geçersiz seçenek, alt sınır, eksik zorunlu alan) ve modele hangi alanın neden
  reddedildiğini söyler; geçersiz dilim / negatif ucret_ust sessizce süzmez.
- Şema, gövdelerin zaten kabul ettiğini söyler: program id'si ve profil değeri sayı
  da olabilir; ucret_ust en az 1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:08:24 +03:00
bilalgursen
d9badeedfa docs(gece): eval profil matrisi + danışman soru seti (40 profil, 112 soru)
scripts/eval/profiller.ts: sihirbaz girdi şemasıyla birebir 40 profil ve
112 sohbet sorusu; beklenen havuz/hedef değerleri gerçek yokatlas.db
üzerinde havuzOlustur() koşturularak okundu (40/40 eşleşti).
docs/gece-vardiyasi/2026-10-05/02-profil-matrisi.md: kapsam tablosu,
kanıt, 16 bug adayı (dosya:satır) ve kapsanamayanlar.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:08:07 +03:00
bilalgursen
3c3183b9bc fix(danisman): M1 (5) — bağlantı kopunca istemci "iade edildi" demesin
Sunucu, istemci kopsa da cevabı üretip kaydeder ve kredi harcanmış kalır
(bilerek: kopmada iade, cevabı okuyup bağlantıyı kesene bedava cevap olurdu).
İstemci metni buna göre düzeltildi; görsel değişiklik yok.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:06:56 +03:00
bilalgursen
90a9994e5f fix(danisman): H2 (2) — zaman aşımında yarım cevap tamam sayılmasın, kredi iade edilsin
SDK akış ortası abort'u hata fırlatmadan "abort" parçasıyla bitiriyordu;
döngü bunu tamamlanma sayıp yarım metni kaydediyor, krediyi iade etmiyordu.
Döngüden sonra sinyale bakılır: kesildiyse onYarim (iade + yarım kayıt) çalışır,
istemciye hata parçası gider. Süre zamanAsimiMs ile verilebilir (varsayılan 120 sn).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:06:34 +03:00
bilalgursen
3f1e770013 fix(danisman): H3 (3) — bedelsiz onay yolu yalnız gerçek onayda açılsın [KARAR]
Onay mesajı artık baştan sona evet/hayır sözlerinden oluşmalı; "evet. <gerçek
soru>" normal (kredili) soru sayılır, 0 kredide 402 döner. "Profil onayı
kredi harcamaz" kararı (26 Eyl) gerçek onay için aynen duruyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:06:01 +03:00
bilalgursen
08f4ec22b0 fix(danisman): M3 (7) — modele giden pencere tutarlı olsun
Cevapsız kalmış (iade edilmiş) sorular art arda user mesajı olarak, sayıyla
kesilen pencere de danışman mesajıyla başlayarak gidiyordu. modelPenceresi
baştaki danışman mesajlarını atar, art arda aynı rolü tek mesajda birleştirir.
Pencere sorgusuna rowid sıralaması eklendi (created_at saniye çözünürlüklü).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:05:19 +03:00
bilalgursen
1191f16916 fix(danisman): M2 (6) — 100 mesajı aşan geçmişte en yeni 100 dönsün
sohbetGecmisiGetir yeniden eskiye sıralayıp 100 alır, sonra çevirir; aynı
saniyedeki soru-cevap sırası rowid ile korunur. GET /api/soru da aynı
sorguyu kullanır (iki kopya vardı).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:04:42 +03:00
bilalgursen
4e2470e713 fix(danisman): H1 — aynı adımda iki profil_guncelle birbirini ezmesin
profilAlanYaz oku → değiştir → yaz yerine tek SQL ifadesiyle yazar
(json_set / json_remove); eşzamanlı iki alan yazımı artık ikisini de tutar.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:03:37 +03:00
bilalgursen
3e4886e0d9 refactor(danisman): sistemPromptu saf modüle taşındı (eval betiği içe aktarabilsin)
Metin ve davranış aynı; yeni yol src/lib/ai/danisman-prompt.ts
(sistemPromptu, PROFIL_ONAY_SOR). Route dosyasından dışa aktarım
Next'te yapılamadığı için ayrı dosya.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 01:03:01 +03:00
bilalgursen
cca27bc7d4 docs(gece): QA dal doğrulaması, kod denetimi ve lokal duman testi raporu
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 00:59:46 +03:00
bilalgursen
5e3f72e2be docs(gece): Jev en iyi pratikler raporu + eval soru seti
TypeSafe belgeleri okundu, 38 sentetik çağrıyla 8 soruluk set doğrulandı.
src/ altına dokunulmadı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 00:54:47 +03:00
bilalgursen
b935158d3c Danışman sohbeti AI SDK'ya taşındı; dört yeni araç
- Sunucu: elle yazılmış araç döngüsü yerine streamText + UI mesaj akışı
  (src/lib/ai/sohbet-akisi.ts). Kredi düşme/iade, bedelsiz profil onayı,
  mesaj kaydı ve Jev çıktı denetimi aynı davranışla korunur.
- İstemci: sohbet-client useChat kullanır; araç çalışırken balonun altında
  durum satırı görünür. Kayıtlı geçmiş düz metin kalır.
- Sağlayıcı aynı tek kapı (AI_BASE_URL / AI_API_KEY), openai-compatible.
- Yeni araçlar: bolum_ozeti, il_ozeti, rehber_ara, tercih_takvimi.
- Kalkan davranış: sağlayıcı araç çağrısını reddedince düz sohbete düşme.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 00:36:27 +03:00
bilalgursen
6564ec8948 Danışman araçları, TÜİK mezun istihdamı ve Jev çıktı denetimi
- Danışman: program_netleri, program_karsilastir ve bolum_istihdam araçları;
  program_ara'ya devlet/vakıf, öğretim türü ve sıralama parametreleri;
  program_detay'a trend cümlesi; bozuk araç argümanı modele hata döner.
- TÜİK Yükseköğretim İstihdam Göstergeleri 2025: bölüm bazında istihdam
  oranı, ilk işi bulma süresi ve kazanç grubu (src/lib/bolum-istihdam.ts,
  üretici scripts/tuik-istihdam-uret.py, kaynak Excel'ler data/kaynak/).
- Bölüm sayfasında "Mezun istihdamı" ayrıntı satırı ve alt sayfası;
  AkademikAyrinti başlık/ikon alır.
- Jev (TypeSafe AI) ile danışman cevabında garanti/olasılık dili denetimi;
  ihlalde cevabın sonuna düzeltme notu. Anahtar yoksa denetim atlanır.
- /gizlilik: TypeSafe AI (ABD) sağlayıcı satırı. KARARLAR.md: 5 Ekim kaydı.
- Üç katalog dosyasındaki bg-white → bg-card değişiklikleri de bu commit'te.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 00:15:05 +03:00
bilalgursen
ab0b3a047f Piksel harita ve logo animasyonu iyileştirmeleri
All checks were successful
Deploy / deploy (push) Successful in 7m52s
Şehir/Türkiye piksel haritası görünüme girince oynar; animasyonlu-mark,
console-asr, use-pixel-heat ve cta-sira-form güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:09:44 +03:00
bilalgursen
9c02b810e7 Akademik göstergeler çekmecesine açılış koreografisi
Some checks failed
Deploy / deploy (push) Has been cancelled
Kareler önce logonun üç karesi gibi belirir, sonra yerlerine büyür;
içerik satır satır netleşir. Hareketi azalt'ta yalnız kısa belirme.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:56:42 +03:00
bilalgursen
ae08de42c5 Merge branch 'feat/kolaytercih-mvp' into main (içerik main'de zaten var ya da yerini yenisi aldı; main'in hâli korundu)
All checks were successful
Deploy / deploy (push) Successful in 7m58s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:41:18 +03:00
bilalgursen
768fd8884e Merge branch 'gece/entegrasyon-test-2' into main (içerik main'de zaten var ya da yerini yenisi aldı; main'in hâli korundu)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:41:18 +03:00
bilalgursen
793cab1796 Merge branch 'gece/entegrasyon-test' into main (içerik main'de zaten var ya da yerini yenisi aldı; main'in hâli korundu)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:41:18 +03:00
bilalgursen
4203156a5e Merge branch 'gece/p3-vaat-dili' into main (içerik main'de zaten var ya da yerini yenisi aldı; main'in hâli korundu)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:41:17 +03:00
bilalgursen
84d738770d Merge branch 'gece/p3b-tadimlik-dili' into main
Çakışmalarda main'in güncel metni korundu (Armut, Eylül 2026 kaynaklı fiyat aralığı).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:41:17 +03:00
bilalgursen
3aeb6e0de2 Merge branch 'gece/raporlar' into main
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:39:45 +03:00
bilalgursen
bfbb7741ae Merge branch 'gece/p2-olcum' into main
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:39:44 +03:00