From f5b55e05dc3dfd23a85b653ea1dd3d4ae1a2b9d2 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Mon, 5 Oct 2026 01:21:14 +0300 Subject: [PATCH] =?UTF-8?q?docs(gece):=20yaz=C4=B1l=C4=B1mc=C4=B1=20havuz?= =?UTF-8?q?=20d=C3=BCzeltmeleri=20raporu=20(B1=E2=80=93B5,=20B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- .../06-yazilimci-havuz-duzeltmeleri.md | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 docs/gece-vardiyasi/2026-10-05/06-yazilimci-havuz-duzeltmeleri.md diff --git a/docs/gece-vardiyasi/2026-10-05/06-yazilimci-havuz-duzeltmeleri.md b/docs/gece-vardiyasi/2026-10-05/06-yazilimci-havuz-duzeltmeleri.md new file mode 100644 index 0000000..6c27341 --- /dev/null +++ b/docs/gece-vardiyasi/2026-10-05/06-yazilimci-havuz-duzeltmeleri.md @@ -0,0 +1,189 @@ +# 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).