Files
kolaytercih/docs/gece-vardiyasi/2026-10-05/06-yazilimci-havuz-duzeltmeleri.md
2026-10-05 01:21:14 +03:00

18 KiB
Raw Blame History

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)

  1. 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).
  2. 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.
  3. 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ı.
  4. 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.
  5. 22 profilin beklenen değ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, kategoriFiltre ondan 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 → yeni havuzAdaylari() dilimin tamamını (limitsiz, yakından uzağa) döndürür. havuzOlustur il + alan süzgecini bu tam listeye uygular, 24 eşiğini ona göre sayar, kırpmayı en sonda yapar. searchByRank ve /sonuc tablosu 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 >= 24 denetiminden sonra dilimBasinaKirp(…, 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 dilimHedefiHesapla ile 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'lu ozelKontenjanSatiriMi(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.ts YÖK Atlas API'sinden yazar; 21.493 satırın hepsi yil = 2026). Okuyanlar: src/lib/program-ozellik.ts:133 (katalogdaki "baraj … sıra") ve src/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'ya barajDisiHaric seçeneği (varsayılan kapalı; öteki çağıranlar etkilenmez), havuzAdaylari bunu 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.ts benim 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ı — hepsi meraklisina-demo.tsx'te, bu işten önce de vardı).
  • pnpm exec tsc --noEmit: 3 hata, hepsi scripts/eval/sohbet.ts (eval mühendisinin commit'lenmemiş dosyası; satır 320, 329). Benim dosyalarımda hata yok.
  • pnpm build alı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'ya barajDisiHaric seçeneği eklendi (havuz sorgusunun parçası; varsayılan kapalı).

Dokunmadığım dosyalar için öneriler:

  • src/lib/ai/araclar.ts (program_ara): ozelKontenjanSatiriMi ve 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 beklenen güncellemesi sonrası 40/40 eşleşme.

Bilal'den istenen

  1. [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).
  2. [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).
  3. [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).