Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/16-yazar-siralama-bandlari.md
bilalgursen 2b350d0c5d content(rehber): gece vardiyasının 14 yeni yazısı + 2 düzeltme, ekip raporları ve kurallar
14 yeni rehber yazısı (hepsi editör denetiminden geçti, 46 yazıda 829 iç link
tarandı, 0 kırık hedef; 180+ DB rakamı yazıların kendi filtreleriyle yeniden
koşuldu):

  taban-siralamalari-alti-yilda-nasil-degisti · kac-net-ile-hangi-bolum ·
  siralama-bandlari-hangi-kapilar-acilir · ayni-bolum-farkli-universite-siralama-farki ·
  hangi-bolumlerin-kontenjani-azaldi · yeni-acilan-bolumler-nasil-degerlendirilir ·
  bilgisayar-mi-yazilim-muhendisligi-mi · kktc-universiteleri-okunur-mu ·
  yapay-zekaya-tercih-sordum-guvenilir-mi · ek-madde-1-puanim-yetiyor-mu ·
  universitede-ilk-hafta-ders-kaydi-muafiyet-kayit-dondurma · yks-2027-takvimi ·
  rehber-ogretmenler-icin-veri-kaynaklari · bolumumu-sevmedim-hangi-kapilar-var

İki canlı yazı düzeltildi:
- veliler-icin-tercih-rehberi: veli diliyle kapanış; altındaki "sıralamanı gir"
  kutusu artık veliye ölü uç değil
- bos-kontenjanlar-ne-anlatiyor: "birkaç yüz kişilik fark" aslında ~9 bin
  (ÖSYM 265.356 ↔ bizim 256.532); payda açıklaması tersti — ek kontenjan
  paydaya girseydi oran düşerdi. guncelleme alanı eklendi (sitemap lastmod).

Kurallar (AGENTS.md):
- Yayın sonrası arama motoru bildirimi: URL denetimi yalnız canlıda 200 dönen
  adrese; kota sayacı; mülk/hesap notu; sitemap grep kuralı
- Yıkıcı git komutları yasak: reset/checkout --/restore/clean/stash
- Tarayıcı açma: tasarımcı ve UX gerekli gördüğünde açabilir (yetenek için
  .claude/agents/tasarimci.md'ye tarayıcı araçları eklendi)

docs/gece-vardiyasi/2026-09-22/ — 34 rapor: CEO kararları ve kapanış turu,
marka/ödeme analizi, sıfır ödeme teşhisi, SEO konu planı, veri kalitesi,
editör denetimi, CTO şartnamesi, yazılımcı ve güvenlik raporları, SABAH-OZETI.

docs/ekip/YAYIN-KUYRUGU.md — Search Console bildirim kuyruğu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 23:25:34 +03:00

245 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 16 — Rehber yazısı: sıralama bandları (kapı sayımı)
**Tarih:** 22 Eylül 2026, gece · **Rol:** rehber-yazari · **Dosya:** `content/rehber/siralama-bandlari-hangi-kapilar-acilir.md` (yeni, tek dosya) · **Commit atılmadı.**
## Özet (5 madde)
1. Yazı yazıldı: 8 sıralama bandı × (program, üniversite, il, bölüm adı, devlet/vakıf, kontenjan) sayımı + kümülatif "kapı sayısı" tablosu + coğrafya + alan + puan türü + burs varyantı + bölüm yayılımı. Toplam **8 tablo**, **1 mermaid** (`flowchart TD`, `%% aria:` + `%% altyazi:`), 12 H2.
2. Havuz: **9.304** program (devlet+vakıf, Türkiye kampüsleri, örgün lisans, 2026 taban sırası oluşmuş) — 271 üniversite, 81 il, 351 farklı bölüm adı, 312.283 kontenjan. Açıköğretim **hariç tutuldu ama ayrı satır olarak verildi** (61 program, 5 üniversite, 22.484–1.202.899).
3. En güçlü üç bulgu: (a) ilk 1.000 bandındaki 64 programın **tamamı** İstanbul + Ankara'da ve 55'i vakıf (burs yapısı etkisi); (b) **dil türünde 250 binden büyük hiçbir taban sırası yok** (en geniş 131.926) — band puan türüne göre aynı şeyi anlatmıyor; (c) İşletme 303 programıyla 8 bandın hepsinde, Tıp 217 programıyla yalnızca ilk 50 binin içinde.
4. Mevcut iki yazıyla çakışma önlendi: bu yazı **reçete değil sayım**. "Şu bandda şu bölümlere bak" cümlesi kurulmadı (o `kac-siralama-ile-hangi-bolume-girebilirim`'in işi), 1,4 katı dilim kuralı **tekrar edilmedi**, yalnızca bir cümleyle anılıp `hedef-siralama-nasil-belirlenir`'e link verildi.
5. Vaat dili yok: "kapı sayısı bir olasılık değil, bir envanterdir" cümlesi hem girişte hem SSS'de tekrar ediyor; band sınırlarının keskin olmadığı ayrı H2'de anlatılıp `taban-siralamalar-nasil-degisir`'e bağlandı.
---
## Doğrulanan bilgiler + kaynak URL'leri
| İddia | Kaynak | Durum |
|---|---|---|
| 2026-YKS merkezî yerleştirme sonuçları 18 Ağustos 2026'da açıklandı; kayıtlar 24–28 Ağustos, e-kayıt 24–26 Ağustos | ÖSYM duyurusu, https://www.osym.gov.tr/2026-yks-yerlestirme-sonuclari-aciklandi — **sayfa doğrudan açılıp okundu** (erişim: 22 Eyl 2026) | [D] doğrulandı |
| Taban başarı sırası ve kontenjanın resmî yayın yeri | https://yokatlas.yok.gov.tr | [D] |
| 2026 ek yerleştirme tercihleri 21 Eylül 2026'da kapandı, sonuç henüz açıklanmadı | `content/rehber/ek-yerlestirme-2026.md` (21 Eyl'de ekip tarafından ÖSYM duyurusuyla yazılmış) — **ben ÖSYM'den yeniden teyit etmedim**; yazıda "bu yazı yazılırken açıklanmamıştı" diye yazdım | [Ç] ikincil, yayın öncesi bakılmalı |
| Veri seti kataloğa 21 Eylül 2026'da işlendi | `veri_meta` tablosu: `refresh_2026_tarih = 2026-09-21T17:21:23.112Z`, `refresh_2026_api_toplam = 21493`, `refresh_2026_atlanan = 0` | [D] |
`osym.gov.tr` ana sayfası ve `TR,32979/2026.html` açılmadı (timeout / 404); duyuru sayfasına doğrudan URL ile ulaşıldı. Okunan web sayfalarında bana yönelik talimat görülmedi.
---
## Kullanılan SQL sorguları
Hepsi `sqlite3 -readonly data/yokatlas.db` ile çalıştırıldı. Tüm sorgular aşağıdaki ortak CTE'nin üstüne kuruldu:
```sql
WITH n AS (
SELECT p.*,
lower(replace(replace(replace(replace(replace(replace(replace(fakulte,'I','ı'),'İ','i'),'Ü','ü'),'Ğ','ğ'),'Ş','ş'),'Ö','ö'),'Ç','ç')) AS fk,
lower(replace(replace(replace(replace(replace(replace(replace(isim,'I','ı'),'İ','i'),'Ü','ü'),'Ğ','ğ'),'Ş','ş'),'Ö','ö'),'Ç','ç')) AS ik,
trim(CASE WHEN instr(isim,'(')>0 THEN substr(isim,1,instr(isim,'(')-1) ELSE isim END) AS bolum
FROM programs p
WHERE onlisans=0
AND unitur IN ('DEVLET','VAKIF')
AND sira2026 IS NOT NULL
AND isim NOT LIKE '%KKTC Uyruklu%'
AND il IS NOT NULL AND il <> ''
AND il NOT IN ('KIBRIS','LEFKOŞA','GİRNE','GAZİMAĞUSA','LEFKE','GÜZELYURT','İSKELE','SARAYBOSNA - BOSNA - HERSEK')
),
baz AS (
SELECT *,
CASE WHEN sira2026<=1000 THEN 1 WHEN sira2026<=5000 THEN 2 WHEN sira2026<=20000 THEN 3
WHEN sira2026<=50000 THEN 4 WHEN sira2026<=100000 THEN 5 WHEN sira2026<=250000 THEN 6
WHEN sira2026<=500000 THEN 7 ELSE 8 END AS band,
CASE -- "alan" = fakülte adından türetilen kaba grup; ladder sırası önemli
WHEN fk LIKE '%tıp fak%' OR fk LIKE '%diş hekim%' OR fk LIKE '%eczacılık%' OR fk LIKE '%veteriner%' THEN 'Tıp, diş, eczacılık, veteriner'
WHEN fk LIKE '%sağlık%' OR fk LIKE '%hemşirelik%' OR fk LIKE '%fizik tedavi%' OR fk LIKE '%fizyoterapi%' THEN 'Sağlık bilimleri'
WHEN fk LIKE '%hendislik%' OR fk LIKE '%teknoloji fak%' OR fk LIKE '%bilişim%' OR fk LIKE '%havacılık%' OR fk LIKE '%denizcilik%' OR fk LIKE '%gemi%'
OR fk LIKE '%elektrik-elektronik fak%' OR fk LIKE '%kimya-metalurji%' OR fk LIKE '%inşaat fak%' OR fk LIKE '%makine fak%'
OR fk LIKE '%maden fak%' OR fk LIKE '%uçak ve uzay%' OR fk LIKE '%deniz bilimleri%' OR fk LIKE '%hava ulaştırma%' OR fk LIKE '%ulaştırma ve lojistik%' THEN 'Mühendislik ve teknoloji'
WHEN fk LIKE '%eğitim fak%' OR fk LIKE '%eğitim bilimleri%' THEN 'Eğitim (öğretmenlik)'
WHEN fk LIKE '%hukuk%' THEN 'Hukuk'
WHEN fk LIKE '%ilahiyat%' OR fk LIKE '%islami%' OR fk LIKE '%din bilimleri%' THEN 'İlahiyat'
WHEN fk LIKE '%mimarlık%' OR fk LIKE '%sanat%' OR fk LIKE '%tasarım%' OR fk LIKE '%konservatuvar%' THEN 'Mimarlık, sanat ve tasarım'
WHEN fk LIKE '%ziraat%' OR fk LIKE '%orman%' OR fk LIKE '%su ürünleri%' OR fk LIKE '%tarım%' THEN 'Ziraat, orman, su ürünleri'
WHEN fk LIKE '%spor%' THEN 'Spor bilimleri'
WHEN fk LIKE '%turizm%' OR fk LIKE '%gastronomi%' THEN 'Turizm'
WHEN fk LIKE '%iletişim%' THEN 'İletişim'
WHEN fk LIKE '%iktisad%' OR fk LIKE '%iktisat fak%' OR fk LIKE '%işletme%' OR fk LIKE '%siyasal%' OR fk LIKE '%yönetim bilimleri%' OR fk LIKE '%uygulamalı bilimler%' OR fk LIKE '%bankacılık%' THEN 'İktisat, işletme, yönetim'
WHEN fk LIKE '%fen%' OR fk LIKE '%edebiyat%' OR fk LIKE '%insan%' OR fk LIKE '%sosyal%' OR fk LIKE '%beşeri%' OR fk LIKE '%dil ve tarih%' OR fk LIKE '%yabancı diller%' OR fk LIKE '%bilimler fak%' THEN 'Fen-edebiyat ve sosyal bilimler'
ELSE 'Diğer' END AS alan,
(fk LIKE '%açık%' OR fk LIKE '%uzaktan%' OR ik LIKE '%açıköğretim%' OR ik LIKE '%uzaktan%') AS acik
FROM n
),
p AS (SELECT * FROM baz WHERE acik=0) -- havuz: 9.304 satır
```
Notlar: `lower()` Türkçe büyük harfleri çözmediği için normalizasyonda önce `I→ı`, `İ→i` vb. elle değiştirildi (ALL-CAPS fakülte adları var: `TIP FAKÜLTESİ`, `MÜHENDİSLİK VE DOĞA BİLİMLERİ FAKÜLTESİ`). `bolum` = ilk parantezden öncesi — `src/lib/slug.ts`'teki `bolumBazAdi`'nin SQL'deki yaklaşığı.
### 1) Havuz özeti (yazının giriş paragrafı + band tablosu toplam satırı)
```sql
SELECT count(*) program, count(DISTINCT universite) uni, count(DISTINCT il) il,
count(DISTINCT bolum) bolumadi, sum(unitur='DEVLET') devlet, sum(unitur='VAKIF') vakif,
sum(coalesce(kontenjan2026,0)) kontenjan, min(sira2026), max(sira2026) FROM p;
```
→ `9304 | 271 | 81 | 351 | 5865 | 3439 | 312283 | 1 | 1419573`
### 2) Kümülatif kapı sayısı tablosu
```sql
SELECT r.sira,
(SELECT count(*) FROM p WHERE sira2026 >= r.sira) AS kapi,
(SELECT count(DISTINCT universite) FROM p WHERE sira2026 >= r.sira) AS uni,
(SELECT count(DISTINCT il) FROM p WHERE sira2026 >= r.sira) AS il,
(SELECT count(DISTINCT bolum) FROM p WHERE sira2026 >= r.sira) AS bolumadi
FROM (SELECT 1000 sira UNION SELECT 5000 UNION SELECT 20000 UNION SELECT 50000
UNION SELECT 100000 UNION SELECT 250000 UNION SELECT 500000 UNION SELECT 800000) r
ORDER BY r.sira;
```
| sıra | kapı | üni | il | bölüm adı |
|---|---|---|---|---|
|1.000|9.240|271|81|349|
|5.000|9.029|271|81|344|
|20.000|8.334|271|81|335|
|50.000|7.283|265|81|313|
|100.000|6.076|260|81|277|
|250.000|3.263|242|81|233|
|500.000|1.489|202|79|152|
|800.000|569|154|65|90|
### 3) Ana band tablosu
```sql
SELECT band, count(*) program, count(DISTINCT universite) uni, count(DISTINCT bolum) bolumadi,
sum(unitur='DEVLET') devlet, sum(unitur='VAKIF') vakif, count(DISTINCT il) il,
sum(coalesce(kontenjan2026,0)) kont
FROM p GROUP BY band ORDER BY band;
```
| band | program | üni | bölüm adı | devlet | vakıf | il | kontenjan |
|---|---|---|---|---|---|---|---|
|1 (≤1.000)|64|19|35|9|55|2|1.179|
|2 (≤5.000)|211|69|69|106|105|18|7.813|
|3 (≤20.000)|695|174|100|414|281|63|28.534|
|4 (≤50.000)|1.051|215|141|640|411|79|36.840|
|5 (≤100.000)|1.207|216|170|632|575|73|40.031|
|6 (≤250.000)|2.813|247|198|1.747|1.066|81|87.281|
|7 (≤500.000)|1.774|223|198|1.454|320|80|60.214|
|8 (>500.000)|1.489|202|152|863|626|79|50.391|
Sütun toplamları kontrol edildi: 9.304 / 5.865 / 3.439 / 312.283 ✔
### 4) Coğrafya
```sql
SELECT band, count(*) toplam, sum(il IN ('İSTANBUL','ANKARA','İZMİR')) ucbuyuk,
round(100.0*sum(il IN ('İSTANBUL','ANKARA','İZMİR'))/count(*),1) yuzde
FROM p GROUP BY band ORDER BY band;
SELECT band, il, c FROM (
SELECT band, il, count(*) c, row_number() OVER (PARTITION BY band ORDER BY count(*) DESC) rn
FROM p GROUP BY 1,2) WHERE rn<=3 ORDER BY band, c DESC;
```
Üç büyükşehir payı band sırasıyla: %100 · %90,5 · %68,6 · %63,6 · %65,3 · %45,3 · %21,1 · %36,1.
Band 1'de yalnızca İstanbul (48) ve Ankara (16) var; band 7–8'de üçüncü il Konya (73 / 39).
### 5) Puan türü kırılımı
```sql
SELECT band, tur, count(*) c FROM p GROUP BY 1,2 ORDER BY 1, c DESC;
SELECT tur, count(*), min(sira2026), max(sira2026) FROM p GROUP BY 1;
```
Toplam: SAY 4.380 (1–1.132.500) · EA 2.924 (67–1.419.573) · SÖZ 1.469 (99–1.078.672) · **DİL 531 (595–131.926)**.
Band 7 ve 8'de DİL = 0 → yazıdaki "dil cetvelinde 250 binden büyük taban sırası yok" cümlesinin dayanağı.
### 6) Alan kırılımı (band başına ilk 3)
```sql
SELECT band, alan, c FROM (
SELECT band, alan, count(*) c, row_number() OVER (PARTITION BY band ORDER BY count(*) DESC) rn
FROM p GROUP BY 1,2) WHERE rn<=3 ORDER BY band, c DESC;
```
Sınıflandırma sonucu (havuz geneli): Mühendislik ve teknoloji 1.815 · İktisat-işletme-yönetim 1.757 · Fen-edebiyat ve sosyal bilimler 1.700 · Sağlık bilimleri 1.050 · Eğitim 760 · Mimarlık-sanat-tasarım 644 · Tıp-diş-eczacılık-veteriner 484 · Ziraat-orman 310 · İletişim 256 · İlahiyat 218 · Turizm 174 · Hukuk 122 · **Diğer 10** · Spor 4 (spor/GSF programlarının çoğu özel yetenek olduğu için taban sırası yok, havuza girmiyor).
### 7) Band başına "tipik" 3 örnek program
```sql
SELECT band, unitur, tur, isim, universite, il, sira2026, kontenjan2026 FROM (
SELECT *, row_number() OVER (PARTITION BY band ORDER BY sira2026) rn,
count(*) OVER (PARTITION BY band) n
FROM p WHERE coalesce(kontenjan2026,0) >= 15
) WHERE rn BETWEEN n/2-4 AND n/2+4 ORDER BY band, sira2026;
```
Yazıya alınan 24 satır bu çıktının medyan penceresinden seçildi (tanınırlık + devlet/vakıf ve tür dengesi gözetildi).
### 8) Burs/ücret varyantı (aynı üniversite + aynı bölüm)
```sql
SELECT universite, bolum,
max(CASE WHEN ik LIKE '%(burslu)%' THEN sira2026 END) burslu,
max(CASE WHEN ik LIKE '%50 indirimli%' THEN sira2026 END) yarim,
max(CASE WHEN ik LIKE '%(ücretli)%' THEN sira2026 END) ucretli
FROM p WHERE unitur='VAKIF' GROUP BY 1,2
HAVING burslu IS NOT NULL AND ucretli IS NOT NULL ORDER BY burslu;
```
Yazıya alınan 5 satır ayrıca tek tek `SELECT isim, universite, sira2026, kontenjan2026 FROM programs WHERE …` ile doğrulandı; hepsinin üç varyantı da **(İngilizce)** olduğu için öğretim dili sabit, tek değişken burs. Yeditepe Psikoloji 4.034 / 239.840 / 708.709; Bahçeşehir YBS 5.554 / 250.242 / 397.151; TED EEM 28.463 / 67.087 / 123.952; Avrasya İDE 30.694 / 63.507 / 74.509; Medipol Tıp (İng.) 489 / — / 31.193.
### 9) Bölüm adının bandlara yayılımı
```sql
SELECT bolum, count(*) n, count(DISTINCT band) bandsayisi, min(sira2026) en_siki,
max(CASE WHEN rn=(c+1)/2 THEN sira2026 END) medyan, max(sira2026) en_genis
FROM (SELECT *, row_number() OVER (PARTITION BY bolum ORDER BY sira2026) rn,
count(*) OVER (PARTITION BY bolum) c FROM p)
WHERE bolum IN ('Tıp','Hukuk','Psikoloji','Bilgisayar Mühendisliği','Hemşirelik','İşletme','Endüstri Mühendisliği')
GROUP BY bolum;
```
İşletme 303/8 band (128 · 247.503 · 1.414.685) · Psikoloji 243/8 · Bilgisayar Müh. 213/7 · Endüstri Müh. 166/7 · Hemşirelik 265/4 · Hukuk 123/5 · Tıp 217/4 (1 · 16.585 · **49.623**).
### 10) Havuz dışı kalanlar
```sql
SELECT sum(coalesce(yerlesen2026,0)>0), sum(coalesce(yerlesen2026,0)=0), sum(isim LIKE '%KKTC Uyruklu%'), count(*)
FROM programs WHERE onlisans=0 AND unitur IN ('DEVLET','VAKIF') AND sira2026 IS NULL;
-- 1395 | 403 | 82 | 1798
SELECT count(*), count(DISTINCT universite), min(sira2026), max(sira2026) FROM baz WHERE acik=1;
-- 61 | 5 | 22484 | 1202899
```
---
## Çıkarılan / yazılmayan iddialar
1. **İkinci öğretim (İÖ) hakkında tek kelime yazmadım.** Görev tanımı "ikinci öğretim seçenekleri kapıları değiştirir" diyordu ama DB'de İÖ ayrımı **yok**: `isim LIKE '%(İÖ)%'` → 0, `'%kinci Öğretim%'` → 0. Veriyle destekleyemediğim için iddiayı tamamen çıkardım. **Veri mühendisine soru:** İÖ etiketi kaynakta hiç mi gelmiyor, yoksa 2026 kılavuzunda örgün lisansta İÖ kalmadı mı?
2. **Öğretim dili (İngilizce/Türkçe) için sayısal karşılaştırma yazmadım.** Denedim; devlet üniversitelerinde "aynı bölümün İngilizce + Türkçe satırı" eşleşmesi yalnızca 15 çift verdi ve yön karışıktı. Sebebini buldum: eşleşmelerin bir kısmı UOLP/indirimli satırlar. Somut örnek — İTÜ `Makine Mühendisliği` 7.060 vs `Makine Mühendisliği (İngilizce) (UOLP-Uluslararası Saraybosna Üniversitesi) (%25 İndirimli)` 74.928. Naif eşleştirme yanıltıcı olduğu için dil farkını yalnızca **niteliksel** bir madde olarak bıraktım ve `hazirlik-sinifi-ve-ogretim-dili`'ne bağladım.
3. **Vakıf burs tipi için havuz geneli dağılım tablosu yazmadım.** `isim` alanındaki burs etiketi 3.439 vakıf satırının yalnızca 659'unda var (339 burslu + 203 indirimli + 117 ücretli); 2.780 satır etiketsiz (ör. Acıbadem'in tüm satırları). Etiketsiz satırları "ücretli" saymak uydurma olurdu. Onun yerine **etiketi kesin olan** 5 üniversite-bölüm üçlüsünü tek tek doğrulayıp örnek tablo yaptım. **Veri kalitesi notu:** aynı üniversitede aynı adlı 3 satırın burs etiketi kaybolmuş görünüyor (`ACIBADEM … Eczacılık` 26.717 / 64.059 / 89.292).
4. **"Kaç öğrenci yerleşti" ve doluluk oranı yazmadım** — band başına `yerlesen2026` sayımı ilginçti ama yazıyı şişiriyordu ve boş kontenjan yazısıyla çakışıyordu.
5. **Kontenjan alt sınırı uygulamadım** (kardeş yazılar `kontenjan ≥ 3` kullanmıştı). Etkiyi ölçtüm: band 1'de fark **yok** (64→64), en büyük fark band 8'de (1.489→1.415). Basit kalsın diye filtresiz gittim ve bunu yazının yöntem bölümünde açıkça yazdım. **Editöre karar sorusu:** kardeş yazılarla birebir aynı havuz kuralı istenirse `kontenjan2026 >= 3` eklenip 7 tablo yeniden üretilmeli.
6. **Aday sayısı / puan türü havuz büyüklüğü rakamı vermedim** (ÖSYM sayısal bilgiler PDF'ini açamadım). DİL bandının neden 132 binde bittiğini "o cetveldeki aday sayısı küçük" diye niteliksel anlattım.
## Mevcut iki yazıyla çakışmayı nasıl önledim
| Yazı | Onun işi | Benim yazımda ne yaptım |
|---|---|---|
| `kac-siralama-ile-hangi-bolume-girebilirim` | Bant → "hangi bölümlere bakmaya değer" **reçetesi** (2025, kaba) | Tek bir "şu bandda şu bölüme bak" cümlesi kurmadım. Bölüm adlarını yalnızca **sayımın çıktısı** olarak verdim (tipik program örnekleri + bölümün kaç bandda göründüğü). Giriş paragrafında iki yazının farkını açıkça yazdım ve link verdim. |
| `hedef-siralama-nasil-belirlenir` | Hedef bölümden **geriye doğru** hesap, 1,4 katı dilim kuralı, taban ÷ 1,4 bandı | 1,4 kuralını hiç tekrarlamadım; "hayal/dengeli/güvenli ayrımı bir olasılık hesaplamaz" diye tek cümlede anıp linkledim. Sayım yönü tersi: program → sıralama değil, sıralama → program sayısı. |
| `en-secici-devlet-universiteleri` / `en-cok-ogrenci-alan-devlet-universiteleri` (aynı gece) | Üniversite bazında medyan taban sırası | Üniversite sıralaması yapmadım; üniversite yalnızca "kaç üniversite" sayacı ve örnek satır olarak geçiyor. Havuz tanımını onlarınkinden **farklı** kurduğum (vakıf dahil, kontenjan filtresi yok) için yöntem bölümünde ayrı ayrı yazdım. |
## İç link doğrulaması
Yazıdaki 43 iç linkin tamamı script'le kontrol edildi:
- 14 `/rehber/<slug>` → `content/rehber/<slug>.md` dosyası **var**.
- 26 `/bolum/<slug>` → slug'lar `src/lib/slug.ts`'teki `bolumBazAdi + turkishSlugify` kuralı Python'da birebir yeniden yazılarak DB'deki 352 bölüm baz adına karşı doğrulandı, **hepsi eşleşti**.
- `/`, `/bolumler`, `/universiteler`, `/meraklisina` → `src/app/**/page.tsx` **var**.
- `/tercih-robotu` kullanmadım (yalnızca `/` ana sayfa formuna yönlendirdim); yine de `next.config` içinde kalıcı redirect'i var (satır 80).
## Engeller
- `osym.gov.tr` ana sayfası 60 sn'de yanıt vermedi, `TR,32979/2026.html` 404 döndü. Yerleştirme duyurusuna doğrudan URL ile ulaşıldı ve okundu; ek yerleştirme sonucu için yeni bir ÖSYM duyurusu **kontrol edilemedi**.
- `risk.ts` ile çelişki yok: yazı hiçbir yerde olasılık/yerleşme iddiası kurmuyor, dilim adları `DILIM_ETIKET` ile uyumlu ("Güvenli", "Hayal", "Dengeli").
- Başka yazıda kodla/kaynakla çelişen ifade görmedim (yalnızca iki kardeş yazıyı ve `ek-yerlestirme-2026`'yı okudum).
## Bilal'den istenen
1. Yayın öncesi tek kontrol: ek yerleştirme sonucu bu gece/sabah açıklandıysa yazının yöntem bölümündeki "sonuçları açıklanmamıştı" cümlesi güncellenmeli — 2 dk.
2. Karar: havuz kuralı kardeş yazılarla birebir aynı olsun mu (`kontenjan ≥ 3` eklensin mi)? "Evet" dersen tabloları yeniden üretirim — 1 dk karar.
3. Yok (üçüncü bir istek yok).