18 KiB
Yazılımcı · aday havuzu düzeltmeleri (B1, B2, B3, B4, B5, B8)
5 Ekim 2026 · yazılımcı · dal gece/eval-jev · kaynak: 02-profil-matrisi.md §4
Özet (5 madde)
- Altı bulgu kapandı, altı ayrı commit. B3, B1, B5, B8, B2 davranışı düzeltti; B4'te davranış değişmedi, anlatım koda eşitlendi (KARARLAR.md'de gevşetme sırası için karar yok).
- 40 profilde hiçbir liste kısalmadı. 24'ün altında kalan liste 6 → 0; alanı gevşeyen profil 11 → 4 (kalan dördünde alan gerçekten dar); havuzlardaki baraj dışı program 12 → 0, özel kontenjan satırı 30 → 0.
- B3 taraması (tek alan, il yok, fark etmez; sihirbazın 24+ gösterdiği her alan): alan gevşeyen deneme 203/308 → 1/308. Kalan tek deneme meşru: SAY 400.000 + Eğitim, alandaki programların hepsi 300.000 barajlı.
- Baraj için tablo uydurulmadı. Kaynak
program_ozellik.min_basari_sirasi(YÖK Atlas API, 2026 kılavuzu; katalogdaki "baraj … sıra" satırı aynı kolonu okuyor). Kolon bazı barajlı bölümlerde boş: bu satırlar süzülmüyor, veri işi olarak aşağıda. - 22 profilin
beklenendeğeri değişti (tablo §3).scripts/eval/profiller.ts'e dokunulmadı; eval mühendisi işleyecek.
1. Commit listesi
| sha | B | Mesaj |
|---|---|---|
ef68f93 |
B3 | fix(havuz): alan süzgeci kırpmadan önce uygulansın [KARAR] |
c1d81cd |
B1 | fix(havuz): tek dilime yığılan havuz 24'ün altına kırpılmasın [KARAR] |
497b024 |
B5 | fix(havuz): gevşeyen filtreye uyan programlar havuzda kalsın [KARAR] |
22ac604 |
B8 | fix(havuz): KKTC uyruklu ve M.T.O.K. kontenjan satırları havuza girmesin [KARAR] |
0a11b15 |
B2 | fix(havuz): başarı sırası barajını geçemeyen adaya o bölüm önerilmesin [KARAR] |
1d970ec |
B4 | docs(havuz): gevşetme sırası anlatımı koda eşitlendi (profil → alan → il) [KARAR] |
Dokunulan dosyalar: src/lib/rapor-havuzu.ts, src/lib/db.ts, src/features/pazarlama/components/huni-semasi.tsx, src/features/pazarlama/components/meraklisina-icerik.tsx. src/lib/risk.ts değişmedi. data/app.db commit'lenmedi.
2. Bulgu bulgu: kök neden, değişiklik, kanıt
Kanıtların hepsi havuzOlustur() gerçek data/yokatlas.db üzerinde koşturularak alındı (betikler worktree dışında, scratchpad havuz/: matris.ts 40 profil, degismez.ts değişmez denetimi, tarama.ts B3 taraması; "önce" değerleri ef68f93^ sürümünün kopyasıyla aynı betikten).
B3 — alan süzgeci limitten sonra uygulanıyordu
- Kök neden:
searchByRank(... limitPerBucket: 60)her dilimden sıraya en yakın 60 programı alıyor,kategoriFiltreondan sonra çalışıyordu. 24 eşiği gerçek program sayısına değil, o 180 satırın içindeki eşleşmeye bakıyordu. - Değişiklik:
db.ts→ yenihavuzAdaylari()dilimin tamamını (limitsiz, yakından uzağa) döndürür.havuzOlusturil + alan süzgecini bu tam listeye uygular, 24 eşiğini ona göre sayar, kırpmayı en sonda yapar.searchByRankve/sonuctablosu değişmedi. - Kanıt (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; p09 4/60 → 57/57; a01 11/21 → 24/24. Hiçbiri artık alan gevşetmiyor. İl seçili profiller de kazandı (p08 48 → 60: aynı kök neden).
- Şema: kullanıcıya anlatılan kural değişmedi ("elde kalan gerçek programlar" zaten bunu söylüyordu); şemaya dokunulmadı.
- Maliyet: havuz kurulumu 1–114 ms'den 6–130 ms'ye çıktı (40 profil, en büyük puan türü ~9 bin satır). LLM çağrısının yanında ihmal edilebilir.
B1 — 24 eşiği kırpmadan önce sayılıyordu
- Kök neden:
length >= 24denetiminden sonradilimBasinaKirp(…, 20); havuz tek dilime yığılınca 20–22 satır kalıyordu. - Değişiklik: kırpma dilim başına 20'yi korur; toplam 24'ün altına düşecekse eksiği, adayı kalan dilimlerden tamamlar. Dağıtım
dilimHedefiHesaplaile aynı öncelikte (dengeli → güvenli → hayal) ve tek yardımcıda (eksigiDagit). 5/13/6 iskeleti ve hedef hesabı aynı. - Kanıt (liste satırı): a02 SAY 800 devlet sağlık 22 → 24 (1/1/22); a01 21 → 24; a11, a12, a17, b05 20 → 24.
- Not: a11/a12/a17/b05 listesi hâlâ tamamı hayal (24/0/0). Bu B6'nın (dolmayan programlar) konusu; dokunulmadı.
B5 — gevşeyen filtreye uyan programlar korunmuyordu
- Kök neden: il gevşeyince havuz ilsiz, baştan kuruluyordu; seçili ildeki programlar sıraya en yakın 20'ye giremezse düşüyordu.
- Değişiklik:
oncelikliBirlestir()— gevşetmenin her basamağında seçime uyanlar önce alınır, boşluk sıraya en yakın diğer programlarla dolar. Kırpmadan sonra havuz yine dilim sırasında ve dilim içinde yakından uzağa dizilir (eski düzen). - Kanıt (havuzda seçili ildeki program): p12 Kayseri 1 → 9 (ilde alanla eşleşen 9'un 9'u), p13 Trabzon 0 → 4 (4'ün 4'ü), b06 Düzce 2 → 10 (10'un 10'u), a09 Konya 1 → 3, a05/b07 Kayseri 1 → 3.
degismez.ts: gevşeyen 10 profilin hepsinde tam eşleşenlerin tamamı havuzda, tekrar yok, sıra bozulmamış. - Şema: gevşetme düğümü, 4. bölüm anlatımı ve aria-label'a "seçimine uyan programlar havuzda kalır, boşluk sıralamana en yakın diğer programlarla dolar" eklendi.
- Sınır (koddan çıkarım): dilim başına 20 sınırı öncelikli katmana da uygulanır; seçime uyan programların 20'den fazlası aynı dilimdeyse fazlası kırpılır. Uyanlar zaten 24'ten az olduğu için ancak 21–23'ü tek dilimdeyse olur; 40 profilde görülmedi.
B8 — özel kontenjan satırları herkesin havuzundaydı
- Kök neden: isim süzgeci yoktu. Veride 236 satır var (208 "(KKTC Uyruklu)", 28 "(M.T.O.K.)"), 118'inin taban sırası var.
- Değişiklik:
rapor-havuzu.ts→ export'luozelKontenjanSatiriMi(isim); havuz girdisinin tamamına uygulanır. - Kanıt (havuzdaki özel satır): p02 7 → 0, p14 6 → 0, p05 4 → 0, p09 5 → 0, a07 3 → 0; 40 profilde toplam 30 → 0.
- Şema: aday havuzu düğümü, anlatım, aria-label ve figcaption'a "yalnızca KKTC uyruklulara ya da meslek lisesi mezunlarına ayrılmış kontenjanlar havuza girmez" eklendi.
B2 — başarı sırası barajı denetlenmiyordu
- Baraj bilgisi nerede:
program_ozellik.min_basari_sirasi(scripts/program-ozellik.tsYÖK Atlas API'sinden yazar; 21.493 satırın hepsiyil = 2026). Okuyanlar:src/lib/program-ozellik.ts:133(katalogdaki "baraj … sıra") vesrc/lib/ai/araclar.ts:536(tercihBaraji). Dağılım: 50.000 (226, SAY) · 80.000 (182, SAY) · 100.000 (161 EA + 101 SAY) · 250.000 (176, SAY) · 300.000 (2.143 SAY, 214 EA, 382 SÖZ, 156 DİL). - Değişiklik:
db.ts→dilimAra'yabarajDisiHaricseçeneği (varsayılan kapalı; öteki çağıranlar etkilenmez),havuzAdaylaribunu hep açar:min_basari_sirasi < adayın sırasıolan program çıkar. Barajı boş program süzülmez. Sınır: baraj 50.000 ise 50.000. sıradaki aday içeride, 50.001 dışarıda. - Kanıt (havuzdaki baraj dışı program): a04 (52.000, tıp) 3 → 0; a06 (310.000, mühendislik) 5 → 0; p03, a05, a08, b07 1 → 0. B3'ten sonra bu sayılar büyümüştü (a06 11, p03 17, a07 24/24); B2 ile hepsi 0.
- a07 (SÖZ 310.000, devlet, Eğitim): alandaki programların biri hariç hepsi 300.000 barajlı; alan artık gerçekten gevşiyor, liste 5/13/6. Kullanıcıya giden "seçtiğin alanlarda yeterli program yoktu" cümlesi doğru ama sebebi (baraj) söylemiyor;
rapor.tsbenim dosyam değil, öneri §5. - Şema: aday havuzu düğümü, anlatım, aria-label ve figcaption'a "sıralaman bir bölümün başarı sırası barajının gerisindeyse o bölüm havuza girmez" eklendi; rakam yazılmadı (yıldan yıla değişebilir).
- DOĞRULANMALI / veri işi: kolon bazı barajlı bölümlerde boş. Tıp: 16 satır (ör. Dokuz Eylül Tıp (İngilizce), Bitlis Eren Tıp, Ankara Medipol Tıp); Hukuk: 11 satır (ör. Ankara Medipol, İbn Haldun %50). Bu satırlar baraj dışı adaya hâlâ çıkabilir. Mühendislikte 349 barajsız satırın bir kısmı meşru muafiyet olabilir (ziraat/orman/su ürünleri) — ayrım veriden yapılamadı. Baraj değerlerinin kendisi ÖSYM kılavuzuyla tek tek karşılaştırılmadı; kaynak YÖK Atlas API'sidir.
B4 — gevşetme sırası belgede ve kodda farklıydı
- Karar var mı:
docs/ekip/KARARLAR.md'de "gevşet" geçen karar yok. Bu yüzden kod davranışı değiştirilmedi. - Değişiklik: fonksiyon yorumu, şema düğümü, 4. bölüm anlatımı ve aria-label "önce danışmana söylediklerin, sonra alan, sonra il" oldu (kodun yaptığı).
- Kanıt: p01 (Eskişehir), p06 (İzmir), a15 (Kilis): il korunur, alan gevşer. Bu commit öncesi/sonrası 40 profilin havuzu birebir aynı.
3. 40 profil: önce → sonra
"Önce" = 72b673b (düzeltmeler öncesi), "sonra" = 1d970ec. Değişmeyen hücre tek değer.
| id | gevşetilen | havuz (H/D/G) | hedef | liste | alan içi | il içi | baraj dışı | özel kont. |
|---|---|---|---|---|---|---|---|---|
| p01 | kategori | 40 (13/7/20) | 8/7/9 | 24 | 7 → 8 | 40 | 0 | 0 |
| p02 | - | 54 (20/14/20) → 53 (20/13/20) | 5/13/6 | 24 | 54 → 53 | 54 → 53 | 0 | 7 → 0 |
| p03 | kategori → - | 60 (20/20/20) | 5/13/6 | 24 | 8 → 60 | – | 1 → 0 | 0 |
| p04 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | – | 0 | 1 → 0 |
| p05 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | – | 0 | 4 → 0 |
| p06 | kategori | 46 (20/6/20) | 8/6/10 | 24 | 8 | 46 | 0 | 0 |
| p07 | - | 29 (12/12/5) | 7/12/5 | 24 | 29 | – | 0 | 0 |
| p08 | - | 48 (17/12/19) → 60 (20/20/20) | 5/12/7 → 5/13/6 | 24 | 48 → 60 | 48 → 60 | 0 | 0 |
| p09 | kategori → - | 60 (20/20/20) → 57 (20/20/17) | 5/13/6 | 24 | 4 → 57 | – | 0 | 5 → 0 |
| p10 | - | 43 (16/20/7) → 51 (20/20/11) | 5/13/6 | 24 | 43 → 51 | – | 0 | 0 |
| p11 | - | 59 (20/20/19) → 60 (20/20/20) | 5/13/6 | 24 | 59 → 60 | – | 0 | 0 |
| p12 | il | 60 (20/20/20) | 5/13/6 | 24 | 60 | 1 → 9 | 0 | 0 |
| p13 | il | 25 (18/7/0) → 27 (20/7/0) | 17/7/0 | 24 | 25 → 27 | 0 → 4 | 0 | 0 |
| p14 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | 60 | 0 | 6 → 0 |
| p15 | - | 28 (20/7/1) | 16/7/1 | 24 | 28 | 28 | 0 | 0 |
| a01 | kategori → - | 21 (0/1/20) → 24 (0/1/23) | 0/1/20 → 0/1/23 | 21 → 24 | 11 → 24 | – | 0 | 0 |
| a02 | - | 22 (1/1/20) → 24 (1/1/22) | 1/1/20 → 1/1/22 | 22 → 24 | 22 → 24 | – | 0 | 0 |
| a03 | - | 34 (9/5/20) | 9/5/10 | 24 | 34 | 34 | 0 | 0 |
| a04 | - | 44 (16/14/14) → 60 (20/20/20) | 5/13/6 | 24 | 44 → 60 | – | 3 → 0 | 0 |
| a05 | il>kategori → il | 60 (20/20/20) → 52 (20/12/20) | 5/13/6 → 5/12/7 | 24 | 5 → 52 | 1 → 3 | 1 → 0 | 0 |
| a06 | - | 29 (14/7/8) → 60 (20/20/20) | 9/7/8 → 5/13/6 | 24 | 29 → 60 | – | 5 → 0 | 0 |
| a07 | kategori | 60 (20/20/20) | 5/13/6 | 24 | 0 → 1 | – | 0 | 3 → 0 |
| a08 | kategori → - | 60 (20/20/20) | 5/13/6 | 24 | 5 → 60 | – | 1 → 0 | 1 → 0 |
| a09 | il | 27 (14/5/8) → 41 (20/8/13) | 11/5/8 → 7/8/9 | 24 | 27 → 41 | 1 → 3 | 0 | 0 |
| a10 | - | 56 (20/16/20) → 55 (20/15/20) | 5/13/6 | 24 | 56 → 55 | 56 → 55 | 0 | 2 → 0 |
| a11 | - | 20 (20/0/0) → 24 (24/0/0) | 20/0/0 → 24/0/0 | 20 → 24 | 20 → 24 | – | 0 | 0 |
| a12 | - | 20 (20/0/0) → 24 (24/0/0) | 20/0/0 → 24/0/0 | 20 → 24 | 20 → 24 | – | 0 | 0 |
| a13 | - | 57 (19/18/20) → 60 (20/20/20) | 5/13/6 | 24 | 57 → 60 | – | 0 | 0 |
| a14 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | 60 | 0 | 0 |
| a15 | kategori | 24 (4/5/15) | 4/5/15 | 24 | 5 | 24 | 0 | 0 |
| a16 | kategori → - | 60 (20/20/20) → 33 (8/5/20) | 5/13/6 → 8/5/11 | 24 | 1 → 33 | – | 0 | 0 |
| a17 | - | 20 (20/0/0) → 24 (24/0/0) | 20/0/0 → 24/0/0 | 20 → 24 | 20 → 24 | 20 → 24 | 0 | 1 → 0 |
| b01 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | – | 0 | 0 |
| b02 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | 60 | 0 | 0 |
| b03 | profil | 60 (20/20/20) | 5/13/6 | 24 | 60 | – | 0 | 0 |
| b04 | - | 25 (20/2/3) | 19/2/3 | 24 | 25 | 25 | 0 | 0 |
| b05 | - | 20 (20/0/0) → 24 (24/0/0) | 20/0/0 → 24/0/0 | 20 → 24 | 20 → 24 | 20 → 24 | 0 | 0 |
| b06 | profil>il | 60 (20/20/20) | 5/13/6 | 24 | 60 | 2 → 10 | 0 | 0 |
| b07 | profil>il>kategori → profil>il | 60 (20/20/20) → 52 (20/12/20) | 5/13/6 → 5/12/7 | 24 | 5 → 52 | 1 → 3 | 1 → 0 | 0 |
| b08 | - | 60 (20/20/20) | 5/13/6 | 24 | 60 | 60 | 0 | 0 |
Gerileme denetimi. Listesi kısalan profil yok. Havuzu küçülen altı profil ve nedeni:
- p02 (54 → 53), a10 (56 → 55): özel kontenjan satırları çıktı (B8); kalanların hepsi seçime uyuyor.
- p09 (60 → 57): eskiden alan gevşemiş 60 programın 4'ü mühendislikti; şimdi 57'nin 57'si mühendislik.
- a16 (60 → 33): eskiden 60'ın 1'i turizmdi; şimdi 33'ün 33'ü turizm. Dengeli dilimde 5 turizm programı olduğu için hedef 5/13/6 yerine 8/5/11.
- a05, b07 (60 → 52): alan artık gevşemiyor; 52'nin 52'si hukuk/siyasal. Dengeli dilimde 12 program olduğu için hedef 5/12/7.
beklenen değeri değişen profiller (eval mühendisine)
havuzGevsetmeBasamagi · minAday · hedef; yalnız değişen alanlar.
| id | havuzGevsetmeBasamagi | minAday | hedef |
|---|---|---|---|
| p02 | – | 54 → 53 | – |
| p03 | ["kategori"] → [] | – | – |
| p08 | – | 48 → 60 | 5/12/7 → 5/13/6 |
| p09 | ["kategori"] → [] | 60 → 57 | – |
| p10 | – | 43 → 51 | – |
| p11 | – | 59 → 60 | – |
| p13 | – | 25 → 27 | – |
| a01 | ["kategori"] → [] | 21 → 24 | 0/1/20 → 0/1/23 |
| a02 | – | 22 → 24 | 1/1/20 → 1/1/22 |
| a04 | – | 44 → 60 | – |
| a05 | ["il","kategori"] → ["il"] | 60 → 52 | 5/13/6 → 5/12/7 |
| a06 | – | 29 → 60 | 9/7/8 → 5/13/6 |
| a08 | ["kategori"] → [] | – | – |
| a09 | – | 27 → 41 | 11/5/8 → 7/8/9 |
| a10 | – | 56 → 55 | – |
| a11 | – | 20 → 24 | 20/0/0 → 24/0/0 |
| a12 | – | 20 → 24 | 20/0/0 → 24/0/0 |
| a13 | – | 57 → 60 | – |
| a16 | ["kategori"] → [] | 60 → 33 | 5/13/6 → 8/5/11 |
| a17 | – | 20 → 24 | 20/0/0 → 24/0/0 |
| b05 | – | 20 → 24 | 20/0/0 → 24/0/0 |
| b07 | ["profil","il","kategori"] → ["profil","il"] | 60 → 52 | 5/13/6 → 5/12/7 |
Ayrıca senaryoEtiketleri ve supheli alanları eskidi: "liste-24-alti" artık hiçbir profilde yok; "gevsetme-kategori" p03, p09, a01, a08, a16'da, "gevsetme-il-kategori" a05'te, "gevsetme-profil-il-kategori" b07'de geçersiz; "ozel-kontenjan-satiri" ve "baraj-disi" profillerinde havuzda artık o satırlar yok. a07'de etiket aynı ("gevsetme-kategori") ama sebep değişti (baraj). minAday yorumundaki "dilim başına 20'ye kırpılmış" ifadesi de artık tam doğru değil (tek dilime yığılan havuz 24'e tamamlanır).
4. Doğrulama
pnpm exec next typegen✔ ·pnpm lint✔ (eslint temiz; tasarım denetimi 0 hata, 12 uyarı — hepsimeraklisina-demo.tsx'te, bu işten önce de vardı).pnpm exec tsc --noEmit: 3 hata, hepsiscripts/eval/sohbet.ts(eval mühendisinin commit'lenmemiş dosyası; satır 320, 329). Benim dosyalarımda hata yok.pnpm buildalınmadı (görev gereği)./meraklisinaşeması tarayıcıda açılmadı. Koddan çıkarım: değişiklik yalnız düğüm metinleri; yeni düğüm, kenar ya da sınıf yok, metinlerde noktalı virgül/çift tırnak yok. Aday havuzu düğümü dört satıra çıktı; 375 px'te okunurluğu gözle bakılmalı.
5. Şartnameden sapmalar ve başkasının dosyası için öneriler
Sapmalar:
- B5 yalnız il için istendi; aynı yardımcı alan ve danışman profili gevşediğinde de uyanları öne alıyor (aynı kök neden, tek kod yolu).
dilimAra'yabarajDisiHaricseçeneği eklendi (havuz sorgusunun parçası; varsayılan kapalı).
Dokunmadığım dosyalar için öneriler:
src/lib/ai/araclar.ts(program_ara):ozelKontenjanSatiriMive baraj süzgeci burada da uygulanmalı; bugün danışman, listenin önermediği baraj dışı/özel kontenjan satırını "Dengeli" diye sayabiliyor.src/lib/ai/rapor.ts:268-272: alan baraj yüzünden gevşediyse (a07) not bunu söylemeli.rankWindowFacets(sihirbaz sayıları) ve/sonucücretsiz tablosu (siraylaProgramAra) baraj dışı ve özel kontenjan satırlarını hâlâ sayıyor/gösteriyor. Sihirbaz "24+" deyip havuzun gevşediği durum bu yüzden hâlâ mümkün (taramada 1/308).- B12 (
route.ts"kalan 21 tercih"): liste artık 40 profilin hepsinde 24, sabit büyük ölçüde doğru çıkıyor; yine de gerçek uzunluktan türetilmeli. - Dokunulmayanlar (görev gereği): B6, B7, B9, B10–B16.
6. Merge sonrası doğrulanması gerekenler
/meraklisinaşemasının çizimi (375 / 1280 px): aday havuzu ve gevşetme düğümleri uzadı.- Gerçek modelle bir liste üretimi: 24/0/0 (tamamı hayal) havuzda ve il gevşemiş havuzda (p12) modelin hedefi tutturduğu.
- Eval
beklenengüncellemesi sonrası 40/40 eşleşme.
Bilal'den istenen
- [BİLAL] Gevşetme sırası hangisi olmalı: önce alan mı (bugünkü kod), önce il mi (eski anlatım)? Örnek p01: Eskişehir + tıp isteyen adaya bugün Eskişehir korunup 8 sağlık + 32 başka alan veriliyor; Türkiye genelinde aynı alanda 615 program var. Tek cümlelik karar (5 dk).
- [BİLAL] M.T.O.K. kontenjanları herkesten gizlendi; meslek lisesi mezunu aday (p15 Deniz) bunları yazabilir. Sihirbaza "meslek lisesi mezunuyum" sorusu eklensin mi, yoksa böyle kalsın mı (3 dk).
- [BİLAL]/veri işi: baraj kolonundaki boşluklar (16 tıp, 11 hukuk satırı; mühendislikte muafiyet/eksik ayrımı) veri mühendisine verilsin mi; baraj değerleri 2027 kılavuzu çıkınca yeniden çekilmeli (2 dk).