Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/29-yazar-ayni-bolum-farkli-uni.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

361 lines
23 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.
# 29 — Yazar raporu: `ayni-bolum-farkli-universite-siralama-farki`
**Rol:** rehber-yazari · **Tarih:** 22 Eylül 2026 gece vardiyası
**Yazılan tek dosya:** `content/rehber/ayni-bolum-farkli-universite-siralama-farki.md` (3.326 kelime). Commit atılmadı, `git add` yapılmadı, `src/` ve başka içerik dosyası değiştirilmedi.
**Şartname:** `02-seo-konu-plani.md` §0 + §2 Dalga A #3 · **Kalite eşiği:** `05-ceo-kararlari.md` §C(d) · **Editör dersleri:** `20-editor-denetimi.md`
**Veri:** `data/yokatlas.db`, tüm sorgular `sqlite3 -readonly`. `veri_meta.refresh_2026_tarih = 2026-09-21T17:21:23Z`.
---
## Özet (5 madde)
1. **Havuz bilerek `siralama-bandlari` yazısıyla birebir aynı seçildi: 9.304 program / 271 üniversite / 81 il / 351 bölüm adı.** Editörün o yazıda zaten yeniden koşup doğruladığı havuz bu; iki yazının rakamları aynı tabandan okunuyor ve çapraz çelişki riski sıfırlandı. Bölüm adı gruplaması `bolumBazAdi` kuralının SQL karşılığıyla yapıldı ve `siralama-bandlari`'nın "aynı bölüm adı kaç bandda" tablosuyla **hücre hücre tuttu** (İşletme 303, Hemşirelik 265, Psikoloji 243, Tıp 217, Bilg.Müh. 213, Hukuk 123 + medyanlar 247.503 / 131.777 / 117.459 / 16.585 / 111.495 / 14.878).
2. **Yöntem kutusu rakamlardan önce, 6 satırlık eleme merdiveni hâlinde** (21.493 → 12.239 → 11.280 → 9.482 → 9.408 → 9.365 → **9.304**), her adımda kaç satırın neden elendiği yazılı. Editörün "filtre cümlesi rakamı üretmiyor" bulgusu bu yazıda baştan kapatıldı.
3. **Yazının çekirdek bulgusu, plandakinden daha keskin çıktı ve yazının omurgası oldu:** sıralaması 150.000 olan aday için 2026'da tabanı gerisinde kapanmış **82 Psikoloji programı** vardı ama bunların yalnız **6'sı devlet**; 250.000'de devlet sütunu **sıfırlanıyor**. Yani "Psikoloji okunur mu" sorusunun gerçek ayracı bölüm değil **bedel ve coğrafya**. Altı devlet programının tamamı adıyla, iliyle, kontenjanıyla tabloda.
4. **Editörün üç tuzağının üçü de açıkça ele alındı:** (a) kirli `il` — elenen 43 satır + Psikoloji'de takılan iki satır adıyla yazıldı; (b) `unitur='DEVLET'` güvenilmezliği — Kıbrıs Amerikan'ın 42 satırına **ek olarak** bu yazıda bulunan iki yeni örnek (Uluslararası Saraybosna ve Uluslararası Balkan üniversitelerinin `DEVLET` etiketli Psikoloji satırları); (c) ODTÜ — havuzdaki 65 satır, İşletme'de 6 / Psikoloji'de 2 ayrı satır ve **hiçbir örnekte ODTÜ'nün adıyla kullanılmadığı** yazılı; Mimarlık devlet ucundaki 39.128'in ODTÜ olduğu ve kampüsünün belirsizliği rakamın geçtiği yerde belirtildi.
5. **Vakıf burs kırılımına dayanan genel tablo yazılmadı** (havuzdaki 3.439 vakıf satırının 2.780'inde etiket yok). Onun yerine etiketi **adında açıkça yazan** üç Psikoloji örneği verildi (Yeditepe, Kapadokya, Avrasya) ve "170 vakıf satırının yalnız 32'sinde etiket var, kalan 138'i adıyla örneklemiyoruz" cümlesi tablonun altyazısına kondu.
---
## (a) Havuz tanımı (yazının yöntem kutusunun SQL karşılığı)
Tüm sorgular bu geçici görünüm üzerinde koştu:
```sql
CREATE TEMP VIEW p AS
SELECT *,
TRIM(CASE WHEN instr(isim,' (')>0 THEN substr(isim,1,instr(isim,' (')-1) ELSE isim END) AS bolum
FROM programs
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 TRIM(il) <> ''
AND il NOT IN ('KIBRIS','LEFKOŞA','GİRNE','GAZİMAĞUSA','LEFKE','GÜZELYURT','İSKELE',
'SARAYBOSNA - BOSNA - HERSEK')
AND NOT (lower(COALESCE(fakulte,'')) LIKE '%açık%' OR lower(COALESCE(fakulte,'')) LIKE '%uzaktan%'
OR lower(isim) LIKE '%açıköğretim%' OR lower(isim) LIKE '%uzaktan%');
```
`bolum` ifadesi `src/lib/slug.ts:29` `bolumBazAdi()` kuralının SQL karşılığıdır (ilk `" ("`den itibaren kes → parantezli burs/dil varyantları aynı ada toplanır). `/bolum/<slug>` sayfaları da aynı kuralı kullanır.
**Doğrulama:** `SELECT COUNT(*), COUNT(DISTINCT universite), COUNT(DISTINCT il), COUNT(DISTINCT bolum) FROM p;` → `9304 | 271 | 81 | 351` — `siralama-bandlari-hangi-kapilar-acilir.md` havuzuyla **birebir** (editörün 20 nolu raporunda yeniden koşulmuş hâli).
### Eleme merdiveni (yazıdaki tablo — S0)
```sql
SELECT COUNT(*) tum_lisans,
SUM(unitur IN ('DEVLET','VAKIF')) a,
SUM(unitur IN ('DEVLET','VAKIF') AND sira2026 IS NOT NULL) b,
SUM(unitur IN ('DEVLET','VAKIF') AND sira2026 IS NOT NULL AND isim NOT LIKE '%KKTC Uyruklu%') c,
SUM(unitur IN ('DEVLET','VAKIF') AND sira2026 IS NOT NULL AND isim NOT LIKE '%KKTC Uyruklu%'
AND il IS NOT NULL AND TRIM(il)<>'' AND il NOT IN ('KIBRIS','LEFKOŞA','GİRNE','GAZİMAĞUSA',
'LEFKE','GÜZELYURT','İSKELE','SARAYBOSNA - BOSNA - HERSEK')) d
FROM programs WHERE onlisans=0;
-- 12239 | 11280 | 9482 | 9408 | 9365
SELECT COUNT(*), SUM(onlisans=1) FROM programs; -- 21493 | 9254
-- p görünümü (açık/uzaktan da çıkınca): 9304
```
| Adım | Kalan | Elenen |
|---|---|---|
| tüm satır | 21.493 | — |
| lisans | 12.239 | 9.254 önlisans |
| DEVLET/VAKIF | 11.280 | 959 |
| `sira2026` dolu | 9.482 | 1.798 |
| "KKTC Uyruklu" hariç | 9.408 | 74 |
| `il` Türkiye ili | 9.365 | **43** |
| açık/uzaktan hariç | **9.304** | 61 |
Boş `il` değerli satır sayısı (tüm tablo): `SELECT COUNT(*) FROM programs WHERE il IS NULL OR TRIM(il)='';` → **110** (brief'teki rakam doğrulandı).
---
## (b) Yazıdaki her tablonun SQL'i ve çıktısı
Aşağıdaki sorguların hepsi `p` görünümü tanımlandıktan sonra koşuldu. **Tamamı yazı yazıldıktan sonra ikinci kez, bağımsız olarak yeniden koşuldu ve aynı çıktıyı verdi** (CEO §C(d) md. 1).
### S1 — Tablo 1: yedi bölümün yayılımı
```sql
WITH s AS (SELECT bolum, sira2026, unitur, universite,
ROW_NUMBER() OVER (PARTITION BY bolum ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY bolum) n FROM p
WHERE bolum IN ('Psikoloji','Hukuk','İşletme','Bilgisayar Mühendisliği','Hemşirelik','Mimarlık','Tıp'))
SELECT bolum, n, COUNT(DISTINCT universite) uni, MIN(sira2026) en_secici,
MAX(CASE WHEN rd=(n+1)/2 THEN sira2026 END) medyan, MAX(sira2026) en_genis,
SUM(unitur='DEVLET') devlet, SUM(unitur='VAKIF') vakif
FROM s GROUP BY bolum, n ORDER BY n DESC;
```
```
İşletme | 303 | 167 | 128 | 247503 | 1414685 | 146 | 157
Hemşirelik | 265 | 154 | 55118 | 131777 | 1090898 | 116 | 149
Psikoloji | 243 | 138 | 329 | 117459 | 1402765 | 73 | 170
Tıp | 217 | 119 | 1 | 16585 | 49623 | 105 | 112
Bilgisayar Mühendisliği | 213 | 162 | 520 | 111495 | 298425 | 119 | 94
Hukuk | 123 | 87 | 105 | 14878 | 99505 | 50 | 73
Mimarlık | 121 | 97 | 28108 | 146562 | 249972 | 57 | 64
```
### S2 — Tablo 2: dayanıklı yayılım (%10 / medyan / %90)
```sql
WITH s AS (SELECT bolum, sira2026,
ROW_NUMBER() OVER (PARTITION BY bolum ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY bolum) n FROM p
WHERE bolum IN ('Psikoloji','Hukuk','İşletme','Bilgisayar Mühendisliği','Hemşirelik','Mimarlık','Tıp'))
SELECT bolum,
MAX(CASE WHEN rd=CAST(0.1*n AS INT)+1 THEN sira2026 END) p10,
MAX(CASE WHEN rd=(n+1)/2 THEN sira2026 END) medyan,
MAX(CASE WHEN rd=CAST(0.9*n AS INT) THEN sira2026 END) p90,
ROUND(MAX(CASE WHEN rd=CAST(0.9*n AS INT) THEN sira2026 END)*1.0
/MAX(CASE WHEN rd=CAST(0.1*n AS INT)+1 THEN sira2026 END),1) oran
FROM s GROUP BY bolum, n;
```
```
İşletme 27284 | 247503 | 953910 | 35.0 Tıp 4340 | 16585 | 37853 | 8.7
Psikoloji 31382 | 117459 | 924791 | 29.5 Bilg.Müh. 36765 | 111495 | 238201 | 6.5
Hukuk 3140 | 14878 | 81860 | 26.1 Hemşirelik 90900 | 131777 | 584556 | 6.4
Mimarlık 74227 | 146562 | 230548 | 3.1
```
**Neden min/max yerine p10/p90 da verildi:** Tıp'ın `MIN(sira2026)=1` değeri tek bir vakıf tam burslu satırından geliyor ve "kaç kat" oranını (49.623) anlamsız kılıyor. Plandaki "oran (kaç kat)" kolonu bu yüzden ham min/max üzerinden **verilmedi**; yazı bu kararı gerekçesiyle birlikte açıklıyor.
### S3 — 73 bölüm adının yayılım sıralaması (en geniş / en dar)
```sql
WITH s AS (SELECT bolum, sira2026, ROW_NUMBER() OVER (PARTITION BY bolum ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY bolum) n FROM p),
a AS (SELECT bolum, n, MAX(CASE WHEN rd=CAST(0.1*n AS INT)+1 THEN sira2026 END) p10,
MAX(CASE WHEN rd=CAST(0.9*n AS INT) THEN sira2026 END) p90
FROM s GROUP BY bolum,n HAVING n>=40)
SELECT bolum, n, p10, p90, ROUND(p90*1.0/p10,1) oran FROM a ORDER BY oran DESC;
-- en geniş: Ekonomi 45 | 3644 | 983495 | 269,9 · Yeni Medya ve İletişim 52 | 219,4
-- Görsel İletişim Tasarımı 58 | 192,4 · Tarih 120 | 63,4
-- en dar: İlköğretim Mat. Öğrt. 78 | 2,1 · Sınıf Öğrt. 90 | 2,2 · Eczacılık 93 | 2,3
-- Sosyal Hizmet 72 | 2,3 · Diş Hekimliği 140 | 2,4
SELECT COUNT(*) FROM (SELECT bolum FROM p GROUP BY bolum HAVING COUNT(*)>=40); -- 73
```
### S4 — Tablo 3: Psikoloji merdiveni (yazının çekirdeği)
```sql
SELECT 150000 esik, SUM(sira2026>=150000) prg,
SUM(sira2026>=150000 AND unitur='DEVLET') devlet,
COUNT(DISTINCT CASE WHEN sira2026>=150000 THEN il END) il,
SUM(CASE WHEN sira2026>=150000 THEN COALESCE(kontenjan2026,0) END) kontenjan
FROM p WHERE bolum='Psikoloji'; -- eşik 50.000 / 100.000 / 250.000 / 400.000 için tekrarlandı
```
```
50000 | 200 | 56 | 47 | 6155
100000 | 143 | 35 | 39 | 4742
150000 | 82 | 6 | 17 | 3196
250000 | 69 | 0 | 12 | 2796
400000 | 60 | 0 | 11 | 2411
```
### S5 — Tablo 4: 150.000 ve gerisinde kapanan devlet Psikoloji programlarının **tamamı**
```sql
SELECT universite, il, sira2026, kontenjan2026 FROM p
WHERE bolum='Psikoloji' AND unitur='DEVLET' AND sira2026>=150000 ORDER BY sira2026;
-- GÜMÜŞHANE 151689 (30) · ADIYAMAN 152671 (30) · BİNGÖL 162823 (40)
-- MUŞ ALPARSLAN 170510 (30) · AĞRI İBRAHİM ÇEÇEN 176195 (40) · ANKARA SOSYAL BİLİMLER 240655 (12)
```
### S6 — Tablo 5: devlet/vakıf medyanları
```sql
WITH s AS (SELECT bolum, unitur, sira2026,
ROW_NUMBER() OVER (PARTITION BY bolum,unitur ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY bolum,unitur) n FROM p WHERE bolum IN (<7 bölüm>))
SELECT bolum, unitur, n, MAX(CASE WHEN rd=(n+1)/2 THEN sira2026 END) medyan FROM s GROUP BY bolum,unitur,n;
```
```
Psikoloji DEVLET 73|97977 VAKIF 170|124122 İşletme DEVLET 146|276504 VAKIF 157|192741
Hemşirelik DEVLET 116|121761 VAKIF 149|207577 Bilg.Müh. DEVLET 119|135495 VAKIF 94|82781
Hukuk DEVLET 50|14236 VAKIF 73|14878 Mimarlık DEVLET 57|174050 VAKIF 64|125467
Tıp DEVLET 105|15460 VAKIF 112|22965
```
Psikoloji devlet medyanı **97.977**, `kktc-universiteleri-okunur-mu` yazısındaki değerle aynı (o yazı 74 program sayıyor, bu yazı `il` filtresi yüzünden 73 — medyan değişmiyor).
### S7 — Tablo 6: burs etiketi kesin olan Psikoloji örnekleri
```sql
SELECT COUNT(*), SUM(isim LIKE '%Burslu%'), SUM(isim LIKE '%İndirimli%'), SUM(isim LIKE '%Ücretli%'),
SUM(isim NOT LIKE '%Burslu%' AND isim NOT LIKE '%İndirimli%' AND isim NOT LIKE '%Ücretli%')
FROM p WHERE unitur='VAKIF'; -- 3439 | 339 | 203 | 117 | 2780
SELECT COUNT(*), SUM(isim LIKE '%Burslu%' OR isim LIKE '%İndirimli%' OR isim LIKE '%Ücretli%')
FROM p WHERE unitur='VAKIF' AND bolum='Psikoloji'; -- 170 | 32
WITH v AS (SELECT universite,
MIN(CASE WHEN isim LIKE '%Burslu%' THEN sira2026 END) burslu,
MIN(CASE WHEN isim LIKE '%50 İndirimli%' THEN sira2026 END) ind50,
MIN(CASE WHEN isim LIKE '%Ücretli%' THEN sira2026 END) ucretli
FROM p WHERE unitur='VAKIF' AND bolum='Psikoloji' GROUP BY universite)
SELECT * FROM v WHERE burslu IS NOT NULL AND ucretli IS NOT NULL ORDER BY burslu;
-- YEDİTEPE 4034 | 239840 | 708709 (siralama-bandlari yazısındaki satırla birebir)
-- KAPADOKYA 125664 | 699819 | 1364723
-- AVRASYA (TRABZON) 126294 | (yok) | 456846
```
Aynı üniversite içindeki yayılım:
```sql
WITH u AS (SELECT universite, unitur, MIN(sira2026) mn, MAX(sira2026) mx
FROM p WHERE bolum='Psikoloji' GROUP BY universite,unitur HAVING COUNT(*)>1),
s AS (SELECT unitur, mx-mn f, ROW_NUMBER() OVER (PARTITION BY unitur ORDER BY mx-mn) rd,
COUNT(*) OVER (PARTITION BY unitur) n FROM u)
SELECT unitur, n, MAX(CASE WHEN rd=(n+1)/2 THEN f END) medyan_fark FROM s GROUP BY unitur,n;
-- DEVLET 3 | 139112 VAKIF 57 | 756794
```
### S8 — Tablo 7: şehir kırılımı (yalnız devlet)
```sql
WITH e AS (SELECT bolum, CASE WHEN il IN ('İSTANBUL','ANKARA','İZMİR') THEN 'buyuk' ELSE 'diger' END g,
sira2026 FROM p WHERE unitur='DEVLET' AND bolum IN (<6 bölüm>)),
s AS (SELECT bolum,g,sira2026, ROW_NUMBER() OVER (PARTITION BY bolum,g ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY bolum,g) n FROM e)
SELECT bolum,g,n, MAX(CASE WHEN rd=(n+1)/2 THEN sira2026 END) medyan FROM s GROUP BY bolum,g,n;
```
```
Psikoloji buyuk 22|31882 diger 51|113775 Bilg.Müh. buyuk 30|44589 diger 89|169038
Hukuk buyuk 19|5664 diger 31|18721 Hemşirelik buyuk 16|84784 diger 100|125583
İşletme buyuk 38|40345 diger 108|408818 Mimarlık buyuk 15|79980 diger 42|197879
```
### S9 — Programın yaşı ve kontenjan büyüklüğü
```sql
-- yaş (devlet, 6 bölüm, 561 satır)
WITH e AS (SELECT CASE WHEN sira2021 IS NULL THEN 'yeni' ELSE 'eski' END g, sira2026
FROM p WHERE unitur='DEVLET' AND bolum IN (<6 bölüm>)),
s AS (SELECT g,sira2026, ROW_NUMBER() OVER (PARTITION BY g ORDER BY sira2026) rd,
COUNT(*) OVER (PARTITION BY g) n FROM e)
SELECT g,n, MAX(CASE WHEN rd=(n+1)/2 THEN sira2026 END) FROM s GROUP BY g,n;
-- eski 391 | 109331 yeni 170 | 246689
-- kontenjan (aynı havuz)
-- 60+ 315 | 108326 · 40-59 146 | 152945 · 40 altı 100 | 152671
```
### S10 — Öğretim dili (aynı üniversite + aynı bölüm içinde İngilizce ↔ etiketsiz çiftler)
```sql
WITH d AS (SELECT universite, bolum, unitur,
MIN(CASE WHEN isim LIKE '%(İngilizce)%' THEN sira2026 END) ing,
MIN(CASE WHEN isim NOT LIKE '%(İngilizce)%' AND isim NOT LIKE '%(Almanca)%'
AND isim NOT LIKE '%(Fransızca)%' AND isim NOT LIKE '%(Arapça)%'
AND isim NOT LIKE '%Burslu%' AND isim NOT LIKE '%İndirimli%'
AND isim NOT LIKE '%Ücretli%' THEN sira2026 END) tr
FROM p GROUP BY universite, bolum, unitur)
SELECT unitur, COUNT(*) cift, SUM(ing<tr), SUM(tr<ing) FROM d
WHERE ing IS NOT NULL AND tr IS NOT NULL GROUP BY unitur;
-- DEVLET 20 | 9 | 11 VAKIF 52 | 17 | 35 (vakıf satırı yazıya girmedi — burs etiketi eksikliği
-- yüzünden "tr" kümesi temsil edilebilir değil)
```
### S11 — İkinci öğretim (ölçülemedi)
```sql
SELECT COUNT(*) FROM programs WHERE isim LIKE '%(İÖ)%' OR isim LIKE '%İkinci Öğretim%'; -- 0
```
---
## (c) Editörün üç tuzağı — bu yazıda ne yapıldı
### 1. Kirli `il`
```sql
SELECT COALESCE(NULLIF(il,''),'(BOŞ)') il, COUNT(*) FROM programs
WHERE onlisans=0 AND unitur IN ('DEVLET','VAKIF') GROUP BY 1;
-- Türkiye ili olmayanlar: SARAYBOSNA - BOSNA - HERSEK 41 · KIBRIS 27 · (BOŞ) 26 · LEFKOŞA 21
-- bunların 2026 tabanı olanları: 43 satır (yazının 5. eleme adımı)
```
Psikoloji'de bu filtreye takılan iki satır yazıda adıyla veriliyor:
```sql
-- ULUSLARARASI SARAYBOSNA ÜNİVERSİTESİ | Psikoloji | SARAYBOSNA - BOSNA - HERSEK | DEVLET | 114116
-- ULUSLARARASI BALKAN ÜNİVERSİTESİ | Psikoloji | SARAYBOSNA - BOSNA - HERSEK | DEVLET | 795314
```
### 2. `unitur='DEVLET'` güvenilmez — **yeni iki örnek bulundu**
Editörün bildiği Kıbrıs Amerikan Üniversitesi vakasına ek olarak yukarıdaki **iki Bosna kampüsü** de `unitur='DEVLET'` etiketli. Kıbrıs Amerikan da doğrulandı:
```sql
SELECT universite, unitur, il, COUNT(*) FROM programs WHERE universite LIKE '%KIBRIS AMERİKAN%' GROUP BY 1,2,3;
-- KIBRIS AMERİKAN ÜNİVERSİTESİ | DEVLET | (boş) | 2
-- KIBRIS AMERİKAN ÜNİVERSİTESİ | DEVLET | LEFKOŞA | 34
-- KIBRIS AMERİKAN ÜNİVERSİTESİ (KKTC-LEFKOŞA) | DEVLET | KIBRIS | 6 → toplam 42, hepsi il filtresiyle elendi
```
**Backlog önerisi (veri-muhendisi):** `unitur` tek başına devlet/vakıf kırılımı için kullanılamaz durumda. Bu yazı Türkiye-ili koşuluyla dolanıyor ama ürün (`src/lib/db.ts`, `src/lib/katalog.ts`) dolanmıyor.
### 3. ODTÜ
```sql
SELECT COUNT(*) FROM p WHERE universite LIKE 'ORTA DOĞU%'; -- 65
SELECT isim, il, sira2026 FROM p WHERE universite LIKE 'ORTA DOĞU%' AND bolum IN (<7 bölüm>);
-- İşletme × 6 satır: 1585 · 3532 · 50541 · 288854 · 359940 · 800853 (hepsi il=ANKARA)
-- Psikoloji × 2: 2443 · 141555 Bilg.Müh. × 2: 2989 · 96050 Mimarlık × 1: 39128
```
`fakulte` alanı da ayırmıyor (Psikoloji ve İşletme satırlarının bir kısmı `Mühendislik Fakültesi` yazıyor). YÖK Atlas'ın `lisans.php?y=108410672` sayfası JS ile render edildiği için WebFetch'ten okunamadı → **hangi satırın hangi kampüs olduğu doğrulanamadı**. Bu yüzden:
- ODTÜ hiçbir örnekte adıyla kullanılmadı (en seçici devlet Psikoloji listesinden bilerek çıkarıldı);
- toplamlara dahil olduğu ve tek bir yerde (Mimarlık devlet ucu 39.128) tablonun ucunda durduğu **yöntem kutusunda** yazıldı, sonda değil.
---
## (d) Çıkarılan / yazılmayan iddialar
| İddia | Neden yazılmadı |
|---|---|
| Plandaki "İstanbul'da Psikoloji 87 program, 329–1.402.765" cümlesi | Kendi havuzumda İstanbul Psikoloji **111 program** çıkıyor (`SELECT COUNT(*), MIN, MAX FROM p WHERE bolum='Psikoloji' AND il='İSTANBUL'` → 111 | 329 | 1402765). Plandaki 87, parantezli varyantları ayrı sayan bir gruplamadan geliyor. Yazı tek şehir kesitini bırakıp **ülke geneli** kesite geçti; plandaki 87 rakamı kullanılmadı. |
| "Kontenjanı büyük programın tabanı daha sıkı" | Korelasyon var (108.326 ↔ 152.945 ↔ 152.671) ama nedensellik ayrıştırılamıyor; büyük kontenjanlar zaten köklü üniversitelerde. Yazı bunu **ayraç saymadı**, "ölçemediğimiz iki şey" başlığına koydu. |
| "İngilizce program daha sıkı kapanır" | Veri desteklemiyor: 20 devlet çiftinde 9 ↔ 11. Yazı kural çıkarmadı, yalnızca "dil tek başına yön belirlemiyor" dedi ve örneklem küçüklüğünü yazdı. |
| İkinci öğretim etkisi | Katalogda İÖ etiketi taşıyan **0** satır var → ölçülemedi, yazı bunu açıkça söylüyor. |
| Vakıf burslu/ücretli genel kırılım tablosu | 3.439 vakıf satırının 2.780'inde etiket yok → yalnız etiketi kesin 3 örnek. |
| "Diploma YÖK açısından eşdeğerdir / TYYÇ 6. düzey" | `tyc.gov.tr` TLS hatası verdi, `tyyc.yok.gov.tr` DNS'te çözülmedi → **resmî kaynak açılamadı**. Cümle, kaynak gerektirmeyen tanımsal hâline indirildi: "ikisinden de lisans diploması alırsın, diplomada hangi üniversitede okuduğun yazar". |
| "Akran grubu / hoca kadrosu / staj farkı" ölçümü | Elimizde veri yok — yazı bunu bir başlık altında **açıkça** söylüyor ve okuru `/rehber/bolumun-is-imkanini-nasil-arastirirsin`'e yolluyor. |
---
## (e) CEO §C(d) altı maddeye karşı öz denetim
| # | Kriter | Durum |
|---|---|---|
| 1 | Rakam yazının kendi filtresiyle yeniden üretilebiliyor | ✔ Havuz SQL'i yukarıda; yazı yazıldıktan sonra tüm tablolar **ikinci kez** koşuldu, tamamı aynı çıktı |
| 2 | Yöntem kutusu var | ✔ İlk H2, tablolardan önce: tablo, yıl kolonu, 6 adımlı filtre + elenen satır sayıları + veri tarihi (21 Eyl 2026) |
| 3 | Açılamayan kaynağa dayanan cümle yok | ✔ TYYÇ iddiası çıkarıldı; ODTÜ kampüs ayrımı "doğrulayamıyoruz" diye yazıldı |
| 4 | Vaat / istihdam dili yok | ✔ grep: "garanti" yalnız olumsuzlamada, "olasılığı" yalnız "yerleşme olasılığı **değil**" cümlesinde; "yerleşirsin/atanırsın/kesinlikle" 0 |
| 5 | Kanibalizasyon ayrım cümlesi ilk 200 kelimede | ✔ 2. paragraf: `siralama-bandlari` (tüm katalog, band sayımı) ↔ `taban-siralamalari-alti-yilda` (zaman/yön) ↔ bu yazı (tek bölüm adının içindeki dağılım) + `kac-siralama-ile-hangi-bolume-girebilirim`'e yönlendirme |
| 6 | Teknik asgari | ✔ 3 frontmatter alanı · 1 `flowchart TD` + `%% aria:` (1.562 karakter) + `%% altyazi:` · **8 tablo** · ölü iç link yok |
**Teknik doğrulama koşuldu:** `src/lib/rehber.ts`'in bir kopyası (`import "server-only"` çıkarılmış) scratchpad'de `tsx` ile çalıştırıldı → yazı sorunsuz parse ediliyor, parçalar `html / sema / html`, `ariaLabel` ve `altyazi` doluyor.
**İç link denetimi (24 benzersiz hedef, elle doğrulandı):** 13 `/rehber/<slug>` hedefinin tamamı `content/rehber/` altında var; 7 `/bolum/<slug>` hedefi `turkishSlugify(bolumBazAdi())` kuralıyla üretilebiliyor ve `siralama-bandlari` yazısında editörün taramasından geçmiş; `/bolumler`, `/universiteler` gerçek route; `/#hero-form` çapası `src/app/page.tsx:241`'de var. **`/tercih-robotu` kullanılmadı, `/il/*` kullanılmadı.**
**Ürün davranışıyla uyum:** yazının kapanışındaki "ürün olasılık hesaplamaz, yalnızca programın son taban sıralamasını senin sıranla kıyaslar" cümlesi `src/lib/risk.ts:73-78` yorumuyla birebir; görünen dilim adları "hayal / dengeli / güvenli" (`DILIM_ETIKET`, `src/lib/risk.ts:21-25`).
---
## (f) Engeller
1. **YÖK Atlas program sayfaları WebFetch'ten okunamıyor** (JS render). ODTÜ kampüs ayrımı bu yüzden çözülemedi.
2. **`tyc.gov.tr` TLS hatası** (`unable to verify the first certificate`), **`tyyc.yok.gov.tr` DNS'te yok** → TYYÇ düzey bilgisi doğrulanamadı, iddia çıkarıldı.
3. Web sayfalarında bana yönelik talimat görülmedi.
---
## (g) Başka yazılarla çelişki notu (editöre)
Çelişki **bulunmadı**, ama iki nokta editörün bilmesinde fayda var:
- `siralama-bandlari-hangi-kapilar-acilir.md`'nin "Aynı bölüm adı kaç bandda birden var?" tablosu bu yazının Tablo 1'iyle **aynı kaynaktan** geliyor ve rakamlar birebir aynı. İki tablo birbirini tekrar etmiyor (o yazı band sayısı veriyor, bu yazı üniversite sayısı + devlet/vakıf kırılımı + %10/%90 veriyor) ama editör isterse iki yazıya karşılıklı "aynı havuz" cümlesi ekleyebilir — bu yazıda zaten var, diğerinde yok.
- `kktc-universiteleri-okunur-mu.md`'deki devlet Psikoloji medyanı **97.977** (74 program) ile bu yazınınki **97.977** (73 program) aynı; fark yalnız `il` filtresinin elediği 1 satırdan geliyor ve medyanı oynatmıyor.
---
## Bilal'den istenen (2 madde)
1. **`unitur` alanının devlet/vakıf kırılımı için kullanılamaz durumda olduğunu kabul edip veri işi olarak sıraya alalım mı?** Bu gece üç ayrı vaka çıktı: Kıbrıs Amerikan Ü. (42 satır), Uluslararası Saraybosna Ü. ve Uluslararası Balkan Ü. — üçü de `DEVLET` etiketli. Yazılar dolanıyor, ürün dolanmıyor (`/universite/<slug>` sayfalarında `stats.devletMi` yanlış dönüyor). Tek cümlelik karar — **~2 dk**.
2. **ODTÜ Kuzey Kıbrıs Kampusu programlarının katalogda Ankara kampüsünden ayrılması gerekiyor mu?** Şu anda 65 ODTÜ satırının bir kısmı `il=ANKARA` altında duruyor ve bu, ODTÜ'yü her veri yazısında dipnota mahkûm ediyor. Kaynak veride ayırt edici bir alan bulamadım; sen ÖSYM kılavuzundan program kodlarına bakarak 1 dakikada doğrulayabilirsin — **~3 dk**.