Çok ajanlı gece vardiyasının çıktıları: analitik (Rybbit) bulguları, SEO/GEO konu planı, marka stratejisi, canlı mail testi, CEO kararları (2 tur), CTO şartnamesi, yazar/yazılımcı raporları, bağımsız kod denetimi ve sabah özeti (yazılı + sesli). Kod değişiklikleri gece/* dallarında. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
128 KiB
07 — Yazılımcı / yazar raporları — 2026-09-21 gece vardiyası
Blog: hedef-siralama-nasil-belirlenir
Özet (5 madde)
- Yazı yazıldı, commit atılmadı:
.claude/worktrees/rehber-yazilari/content/rehber/hedef-siralama-nasil-belirlenir.md(dalgece/rehber-yazilari). ~1.380 kelime (şema hariç), 1flowchart TDşema (%% aria+%% altyazi), 3 tablo, 5 soruluk SSS, "Kaynaklar" bölümü, 16 iç link. Başka hiçbir dosyaya dokunulmadı. - "%10–15 tampon" yöntemi KULLANILMADI. Yerine ürünün gerçek dilim kuralı anlatıldı ve tersinden okundu: hedef bandı =
taban ÷ 1,4 … taban(programı dengeli dilimde gören sıralamalar);taban ÷ 1,4'ten iyi sıralama = güvenli dilim. Yeni bir formül değil,riskHesapla'nın cebirsel tersi; sınırlarMath.round(sira*1.4)ile birebir hesaplandı. - Tüm rakamlar
data/yokatlas.db'den (salt-okunursqlite3 -readonly "file:...?mode=ro"); DB'ye yazılmadı/kopyalanmadı. Veri yılları:programs2021–2025,netler2023–2025. 2026 verisi yok; yazıda açıkça belirtildi. - "Yerleşme olasılığı / garanti / yerleşirsin" dili yok; iki yerde açıkça "etiket olasılık değildir" deniyor. Dilim adı CEO kuralına göre: "güvenli dilim (halk arasındaki adıyla garanti tercih; üründe dilimin adı da böyle geçer)", sonrası "güvenli". Şemada
garantiyalnızca classDef anahtarı. - Görev talimatı ile CEO notu arasında 2 fark var, görev talimatına uyuldu (aşağıda "Karar bekleyen").
Kullanılan SQL sorguları ve sonuçları
Bağlantı: sqlite3 -readonly "file:/Users/bilalgursen/Desktop/kolaytercih/data/yokatlas.db?mode=ro". Tablolar: programs (23.610 satır), netler (2023: 21.341 · 2024: 20.813 · 2025: 20.821 satır).
S1 — ana tablo (5 yıllık taban başarı sıralaması):
SELECT id,universite,isim,tur,sira2021,sira2022,sira2023,sira2024,sira2025,
ROUND(100.0*(sira2025-sira2021)/sira2021,1) AS degisim_yuzde
FROM programs
WHERE id IN ('103410457','104410207','101110518','103410096','104110342','103110769','103510395')
ORDER BY sira2025;
| id | universite | isim | tur | 2021 | 2022 | 2023 | 2024 | 2025 | 2021→2025 % |
|---|---|---|---|---|---|---|---|---|---|
| 101110518 | ANKARA ÜNİVERSİTESİ | Hukuk | EŞİT AĞIRLIK | 5124 | 4387 | 3242 | 3227 | 2233 | -56,4 |
| 103410457 | EGE ÜNİVERSİTESİ | Tıp | SAYISAL | 4218 | 5159 | 5303 | 5294 | 5118 | +21,3 |
| 103410096 | EGE ÜNİVERSİTESİ | Psikoloji | EŞİT AĞIRLIK | 28306 | 18751 | 13730 | 21549 | 18557 | -34,4 |
| 104410207 | GEBZE TEKNİK ÜNİVERSİTESİ | Bilgisayar Mühendisliği | SAYISAL | 15935 | 9926 | 9764 | 13974 | 22294 | +39,9 |
| 104110342 | GAZİ ÜNİVERSİTESİ | Sınıf Öğretmenliği | EŞİT AĞIRLIK | 63986 | 66184 | 52275 | 52808 | 45590 | -28,8 |
| 103110769 | DOKUZ EYLÜL ÜNİVERSİTESİ | Hemşirelik | SAYISAL | 116356 | 121110 | 123227 | 120589 | 110484 | -5,0 |
| 103510395 | ERCİYES ÜNİVERSİTESİ | Makine Mühendisliği | SAYISAL | 230974 | 219734 | 197346 | 191513 | 154725 | -33,0 |
S2 — kontenjan iddiaları (Ankara Hukuk 500→200; GTÜ Bilgisayar 90–95 sabit):
SELECT id,isim,kontenjan2021,kontenjan2022,kontenjan2023,kontenjan2024,kontenjan2025
FROM programs WHERE id IN ('101110518','103410096','104410207','103410457','104110342','103110769','103510395');
Sonuç: 101110518 Hukuk 550/550/500/500/200 · 104410207 GTÜ Bilg. 90/90/90/95/95 · 103410096 Ege Psikoloji 100/100/100/80/50 · 103410457 Ege Tıp 310/310/310/320/320 · 104110342 Gazi Sınıf 80/80/90/50/60 · 103110769 DEÜ Hemş. 220/220/220/220/210 · 103510395 Erciyes Makine 100/100/100/105/90. (Yazıda yalnızca ilk ikisi kullanıldı.)
S3 — net tablosu (Ege Tıp, yerleşen son kişinin netleri):
SELECT program_id,yil,
tytTrkNet+tytSosNet+tytMatNet+tytFenNet AS tyt_toplam,
aytMatNet+aytFizNet+aytKimNet+aytBioNet AS ayt_say_toplam,
tabanPuan, obp
FROM netler WHERE program_id IN ('103410457','104410207') ORDER BY 1,2;
Sonuç (103410457 Ege Tıp): 2023 → TYT 105,25 · AYT 74,25 · puan 526,53 · 2024 → 112,5 · 68,25 · 516,07 · 2025 → 101,0 · 73,75 · 516,36. (104410207 GTÜ Bilg.: 109,75/68,75 · 99,0/66,25 · 89,75/66,25 — yazıda kullanılmadı.) "120 soruda / 80 soruda" paydaları program-netleri.tsx DERSLER.max toplamından: 40+20+40+20 = 120; 40+14+13+13 = 80.
S4 — tek varyant kontrolü (aynı üniversitede aynı adla birden çok program var mı):
SELECT universite,isim,count(*) FROM programs WHERE (universite='ANKARA ÜNİVERSİTESİ' AND isim LIKE 'Hukuk%')
OR (universite='EGE ÜNİVERSİTESİ' AND (isim LIKE 'Psikoloji%' OR isim LIKE 'Tıp%'))
OR (universite='GAZİ ÜNİVERSİTESİ' AND isim LIKE 'Sınıf Öğr%')
OR (universite='DOKUZ EYLÜL ÜNİVERSİTESİ' AND isim LIKE 'Hemşirelik%')
OR (universite LIKE 'ERCİYES%' AND isim LIKE 'Makine Müh%')
OR (universite LIKE 'GEBZE%' AND isim LIKE 'Bilgisayar Müh%') GROUP BY 1,2;
Sonuç: hepsi 1; tek istisna Erciyes'te 2025'te açılan ayrı "Makine Mühendisliği (İngilizce)" (id 103590583, yalnız 2025 verisi) — tablodaki satır Türkçe program (103510395). Bu yüzden ilk adaylar elendi: Hacettepe Tıp (2 program, isim ikisinde de "Tıp" — İngilizce eki DB'de kayıp), ODTÜ Bilgisayar (4 kayıt, KKTC kampüsü il=ANKARA görünüyor), Ankara Üni. Bilgisayar (3 kayıt), Marmara İng. Öğretmenliği (2 kayıt). Yan bulgu: eski kayıtlarda "(İngilizce)" / kampüs eki isim'de yok; katalogda bu satırlar ayırt edilemiyor olabilir — ayrı bakılmalı.
S5 — hedef bandı sınırları (DB değil, ürün kuralıyla hesap): node -e ile her taban T için T > Math.round(s*1.4) koşulunu sağlayan en büyük s bulundu → 5118: güvenli ≤ 3655, dengeli 3656–5118 · 22294: ≤ 15923, 15924–22294 · 45590: ≤ 32563, 32564–45590 · 110484: ≤ 78916, 78917–110484.
risk.ts'ten alınan kural (özet)
src/lib/risk.ts:27-37riskHesapla(efektifSira, adaySira):efektifSira > Math.round(adaySira*1.4)→guvenli(satır 34);efektifSira >= adaySira→az-riskli(35); aksi →riskli(36). EtiketlerRISK_ETIKET(9-13): Güvenli / Az riskli / Riskli. Veri yoksanull.- Efektif taban =
COALESCE(sira2025, sira2024)(risk.ts:23,src/lib/db.ts:35). Yani etiket TEK yılın tabanına bakar; yazıda böyle anlatıldı ("filmi sen okursun"). - Dilim aralıkları
src/lib/db.ts:57-65dilimAraligi: hayal[1, sira-1], dengeli[sira, round(1.4×sira)], garanti[round(1.4×sira)+1, ∞)— açık uçlu, çarpan penceresi yok.dilimdenRisk(risk.ts:40-44): garanti→güvenli, dengeli→az-riskli, hayal→riskli. - Ürün olasılık üretmiyor; yazıda olasılık/vaat yok.
- Yazıya ALINMAYAN gerçek kural: rapordaki trend cümlesi (
src/lib/ai/rapor.ts:139-162) eldeki ilk ve son yılı kıyaslar, ±%10 eşiği. Bu kurala göre Ege Tıp (4218→5118, +%21) "kolaylaşıyor" çıkar; oysa 2022–2025 dört yıl 5.118–5.303 bandında düz. Okuru yanıltmamak için yazıda trend nitel anlatıldı (mevcuttaban-siralamalar-nasil-degisirile aynı kalıplar). Ürün notu: ilk-son yıl kıyası tek bir aykırı başlangıç yılına duyarlı; ayrıca değerlendirilebilir.
Yayın öncesi kontrol edilecekler (Bilal)
tarih: görev talimatı gereği2026-09-21yazıldı; CEO notu (§2 ortak kurallar)2026-09-22diyor → yayın gününe göre düzelt.- Şemayı sayfada gözle kontrol et (mermaid burada render edilemedi: node'da DOM yok,
mermaid.parseDOMPurify hatası verdi; sözdizimi mevcut yazılardaki desenle birebir,rehber.tsregex'i şemayı + aria + altyazıyı buldu,marked3 tablo/6 H2 üretti). - Geniş tablo (8 kolon) mobilde taşabilir — CEO P1 kabul kriteri 5 (
overflow-x-auto) yayına girmeden bu yazı mobilde yatay kaydırma yaratabilir. - S1–S3 sorgularını çalıştırıp tablo rakamlarını teyit et; 2026 verisi yüklenince üç tablo + "2026 verisi yüklendiğinde güncellenecek" cümlesi güncellenmeli.
- "Kaynaklar"da katalog veri tarihi
9 Ağustos 2026=src/lib/seo.tsx:24KATALOG_VERI_TARIHI; sabit değişirse metin de değişmeli. YÖK Atlas sitesine bu gece girilmedi (rakamlar DB'den), bu yüzden "erişim tarihi" yazılmadı. - Bölüm linkleri slug kuralından türetildi (
src/lib/slug.tsbolumSayfaSlug):/bolum/tip,/hukuk,/psikoloji,/bilgisayar-muhendisligi,/sinif-ogretmenligi,/hemsirelik,/makine-muhendisligi; ilk dördü ve hemşirelik mevcut yazılarda zaten kullanılıyor./bolumler,/meraklisina,/tercih-roboturotalarısrc/appaltında doğrulandı (/tercih-robotumevcut yazılardaki gibi 301'e güveniyor). /meraklisinametninde "1,4" sayısı açıkça geçmiyor (yalnızcameraklisina-demo.tsx:141hesaplıyor ve aralığı gösteriyor); yazı bu yüzden "sayfada şemasıyla görebilirsin" diyor, "orada 1,4 yazıyor" demiyor.
Karar bekleyen / yapılmayanlar
- CEO §2.3 bu yazara 3 eski yazıda (
kac-siralama…,taban-siralamalar…,taban-puan-mi…) yeni yazıya link +guncellemesatırı ekleme işi veriyor; orkestratör talimatı "yalnızca kendi dosyana dokun" dediği için YAPILMADI. Yeni yazı şu an hiçbir yazıdan link almıyor (yetim) — ayrı bir adımda eklenmeli. mezuna-kalmak-mi-kayit-olmak-miyazısına link verilmedi (dosya yazım anında worktree'de yoktu; ölü link riski). Yayınlanırsa "Deneme sıralamanı…" bölümüne eklenebilir.- Mevcut yazıda tutarsızlık (dokunulmadı):
taban-siralamalar-nasil-degisir.mdson cümlesi robotun programları "çok yıllı veriyle dilimleyerek" gösterdiğini söylüyor; kodda dilim yalnızcaCOALESCE(sira2025, sira2024)'e bakıyor (db.ts:35,risk.ts:23). P3'teki vaat dili temizliğiyle aynı sınıf; düzeltilmesi önerilir.
Blog: ek-yerlestirme-sonuclari-ve-kayit
Yazar: SEO/GEO içerik ajanı · Worktree: .claude/worktrees/rehber-yazilari (dal gece/rehber-yazilari) · Commit atılmadı.
Dosyalar: content/rehber/ek-yerlestirme-sonuclari-ve-kayit.md (yeni, ~1.050 kelime, 1 flowchart TD şema, 1 tablo, 5 SSS, "Kaynaklar" bölümü) · content/rehber/ek-yerlestirme-2026.md (güncellendi).
Özet (5 madde)
- Yazıdaki her kural cümlesi bu gece açılıp okunan resmî belgeye dayanıyor (ÖSYM 2 duyuru + Ek Yerleştirme Kılavuzu PDF + Kontenjan Kılavuzu PDF + ÖSYM SSS PDF + KYGM duyurusu). Haber sitesi kullanılmadı.
- Sonuç tarihi, kayıt tarihi, e-kayıt tarihi ve ek yurt başvuru tarihi açıklanmamış → yazıda dört yerde de "açıklanmadı" yazıyor; tahmin yok, geçen yılın tarihi de yok.
- Boş kontenjan rakamı yazılmadı. 2027'ye dair tarih yazılmadı.
- Parser simülasyonu (node + marked,
rehber.tsregex'leriyle) geçti: frontmatter 3 alan temiz, 1 şema +%% aria+%% altyazi, 1 tablo, 6 iç link.pnpm buildKOŞULMADI (içerik yazarı; worktree'de başka yazarlar çalışıyor). mezuna-kalmak-mi-kayit-olmak-miyazısına link VERİLMEDİ — dosya yazım anında worktree'de yoktu,dynamicParams=falseyüzünden ölü link 404 olurdu. Yazı gelirse "Yerleşemediysen önünde ne var?" bölümüne eklenmeli.
Doğrulanan bilgiler + kaynak
| Bilgi | Kaynak (21.09.2026'da açıldı) |
|---|---|
| Tercih 17 Eylül 16.00 – 21 Eylül 23.59; ais.osym.gov.tr; duyuruda sonuç/kayıt tarihi YOK | https://www.osym.gov.tr/2026-yks-ek-yerlestirme-icin-tercih-islemleri · https://www.osym.gov.tr/2026-yks-ek-yerlestirme-tercihlerin-alinmasi |
| Ücret 170,00 TL; son ödeme 22 Eylül 2026 23.59; ödemeyenin tercihi geçersiz | Ek Yerleştirme Kılavuzu §1 (PDF s.3): https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf (16 Eylül tarihli ...bwch9h-16154905.pdf sürümüyle ilk 9 sayfa diff'lendi: birebir aynı) |
| En fazla 24 tercih; merkezî yerleştirmede yerleştirilen tercih yapamaz; özel yetenekle yerleşen yapabilir; en küçük puana eşit/büyük şartı; dolmayan programı puanı hesaplanan herkes yazabilir | aynı kılavuz §1.1–1.2 |
Sonuç https://sonuc.osym.gov.tr; sonuç belgesi basılmaz/gönderilmez |
aynı kılavuz §3 |
| Kayıt tarihleri sonuç duyurusunda ve sonuç belgesinde; süresinde başvurmayan kayıt hakkını kaybeder | aynı kılavuz §4 |
| Kayıt hakkı kazanılan program sonradan değiştirilemez | aynı kılavuz §2-c |
| Ek yerleştirmeyle yerleşenin de sonraki yıl OBP katsayısı yarıya iner | aynı kılavuz Tablo 3/4 açıklamaları 4-c + Kontenjan Kılavuzu §1.3 ("Ek Yerleştirme ve ÖZYES dâhil") |
| OBP katsayısı 0,12; "yerleştirilen (kayıt olsun veya olmasın)" yarıya | ÖSYM 2026-YKS SSS, soru 50–52: https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf |
| e-kayıt: tüm devlet + isteyen vakıf/KKTC; "Ek yerleştirme için de elektronik kayıt yapılabilecektir"; isteğe bağlı; turkiye.gov.tr → YÖK bölümü; MEB teyidi varsa diploma istenmez, yoksa e-kayıt yapılamaz; sağlık raporu isteyen/özel yetenek programları hariç; barkodlu çıktı; ders kaydına üniversitenin duyurduğu tarihte | Kontenjan Kılavuzu §4 YÖK açıklaması m.1–13 (PDF s.11): https://dokuman.osym.gov.tr/web/2026/8/2026-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu-90wzzd-04155310.pdf (sayfa: https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) |
| Şahsen kayıt belgeleri (diploma aslı/onaylı örnek ya da yeni tarihli mezuniyet belgesi; istenirse 12 adet 4,5×6 fotoğraf; katkı payı/ücret belgesi; üniversitenin ilan ettikleri); bizzat başvuru, posta yok, fotokopi kabul edilmez, eksik belgeyle kayıt yok; aynı anda iki örgün lisans/önlisans olmaz | Kontenjan Kılavuzu §4.1–4.2 |
| "Kesin kayıt sonunda kontenjan açığı kalan programlara ön kayıtla öğrenci alınmayacaktır" | Kontenjan Kılavuzu §3.4 |
| İlk yerleştirme: sonuç 18 Ağustos 2026; kayıt 24–28 Ağustos; e-kayıt 24–26 Ağustos | https://www.osym.gov.tr/2026-yks-yerlestirme-sonuclari-aciklandi |
| KYK: ilk yerleşenler 25–29 Ağustos e-Devlet; "Ek kontenjan öğrencileri… yurt başvuruları ilerleyen tarihlerde yükseköğrenim kayıtları tamamlanmasına müteakip alınacaktır" (tarih yok; duyuru 19.08.2026) | https://kygm.gsb.gov.tr/Duyuru/302551/2026-2027-egitim-ogretim-yili-yurt-basvurularina-iliskin-duyuru.aspx |
| "Diploma notu 80 → 48 puan yerine 24" | deterministik: 80×5×0,12 ve ×0,06 (SSS soru 49–50 formülü) |
Çıkarılan / yazılmayan iddialar
- Sonuç tarihi tahmini ve "kayıt süresi birkaç gündür" (SEO planındaki GEO cümlesi): resmî dayanak yok → yazılmadı. 2025 emsali (ÖSYM: sonuç 6 Ekim 2025, kayıt 10–17 Ekim, e-kayıt 10–12 Ekim — https://www.osym.gov.tr/2025yks-ek-yerlestirme-sonuclari-aciklandi) doğrulandı ama CEO'nun "tahmin yazma" kuralına dolaylı tahmin olarak takılacağı için yazıya KONMADI. Bilal isterse "geçen yıl şöyleydi, bu yıl için tahmin değildir" notuyla eklenebilir.
- Ek yerleşenin yatay geçiş / Ek Madde-1 hakkı (plan tablosundaki satır): YÖK mevzuatı bu gece açılmadı → satır tablodan çıkarıldı.
- Yerleşemeyen için "açıköğretim / ikinci üniversite / DGS dışı yollar" (plan şemasındaki dal): doğrulanmadı → şemada genel "yolları değerlendir" +
yerlesemedim-ne-yapmaliyimlinki. - "KYK ek yurt başvurusu Ekim ortası" beklentisi: yazılmadı; yalnızca KYGM'nin "kayıtlar tamamlanınca, ilerleyen tarihlerde" cümlesi var.
- Boş kontenjan rakamı: yazılmadı (CEO kararı).
- "Ek yerleştirmeden sonra üçüncü şans yok" (eski yazıdaki cümle): bu biçimiyle kılavuzda yok → eski yazıdan çıkarıldı, yerine kılavuzdaki iki kural (program değiştirilemez + OBP) kondu.
- Sonuç ekranına giriş bilgisi (T.C. no + aday şifresi) ek yerleştirme için 2026 belgesinde açıkça geçmediğinden yazılmadı.
ek-yerlestirme-2026.md içinde değişenler
- Frontmatter'a
guncelleme: 2026-09-21eklendi (CEO §2 kararı; mevcut parser fazla anahtarı yok sayıyor —rehber.ts:125-134. Orkestratör "yalnızca mevcut alanlar" dediği için YENİ yazıya eklenmedi; istenmezse bu tek satır silinsin). - "Ek yerleştirme ne zaman?" → "ne zaman yapıldı?": gerçekleşen tarihler (17–21 Eylül, 170 TL, ücret son 22 Eylül 23.59) + evergreen işleyiş paragrafı + yeni yazıya belirgin iç link ("Tercihini yaptıysan…").
- "Kimler başvurabilir?" listesine kılavuzdan özel yetenek maddesi eklendi.
- Taban bölümü: "bu şart esner" muğlak ifadesi kılavuzun net kuralıyla değiştirildi ("en küçük puan"; dolmayan programı puanı hesaplanan herkes yazabilir).
- Strateji: "hazırlığını şimdi yap" → "önceden yap" (eskiyen ifade); "dengeli-garanti" → "dengeli ve güvenli (halk arasında "garanti") tercih" (CEO dil kuralı); "üçüncü şans yok" cümlesi → doğrulanmış kural + OBP yazısına link.
- Şemaya ve boş kontenjan bölümüne dokunulmadı.
Yayın öncesi Bilal'in kontrol etmesi gerekenler
- Önce osym.gov.tr duyurularına bak: sonuç tarihi açıklandıysa ilk paragraf, "ne zaman açıklanacak?" bölümü, tablo (4 hücre) ve SSS-1 güncellenmeli. Yazı "tarih açıklanınca güncelleyeceğiz" diye söz veriyor.
- "Kaynaklar"daki 7 linki aç; özellikle Kontenjan Kılavuzu PDF s.11 (e-kayıt m.1) ve §1.3 (OBP, ek yerleştirme dâhil) cümlelerini gözle teyit et.
tarih: orkestratör talimatıyla2026-09-21yazıldı; CEO notu2026-09-22diyor → yayın gününe göre düzelt (eski yazıdakiguncellemedahil).- Ücret maddesi 22 Eylül 23.59'dan sonra yayımlanacaksa geçmiş zamana çevrilebilir (şu an zamandan bağımsız: "son ödeme zamanı …").
- Başka yazarın dosyasında tutarsızlık (dokunulmadı):
universite-kayit-rehberi-2026.mdbelgeler listesi "vesikalık genelde 4-6 adet" ve "kimlik fotokopisi" diyor; Kontenjan Kılavuzu §4.1 "talep edilirse 12 adet 4,5×6 fotoğraf" diyor ve fotokopi kabul edilmediğini yazıyor. Yeni yazı kılavuzu izliyor; eski yazı hizalanmalı. ek-yerlestirme-2026.md"Boş kontenjanlar nereden çıkar?" bölümündeki "ağırlıklı olarak vakıf… devlet üniversitelerinden şaşırtıcı fırsatlar" cümleleri bu gece doğrulanmadı (eski metin, kapsam dışı bırakıldı).- Mezuna-kalmak yazısı yayımlanırsa yeni yazıdan ona link ekle;
yerlesemedim-ne-yapmaliyimveuniversite-kayit-rehberi-2026yazılarından da yeni yazıya link verilmesi önerilir (o dosyalar başka yazarın).
Engeller
- Makinede
pdftotext/pdftoppmyok; PDF'ler WebFetch'in kendiliğinden kaydettiği kopyalardanpypdfile salt-okunur metne çevrildi (repo dışı, oturum scratchpad'i). Tarayıcıyla dosya indirilmedi.
Blog: mezuna-kalmak-mi-kayit-olmak-mi
Yazar: SEO/GEO içerik yazarı (gece vardiyası) · Dosya: .claude/worktrees/rehber-yazilari/content/rehber/mezuna-kalmak-mi-kayit-olmak-mi.md (dal gece/rehber-yazilari, commit atılmadı, yalnızca bu dosya yazıldı).
Özet (5 madde)
- Yazı hazır: ~1.100 kelime (şema ve Kaynaklar hariç), 1
flowchart TDkarar ağacı (%% aria+%% altyazi), 1 karşılaştırma tablosu (seçenek | kazanç | bedel | kime uygun, 4 satır), 5 soruluk SSS, Kaynaklar bölümü, 8 iç rehber linki +/bolumler+/tercih-robotu. Frontmatter ve mermaid çitisrc/lib/rehber.tsayrıştırıcısıyla aynı regex'lerle node'da doğrulandı; tüm/rehber/*link hedefleri worktree'de mevcut. - Yazının omurgası olan OBP kuralı üç ayrı ÖSYM belgesinden kelimesi kelimesine teyit edildi ("kayıt olsun veya olmasın", "Ek Yerleştirme ve ÖZYES dâhil", "2027-YKS'ye girdikleri takdirde").
- Ek Madde-1 hem mevzuat.gov.tr'deki yönetmelik metninden hem YÖK'ün güncel (PDF üst verisi: 20.05.2026) uygulama ilkelerinden teyit edildi; 28.02.2026 tarihli yönetmelik değişikliğinin Ek Madde 1'e dokunmadığı Resmî Gazete metninden kontrol edildi.
- "Kontenjansız açıköğretim istisnası" 2026 kılavuzlarının hiçbirinde bulunamadı → yazıya alınmadı. Bu cümle mevcut
obp-nedir-nasil-hesaplanir.md:34'te duruyor; Bilal kontrol etmeli (aşağıda). - Askerlik/tecil, "psikolojik yük", sıra farkı eşiği, 2027 tarihi, harç/ücret rakamı yazılmadı. "Garanti/kesin/yerleşirsin/olasılık" dili yok; dilim adı ilk geçişte "güvenli (halk arasında "garanti tercih")".
Doğrulanan bilgiler ve kaynakları (hepsi 21.09.2026 gecesi açılıp okundu)
| Yazıdaki iddia | Kaynak | Not |
|---|---|---|
| 2026-YKS ile merkezî yerleşen (ek yerleştirme ve ÖZYES dâhil) ya da özel yetenekle kayıt olan aday 2027-YKS'ye girerse OBP katsayıları yarıya düşer | 2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu §1.3 (s. 1) — https://dokuman.osym.gov.tr/web/2026/8/2026-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu-90wzzd-04155310.pdf (sayfa: https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) | PDF metni pypdf ile çıkarılıp okundu |
| "kayıt olsun veya olmasın" — kayıt yaptıran (soru 51) ve yaptırmayan (soru 52) için aynı cevap; OBP = diploma notu × 5; katsayı 0,12 | ÖSYM 2026-YKS SSS, soru 49–52 — https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf | Doğrudan osym alan adından |
| Aynı kural + 0,12 katsayısı; kayıtlı olmak YKS tercih/yerleştirmesine engel değil; aynı anda iki örgün lisans/ön lisans olmaz, yeni kayıt için ilişik kesmek gerekir | 2026-YKS Kılavuzu §4.2 (s. 32–33) ve §10 (s. 45) — sayfa: https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu | Dikkat: ÖSYM'deki asıl PDF (basvuru_kilavuz06022026.pdf) 10 MB sınırını aştığı için açılamadı; metin aynı kılavuzun MEB alan adındaki kopyasından okundu: https://stuttgartegitim.meb.gov.tr/meb_iys_dosyalar/2026_02/699ed94726fa9432366760_YKS_s%C4%B1nav_k%C4%B1lavuzu.pdf (YÖK Genel Kurul 05/02/2026 ibareli). §4.2 cümlesi SSS 51–52 ile birebir aynı |
| Yerleştirilen aday ek yerleştirmede tercih yapamaz; "devam etmeyi düşünmediğiniz programı yazmayınız" uyarısı; süresinde kayıt olmayan kayıt hakkını kaybeder | 2026-YKS Ek Yerleştirme Kılavuzu §1.2 ve tercih uyarıları — https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf | |
| Ana yerleştirme kayıtları 24–28 Ağustos 2026 | Kontenjan Kılavuzu §4 | |
| Ek Madde 1: kayıt olunan yıldaki puan ≥ hedef programın taban puanı; hazırlık dâhil; kontenjan fazlasında puan sırası | Yönetmelik Ek Madde 1 — https://www.mevzuat.gov.tr/anasayfa/MevzuatFihristDetayIframe?MevzuatTur=7&MevzuatNo=13948&MevzuatTertip=5 (yazıda YÖK'ün verdiği eşdeğer link: mevzuat?MevzuatNo=13948&MevzuatTur=7&MevzuatTertip=5) |
WebFetch sertifika hatası verdi; sayfa curl ile (sertifika doğrulaması açık) alınıp okundu |
| Kayıt yaptırmış olma şartı; hedefin "girdiği yıldaki" tabanı; puan türü; bir defa; kayıt yılının güzünde başvuru yok, bahar üniversite kararına bağlı; %30 / en fazla 90 kontenjan; başarı şartı yok | YÖK "Güz ve Bahar Dönemi Ek Madde 1 Uygulama İlkeleri" A.1–2, 5–8, 11, 20 ve B girişi, B.6 — https://egitim.yok.gov.tr/tr/document/2853 (bağlayan sayfa: https://egitim.yok.gov.tr/tr/page/492) | |
| 28.02.2026 değişikliği Ek Madde 1'i değiştirmedi | Resmî Gazete 33182 — https://www.resmigazete.gov.tr/eskiler/2026/02/20260228-3.htm | Yazıda anılmıyor; yalnızca güncellik kontrolü |
| Kayıt dondurma üniversite yönetmeliğine bağlı (örnek: son başvuru günü, dondurulan yarıyılda ders yok, süre öğrenimden sayılmaz) | Karabük Üni. yönetmeliği md. 27 — https://www.mevzuat.gov.tr/anasayfa/MevzuatFihristDetayIframe?MevzuatTur=8&MevzuatNo=38896&MevzuatTertip=5 | Yazıda açıkça "örnek" diye etiketli; genelleme yapılmadı |
| 70 → 21, 85 → 25,5, 95 → 28,5 puan kayıp; aralık 15–30 | Deterministik: not × 5 × 0,06 (formül SSS 49–50) |
Çıkarım olan tek cümle: "Kaydı sonradan sildirmek ya da dondurmak da bedeli silmez." Kılavuzda bu kelimelerle yazmıyor; kuralın yerleştirmeye bağlı olmasından ve "kayıt olsun veya olmasın" ifadesinden çıkarıldı. Bilal uygun görmezse o madde + 2. SSS sorusu birlikte silinebilir, yazı bozulmaz.
Çıkarılan / yazılmayan iddialar
- Kontenjansız açıköğretim istisnası (plan ve CEO doğrulama listesi ii): kontenjan kılavuzunun 775 sayfasının tamamında, YKS kılavuzunda ve SSS'de "yarıya / kontenjan sınırlaması / açıköğretim + OBP" taraması yapıldı, böyle bir hüküm çıkmadı → yazılmadı.
- "Kırık OBP kaç yıl sürer / bir yıl ara verince düzelir": kılavuz yalnızca bir önceki yılın yerleştirmesini sayıyor; yazıda yalnızca bu gözlem var ("sonraki yıllar için o yılın kılavuzu belirleyici"). "Bir yıl sonra tam OBP'ye döner" cümlesi kurulmadı.
- Ek Madde-1 güz başvuru tarihleri (YÖK ilkesinde 1–15 Ağustos yazıyor): CEO'nun "2027'ye dair tarih yok" kuralı gereği yazıya alınmadı; "takvimi üniversite duyurur" denildi.
- Kayıt dondurulmuşken Ek Madde-1'e başvurulup başvurulamayacağı; "YKS'ye hazırlık" gerekçesinin dondurma için kabul edilip edilmediği: kaynak yok → yazılmadı.
- Askerlik/tecil (kontenjan kılavuzunda geçiyor ama CEO yasağı), öğrencilik hakları/KYK, harç ve ücret rakamları, "psikolojik yük", "X bin sıra farkı" eşiği, plan taslağındaki "fark küçük/büyük" şema dalı: yazılmadı. Yerine eşiksiz bir soru listesi ve
/bolumler+hedef-siralama-nasil-belirlenirlinki kondu.
Yayın öncesi Bilal'in kontrol etmesi gerekenler
- Kaynaklar bölümündeki linkleri aç, üç kural cümlesini gözle teyit et: Kontenjan Kılavuzu §1.3; SSS soru 51–52; YÖK Ek Madde 1 ilkeleri A.5–A.8 ve B.6. Özellikle 2026-YKS Kılavuzu'nun ÖSYM'deki asıl PDF'inde §4.2 ve §10'u kontrol et (ben MEB kopyasından okudum).
- Mevcut yazıdaki teyitsiz cümle:
obp-nedir-nasil-hesaplanir.md:34"(kontenjansız açıköğretim programları bu kuralın dışındadır)" — 2026 kılavuzlarında karşılığını bulamadım. Kaynağı yoksa silinmeli. Ben dokunmadım. - Mevcut yazıyla ince fark:
yerlesemedim-ne-yapmaliyim.mdYol 2 "başvuru, yerleştiğin yıl içinde değil…" diyor; YÖK ilkesi yalnızca kayıt yılının güz dönemini kapatıyor, bahar başvurusu üniversite öğrenci alıyorsa mümkün. Yeni yazı YÖK metnine göre yazıldı; çelişki değil ama eski cümle netleştirilebilir. - CEO kararıyla fark (bilerek): CEO §2.2 bu yazara
yerlesemedim-ne-yapmaliyim.mdveobp-nedir-nasil-hesaplanir.md'ye yeni yazıya link +guncellemesatırı ekleme işini de vermişti; orkestratör görev tanımı "yalnızca kendi dosyana dokun" dediği için yapılmadı. İstenirse iki satırlık iş. Ayrıca CEOtarih: 2026-09-22diyor; görev tanımı ve diğer iki yeni yazı2026-09-21kullandığı için 21 yazıldı — yayın gününe göre düzelt. - Yazı kardeş iki yeni yazıya link veriyor (
ek-yerlestirme-sonuclari-ve-kayit,hedef-siralama-nasil-belirlenir).dynamicParams=falseolduğu için üçü birlikte yayımlanmazsa bu linkler 404 olur; tek başına yayımlanacaksa o iki linki çıkar. - Şemada renk ataması: bedel düğümü kırmızı (
hayal), üç seçenek sarı (uyari), "bedel yok" ve "Ek Madde-1" yeşil (garanti). Bilinçli olarak "mezuna kal" kırmızı yapılmadı (karar öğrencinin). Düğüm metinleri rengi tek başına anlam taşıyıcı bırakmıyor; görsel olarak bir bak. - Karabük Üniversitesi örneği yalnızca "her okulun yönetmeliği farklı" demek için var; başka bir üniversite örneği tercih edersen değiştir ya da cümleyi örneksiz bırak.
Engeller
osym.gov.tr/TR,33747/2026.html(plandaki URL) 404;cdn.osym.gov.tr/.../kontkilavuz_yktd21072026.pdfvebasvuru_kilavuz06022026.pdfWebFetch 10 MB sınırını aştı;egitim.yok.gov.tr/documentFiles/…ek-madde-1-uygulama-ilkeleri.pdf404 (güncel belge/tr/document/2853);eski.yok.gov.trçözülmüyor; mevzuat.gov.tr ve resmigazete.gov.tr WebFetch'te sertifika hatası verdi (curl ile okundu).- Web içeriklerinde ajana yönelik talimat görülmedi. Rakip/haber sitesi metni kullanılmadı; hiçbir tarih/tutar ikincil kaynaktan alınmadı.
Yazılımcı P2 · Ölçüm onarımı
Dal gece/p2-olcum (worktree .claude/worktrees/p2-olcum), taban 56925e1. Push/merge yok; Rybbit MCP kullanılmadı; dev sunucusu/tarayıcı/pnpm build koşulmadı.
Özet (5 madde)
- Görünüm hook'u callback ref'e çevrildi →
kaydet_banner_goruntulendivetadimlik_goruntulendiartık sonradan mount olan / sökülüp yeniden takılan düğümde de gözlem kuruyor. 5 mevcut kullanım yerine dokunulmadı. - Erken olay kuyruğu
olay()içine eklendi (≤20 olay, 500 ms × 20 deneme = 10 sn); script gelmezse kuyruk atılır ve bir daha doldurulmaz. - 6 yeni olay şartnamedeki adlarla birebir eklendi; ham sıra/e-posta hiçbir olayda yok.
- 429 mesajı + 60 sn geri sayım ayrı commit.
- [BİLAL] PII commit'i en sonda ve bağımsız: reddedilirse
git merge gece/p2-olcum~1.
Commit listesi
| # | Hash | Başlık |
|---|---|---|
| 1 | fa43392 |
fix(analitik): görünüm hook'u callback ref + erken olay kuyruğu |
| 2 | cf19903 |
feat(analitik): huni olayları |
| 3 | e1bb482 |
fix(giris): 429 mesajı + 60 sn geri sayım |
| 4 | c055e82 |
chore(gizlilik): rybbit identify yalnız kullanıcı ID — [Bilal onayı gerekir] |
Her commit'ten önce çalışma ağacı temizdi ve tsc --noEmit + pnpm lint o commit'in içeriğiyle koşuldu (yani ~1 de tek başına derleniyor).
Değişen dosyalar (13; hepsi P2 sahiplik listesinde)
src/components/use-gorunum-olayi.ts · src/lib/analitik.ts · src/features/sihirbaz/components/{hero-form,cta-sira-form,sihirbaz-cagri-karti}.tsx · src/features/liste/components/tercih-profili-kapisi.tsx · src/features/kullanici/components/{giris-form,user-nav}.tsx · src/features/rapor/components/{liste-uretici,listem-govde}.tsx · src/app/paket/layout.tsx (yeni) · src/features/odeme/components/paket-gorunum-olayi.tsx (yeni) · src/components/rybbit-identify.tsx. kaydet-banner.tsx ve tadimlik-satiri.tsx değişmedi (beklendiği gibi).
Olay tablosu
| Olay | Nerede atılıyor | Özellikler |
|---|---|---|
cta_form_goruntulendi (yeni) |
cta-sira-form.tsx — yalnız profilsiz daldaki <section>, viewport'a ilk girişte (hook), oturum başına 1 |
yok (sayfa = Rybbit pathname) |
sira_form_hata (yeni) |
hero-form.tsx, cta-sira-form.tsx, tercih-profili-kapisi.tsx — facet isteğinin catch dalı; geçersiz sayı doğrulaması sayılmaz |
kaynak: hero | cta | kapi | duzenle |
sonuc_goruntulendi (yeni) |
sihirbaz-cagri-karti.tsx SihirbazBolumu mount effect'i, olayBirKez (ek: girisli/anonim) |
girisli: evet|hayir, sira_kovasi |
paket_goruntulendi (yeni) |
paket-gorunum-olayi.tsx (yeni src/app/paket/layout.tsx üzerinden), olayBirKez (ek: kaynak) |
kaynak: kilit | kredi_bitti | nav | diger |
liste_uretim_hata (yeni) |
liste-uretici.tsx — else dalı ve catch; AUTH/KREDI/PAKET atmaz |
kod: HATA | ISTISNA |
giris_hata (yeni) |
giris-form.tsx — magic link ve Google hata dalları |
yontem: eposta|google, status (HTTP; yoksa 0) |
kaydet_banner_goruntulendi (onarıldı) |
kaydet-banner.tsx (değişmedi; hook düzeldi) |
yok |
tadimlik_goruntulendi (onarıldı) |
tadimlik-satiri.tsx (değişmedi; hook düzeldi) |
kova |
/paket linklerine eklenen kaynaklar: listem-govde.tsx iki kilit CTA'sı → ?kaynak=kilit; liste-uretici.tsx kredi-yetersiz → ?kaynak=kredi_bitti; user-nav.tsx kredi pill'i → ?kaynak=nav.
Kabul kriterleri
| Kriter | Sonuç | Kanıt |
|---|---|---|
| typegen + tsc + lint temiz | geçti | pnpm exec next typegen exit 0; pnpm exec tsc --noEmit exit 0 (4 commit'in her birinde); pnpm lint çıktısız |
grep -rn "useGorunumOlayi" src → mevcut 5 + cta-sira-form |
geçti | çağrılar: tadimlik-satiri:100, listem-govde:139,144, sihirbaz-cagri-karti:248, kaydet-banner:43, cta-sira-form:80 (+ analitik.ts:125'te yalnız yorum) |
grep -rnE "olay(BirKez)?\(" src | grep -iE "email|eposta:|sira:" → boş |
geçti | grep exit 1 (eşleşme yok); sıra yalnız siraKovasi() ile |
| Olay adları listeyle birebir | geçti | analitik.ts OlayAdi: cta_form_goruntulendi, sira_form_hata, sonuc_goruntulendi, paket_goruntulendi, liste_uretim_hata, giris_hata |
Hook null→düğüm geçişinde gözlem kuruyor, sökülünce disconnect |
geçti (kod incelemesi) | use-gorunum-olayi.ts: useCallback((el) => {…; io.observe(el); return () => io.disconnect(); }, [ad, anahtarEki]) — gözlem effect'te değil ref bağlanınca kurulur; React 19 ref temizliği sökülmede çalışır |
| [BİLAL] commit ayrı ve en sonda | geçti | c055e82 HEAD; yalnız rybbit-identify.tsx + user-nav.tsx:47; analitik.ts'e dokunmuyor |
Çalıştırılarak (tarayıcıda) doğrulanan hiçbir şey yok — protokol gereği; yukarıdaki davranış iddiaları kod incelemesine dayanır.
Şartnameden sapmalar / notlar
- Küçük ek:
analitik.ts'eexport function olayAnahtari(ad, anahtarEki?)eklendi. Şartname "anahtar mantığının aynısı" diyordu; hook'un ön kontrolü ileolayBirKezaynı anahtar biçimini iki yerde elle yazmasın diye tek fonksiyona alındı. Anahtar biçimi değişmedi (kolaytercih.olay.<ad>[.<ek>]) → mevcut oturumlardaki tekilleştirme bozulmaz. - Kuyruk ayrıntıları (şartnamede açık olmayan yerde en güvenli yorum): script 10 sn'de gelmezse kuyruk atılır ve
kuyrukKapaliolur — sonraki olaylar eski sessiz no-op'a döner (reklam engelleyicide her olay yeni 10 sn'lik zamanlayıcı başlatmasın). Script daha geç gelirse sonraki olaylar doğrudan gider (ilkwindow.rybbitkontrolü). Sıra korunur: script geldikten sonra ilkolay()çağrısı önce bekleyenleri boşaltır. cta_form_goruntulendive kayıtlı profil: SSR/hydration'da profilsiz dal render edilir, profiluseSyncExternalStoreile aynı görevde senkron yeniden render'la gelir; iki dal aynı<section>düğümünü paylaştığından ref düşer →disconnect. IntersectionObserver ilk bildirimi asenkron verdiği için profilli ziyaretçinin sayılmaması beklenir — çalıştırılarak doğrulanmadı; Rybbit'te bu olayınsira_girildi{kaynak:cta}'ya oranı anormal düşükse ilk bakılacak yer.- Kapsam dışı bırakılan gözlem:
kullaniciTanit()da script yokken sessiz no-op; sert yüklemede (OAuth dönüşü) identify kaçabilir. Şartname kuyruğu yalnızolay()için tanımladığından dokunulmadı → backlog adayı. liste_uretim_hata.kodbugün fiilen yalnızHATA/ISTISNAalır (alt neden CTO backlog #5).- Sihirbaz/listeleme davranışı değişmedi →
huni-semasi.tsxSEMAgüncellenmedi. Yeni CTA/badge/modal eklenmedi.
Bilal'in merge sonrası Rybbit'te doğrulaması gerekenler
- Olay adları panelde görünüyor mu: yukarıdaki 6 yeni ad +
kaydet_banner_goruntulendivetadimlik_goruntulendi> 0.tadimlik_goruntulendihâlâ 0 ise önce prodtadimlik_havuzu(bellek notu: deploy sonrasıpnpm tadimlik). - Sert yükleme testi: gizli sekmede
/paket?kaynak=nav'ı doğrudan aç →paket_goruntulendi{kaynak:nav}düşmeli (kuyruk kanıtı). Aynı sekmede yenileyince ikinci kayıt düşmemeli. - Banner: girişsiz, listeye eşik kadar program ekle →
kaydet_banner_goruntulendi1 kez. sonuc_goruntulendi: anonim gir → 1 kayıtgirisli:hayir; giriş yapıp /sonuc'a dön → ikinci kayıtgirisli:evet. Özelliklerde ham sıra olmamalı, yalnızsira_kovasi.giris_hata: 5'ten fazla hızlı magic-link isteği →status:429+ yeni toast metni; "Yeniden gönder" sayacı 60'tan başlıyor.- [BİLAL]
c055e82kararı: alınırsa yeni oturumlarda kullanıcı profilindeemail/nametrait'i gelmemeli; eski kayıtlı trait'ler Rybbit'te durur — panelden ayrıca silinmeli. Alınmazsagit merge gece/p2-olcum~1. - Huni tanımı (Rybbit'te Bilal kurar):
cta_form_goruntulendi/ pageview →sira_girildi→sihirbaz_tamamlandi→sonuc_goruntulendi→giris_denendi→liste_olusturuldu→paket_goruntulendi→odeme_baslatildi.
Rehber iç link ve düzeltmeler
Editör: SEO/GEO içerik editörü · Worktree .claude/worktrees/rehber-yazilari, dal gece/rehber-yazilari · Commit 0ec3907 (yalnız content/rehber/*.md, 8 dosya; push yok, pnpm build koşulmadı — src/ değişmedi).
Özet (5 madde)
- Üç yeni yazı artık yetim değil: her biri 4 yazıdan link alıyor (
ek-yerlestirme-sonuclari…← ek-yerlestirme-2026, mezuna, kayıt rehberi, yerlesemedim ·mezuna-kalmak…← ek-sonuçları, hedef, obp, yerlesemedim ·hedef-siralama…← kac-siralama, mezuna, taban-puan, taban-siralamalar). Yazı başına en fazla 2 yeni link. universite-kayit-rehberi-2026belge listesi Kontenjan Kılavuzu §4.1–4.2'ye göre yeniden yazıldı ("4-6 vesikalık" ve "kimlik fotokopisi" kalktı); teyit edilemeyen kalemler "üniversitenin kayıt duyurusu" diye genellendi.taban-siralamalar-nasil-degisirson paragrafı ürünün gerçek kuralına çekildi: dilim = tek yılın tabanı (COALESCE(sira2025, sira2024)); geçmiş yıllar yalnızca satırda gösterim.obp-nedir…"kontenjansız açıköğretim" istisnası 2026 belgelerinin hiçbirinde YOK → cümle çıkarıldı; yerine kılavuzda gerçekten yazan tek istisna (zamanında mezun olamadığı için kayıt yaptıramayanlar) kondu.- Ölü link taraması: 27 yazıda 56 farklı iç link, 0 ölü. 30
/bolum/<slug>hedefiyokatlas.db'deki (salt-okunur) 635 bölüm slug'ına karşı doğrulandı.
Dosya bazında değişiklikler
| Dosya | Değişiklik | guncelleme |
|---|---|---|
universite-kayit-rehberi-2026.md |
e-kayıt paragrafı YÖK açıklamasına hizalandı (tüm devlet + isteyen vakıf/KKTC; isteğe bağlı; MEB teyidi → diploma istenmez; özel yetenek/sağlık raporu programları hariç; e-kayıt yapan ders kaydına duyurulan belgelerle gider). Belge listesi §4.1'e göre: diploma aslı/onaylı örnek ya da yeni tarihli mezuniyet belgesi · istenirse 12 adet 4,5×6 fotoğraf · katkı payı/ücret belgesi · ek puan için alan belgesi · üniversitenin ilan ettiği diğerleri. §4.2 kuralları eklendi (bizzat, posta yok, fotokopi/onaysız suret kabul edilmez, eksik belgeyle kayıt yok; sağlık raporu yalnız koşullarda yazıyorsa). Yeni H2 "Ek yerleştirmeyle yerleştiysen" → ek-yerlestirme-sonuclari-ve-kayit linki. ozel-kosullu-programlar linki. "Kaynaklar" bölümü eklendi. |
eklendi |
obp-nedir-nasil-hesaplanir.md |
Açıköğretim parantezi silindi; ek yerleştirme + özel yetenek kapsamı ve mezun olamayan istisnası yazıldı; mezuna-kalmak… linki; "Kaynaklar" bölümü. |
eklendi |
taban-siralamalar-nasil-degisir.md |
Son paragraf: "çok yıllı veriyle dilimleyerek" → "son yılın tabanına göre (2025; yoksa 2024) dilimler, geçmiş yılları satırda gösterir; filmi sen okursun" + hedef-siralama… linki. Dilim adı CEO kuralıyla: güvenli (halk arasında "garanti"). |
eklendi |
yerlesemedim-ne-yapmaliyim.md |
Yol 1 sonuna ek-yerlestirme-sonuclari…, Yol 3 girişine mezuna-kalmak… linki. |
eklendi |
kac-siralama-ile-hangi-bolume-girebilirim.md |
"Bu tabloyu nasıl kullanmalısın?" listesine 4. madde: hedef-siralama… linki. |
eklendi |
taban-puan-mi-siralama-mi.md |
Kapanıştan önce tek cümle: hedef-siralama… linki. |
eklendi |
ek-yerlestirme-sonuclari-ve-kayit.md |
"Kayıt yaptırmazsan ne olur?" sonuna mezuna-kalmak… linki. |
yok (yeni yazı) |
hedef-siralama-nasil-belirlenir.md |
Deneme bölümü 3. maddeye OBP yarıya inme hatırlatması + mezuna-kalmak… linki (yazarın kendi önerisi). |
yok (yeni yazı) |
Teyitler (hepsi 21.09.2026 gecesi açıldı; PDF metni WebFetch'in kaydettiği kopyadan pypdf ile okundu)
| İddia | Kaynak |
|---|---|
| §4.1 belge listesi (a–e), "talep edilmesi durumunda 12 adet 4,5 cm x 6 cm fotoğraf"; §4.2 a–d (bizzat/posta yok, "onaysız sureti veya fotokopisi kabul edilmez", eksik belge, sağlık raporu yalnız koşullarda); kayıt 24–28 Ağustos, e-kayıt 24–26 Ağustos; YÖK e-kayıt açıklaması m.1, 2, 5, 6, 7, 8, 10, 13 | Kontenjan Kılavuzu PDF s.11–13: https://dokuman.osym.gov.tr/web/2026/8/2026-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu-90wzzd-04155310.pdf |
| Ek yerleştirmede kayıt tarihleri sonuç duyurusunda/sonuç belgesinde | Ek Yerleştirme Kılavuzu (ilk 9 sayfa): https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf |
| OBP yarıya düşme: "(Ek Yerleştirme ve ÖZYES dâhil) veya özel yetenek sınavıyla… kayıt olan" | Kontenjan Kılavuzu §1.3. Kılavuzun 775 sayfasının tamamı "yarıya / kontenjan sınırlaması / kontenjansız" için tarandı: 4 eşleşme (s.3, 17, 20, 142), hiçbirinde açıköğretim istisnası yok |
| "kayıt olsun veya olmasın"; 0,12 | ÖSYM SSS soru 50–52: https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf (12 sayfa tarandı; açıköğretim yalnız lise bağlamında geçiyor) |
| Tek istisna: lise son sınıfken yerleşip zamanında mezun olamadığı için kayıt yaptıramayanların katsayısı düşmez | 2026-YKS Kılavuzu §4.2 (PDF s.38/147). Dikkat: ÖSYM'deki asıl PDF (basvuru_kilavuz06022026.pdf, sayfa https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu açıldı, link doğrulandı) 10 MB sınırı yüzünden okunamadı; metin ÖSYM e-imza ibareli MEB kopyasından okundu (mezuna yazarının kullandığı aynı URL). Bilal asıl PDF'te §4.2'ye bir göz atsın |
| Ürün kuralı | src/lib/risk.ts:22-37 (riskHesapla, eşik Math.round(adaySira*1.4)), src/lib/db.ts:35 (EFEKTIF_SIRA = COALESCE(sira2025, sira2024)), db.ts:57-65 (dilimAraligi). Çok yıllı veri yalnız gösterim/trend: src/components/program-liste-verileri.tsx:36-40, src/lib/ai/rapor.ts:139-162 |
Teyit edilemeyen / genellenen / dokunulmayan
- Kayıt rehberinden çıkarılan kalemler: "ÖSYS sonuç belgesi çıktısı", "kimlik + fotokopisi", "vesikalık 4-6 adet", "ikinci öğretim/vakıf ilk taksit dekontu". Kılavuz listesinde yoklar; üniversiteler isteyebilir → "üniversitenin ilan ettiği diğer belgeler, kayıt duyurusuna bak" diye genellendi (kimlik ve sonuç belgesi yalnızca örnek olarak anılıyor, zorunlu denmiyor).
- e-Devlet hizmet adı "Üniversite E-Kayıt" eski metinden kaldı; kılavuz yalnızca "turkiye.gov.tr → Yükseköğretim Kurulu Başkanlığı bölümü" diyor. Hizmet adı bu gece doğrulanmadı.
- Aynı yazıdaki şema + başlık "belge yok, sıra yok, 5 dakika" diyor; e-kayıt anı için doğru ama ders kaydında belge istenebildiği artık gövdede yazıyor. Şemaya dokunulmadı (Bilal isterse "5 dakika" ifadesi yumuşatılabilir — kaynağı yok).
yerlesemedim-ne-yapmaliyim.mdYol 2'deki "başvuru, yerleştiğin yıl içinde değil…" cümlesi (mezuna yazarının notu: YÖK ilkesi yalnız güz dönemini kapatıyor) — YÖK belgesi bu gece benim tarafımdan açılmadı, görev kapsamında değildi → dokunulmadı.taban-siralamalar…şeması ve gövdesi "dört yıl / son 4 yıl" diyor; DB ve yenihedef-siralamayazısı 5 yıl (2021–2025). Okuma tavsiyesi olduğu için yanlış değil ama P3'teki "4→5 yıl" temizliğiyle birlikte şema + aria + gövde tek seferde hizalanmalı (şemaya bu gece dokunulmadı).ek-yerlestirme-2026.md"Boş kontenjanlar nereden çıkar?" bölümündeki doğrulanmamış cümleler (önceki yazarın notu) hâlâ duruyor.guncellemetarihi görev talimatı gereği2026-09-21; CEO notu2026-09-22diyor → yayın gününe göre 7 dosyada topluca düzeltilebilir (grep -l "^guncelleme:" content/rehber/*.md).
Ölü link taraması (yöntem)
](/…) kalıbındaki tüm iç linkler çıkarıldı: /rehber/<slug> → content/rehber/<slug>.md var mı; diğerleri → src/app/<segment> var mı. Kullanılan segmentler: rehber, bolum, bolumler, meraklisina, tercih-robotu (next.config.ts:77 kalıcı redirect → /#hero-form). /bolum/* için slug, src/lib/slug.ts bolumSayfaSlug kuralı Python'da yeniden üretilip programs.isim değerlerinden türetilen kümeyle karşılaştırıldı: 30/30 mevcut. Web içeriklerinde ajana yönelik talimat görülmedi.
Yazılımcı P1 · Rehber altyapısı
Worktree .claude/worktrees/p1-rehber-altyapi · dal gece/p1-rehber-altyapi (taban 56925e1) · push/merge yok.
Özet (5 madde)
- Şartnamedeki 6 değişikliğin tamamı 3 commit'te uygulandı; yalnız P1'e atanmış 6 dosyaya dokunuldu,
content/vehuni-semasi.tsxdeğişmedi. - Şema metni artık sunucu HTML'inde: rehber makalelerinde ve
/meraklisina'da<details>"Şemayı metin olarak oku" +ariaLabelmetni build çıktısında grep ile doğrulandı (baseline 0 → 1). "Üst sıraya…"ile başlayan iki açıklamanın baştaki tırnağı geri geldi (content=""…).guncellemealanı uçtan uca akıyor (sitemap lastmod,/rehberdizini lastmod, JSON-LDdateModified,article:modified_time, görünür satır) — geçici bir frontmatter eklemesiyle build'de görüldü, commit'lenmeden geri alındı.- typegen + tsc + lint temiz;
pnpm build3 kez koştu (HEAD, geçiciguncellemetesti, tekrar temiz HEAD), üçü de exit 0. Env'siz koştu — yalnız better-auth "default secret" uyarısı basıyor, build'i kırmıyor.
Commit'ler
| Hash | Başlık |
|---|---|
a9ea0bf |
fix(rehber): frontmatter tırnak + tablo sarmalayıcı |
d9e125c |
feat(rehber): guncelleme alanı → sitemap/JSON-LD/OG/görünür tarih |
1a75f42 |
fix(rehber): şema metni SSR'da + mermaid hata toparlama |
Değişen dosyalar (git diff --stat main..HEAD: 6 dosya, +179 / −41)
src/lib/rehber.ts—tirnakSoy(),markdownHtml()(tablo sarmalayıcı),RehberOzet.guncelleme?,metaDogrulatarih biçimi +guncelleme >= tarihdenetimi,oku()/ozetOku()(cache kırpma dalı dahil) alanı taşıyor; "10 makale" yorumu düzeltildi.src/lib/tarih.ts(yeni) —trTarih();Date/toLocale*yok, biçim uymazsathrow.src/lib/seo.tsx— yalnızarticleJsonLd:dateModified?, çıktıdadateModified ?? datePublished.src/features/rehber/components/rehber-makale.tsx— OGmodifiedTime, JSON-LDdateModified, "Yayın: … · Güncelleme: …" düz metin satırı,[&_.rehber-tablo]:mt-4 [&_.rehber-tablo]:overflow-x-auto.src/app/sitemap.ts— yazılastModified: guncelleme ?? tarih;/rehbergirdisi fonksiyon içine alındı, lastmod = en büyük tarih.src/features/rehber/components/el-cizimi-sema.tsx—hatastate,.catch(geçici#d<id>div temizliği),suppressErrorRendering: true, hata dalında iskelet yok,<details open={hata || undefined}>.
Kabul kriterleri (hepsi temiz HEAD build'inde, .next/server/app/…)
| # | Kriter | Sonuç | Kanıt |
|---|---|---|---|
| 1 | grep -c "Şemayı metin olarak oku" rehber/tercih-listesi-nasil-yapilir.html ≥ 1 |
geçti | 1 |
| 2 | aynı dosyada "Tercih listesi dilim şeması" ≥ 1 |
geçti | 1 |
| 3 | meraklisina.html'de "Sihirbaz akış şeması" ≥ 1 |
geçti | 1 |
| 4 | description " ile başlar (2 dosya) |
geçti | content=""Üst sıraya yazarsam şans · content=""Geçen yıl 90 bin kapatmı |
| 5 | rehber-tablo sarmalayıcı |
geçti | tablolu 2 yazıda <div class="rehber-tablo" role="region" aria-label="Tablo" tabindex="0"><table> sayısı = <table> sayısı = </table></div> sayısı (kac-siralama…: 2/2/2, siralama-sartlari-2026: 1/1/1). Not: kriterde adı geçen iki yazıda tablo yok; sınıf adı orada yalnız Tailwind seçici metninde geçer, bu yüzden tablolu yazılarda ölçüldü. |
| 6 | Yayın: + <time dateTime="2026- |
geçti | Yayın: <time dateTime="2026-07-26">26 Temmuz 2026</time> |
| 7 | sitemap /rehber <lastmod> |
geçti | <lastmod>2026-08-07</lastmod> (= en yeni tarih) |
| 8 | geçici guncelleme: 2026-09-22 testi |
geçti | "datePublished":"2026-07-26","dateModified":"2026-09-22" · article:modified_time content="2026-09-22" · · Güncelleme: <time dateTime="2026-09-22">22 Eylül 2026</time> · sitemap'te hem yazı hem /rehber lastmod 2026-09-22. Sonra git checkout -- content/…, git status temiz, tekrar build → Güncelleme: 0, dateModified 2026-07-26. |
| 9 | kod incelemesi: .catch var, hata dalında iskelet yok, details açık |
geçti | el-cizimi-sema.tsx: svg ? … : hata ? null : <iskelet>; open={hata || undefined} |
tsc / lint / build: next typegen ✓ · tsc --noEmit 0 hata (her commit öncesi) · pnpm lint temiz · pnpm build exit 0 ×3. Tek Turbopack uyarısı baseline'da da olan Cal Sans font fallback uyarısı. Build data/ altını kirletmedi (git status temiz). .next/ şu an temiz HEAD build'i.
Şartnameden sapmalar / yorumlar
- Kriter 4'te CTO "aynısı (
"Üst sıraya)" demiş;taban-siralamalar…açıklaması"Geçen yıl…diye başlıyor. Kastedilen baştaki tırnağın korunması — o geçti. metaDogrulaassert tipineguncelleme?: stringeklendi (yoksa tscoku()'da alanı görmüyor). Boşguncelleme:satırı da biçim hatası sayılır (build kırar)./rehbersitemap girdisi artıkstaticEntries'ten hemen sonra geliyor (sıra değişmedi sayılır; yalnız/paket… satırlarının arkasına kaydı). Hiç yazı yoksalastModifiedundefinedkalır.- Hata anında mermaid'in geçici div'i için
document.getElementById("d" + semaId)kullanıldı (mermaid 11.16mermaid.core.mjs:1248ile doğrulandı).
Bilal merge öncesi elle baksın
- Rehber makalesi +
/meraklisina: figcaption altındaki "Şemayı metin olarak oku" satırının görünümü/konumu (kapalı<details>, küçük gri metin). Ekran okuyucuda metin iki kez okunabilir (CEO kabul etti). - Mobilde tablolu bir yazı (
/rehber/kac-siralama-ile-hangi-bolume-girebilirim): tablo sayfayı taşırmadan kendi içinde yatay kayıyor mu;tabindex="0"odak halkası kabul edilebilir mi. - Başlık altındaki "Yayın: 26 Temmuz 2026" satırının aralığı (
mt-3 text-xs). - Hata yolu gerçek tarayıcıda denenmedi (dev/tarayıcı yasak): DevTools'ta
mermaidchunk isteğini bloklayıp iskeletin kalktığını ve metnin açık geldiğini bir kez görmek yeter. - Yazar dalı merge edilirken: yeni
.mddosyalarındatarih/guncellemeYYYY-AA-GGdeğilse build artık kırılır (istenen davranış); P1 yazar dalından önce merge edilirseguncellemealanı sessizce yok sayılmaz.
Yazılımcı P3 · Vaat dili
Worktree .claude/worktrees/p3-vaat-dili · dal gece/p3-vaat-dili · taban 56925e1 · push/merge yok, build koşulmadı (CTO itirazı #8), script/DB yazımı yok.
Özet (5 madde)
- 4 commit, şartnamedeki bölünmeyle: 1 + 1b [KARAR], 2 ve 3 [BİLAL]. Yalnız P3'e atanmış 12 dosyaya dokunuldu (
seo.tsx'e dokunulmadı; sabit yenisrc/lib/veri-kapsami.ts'te). - Olasılık dili bitti: "yerleşme olasılığı" iki yerde "yerleşme riski ve trend analizi" oldu; risk notunun dört cümlesi tek saf fonksiyona (
riskNotuMetni,src/lib/risk.ts:52) alındı, rapor ve tadımlık aynı kaynaktan okuyor. Eşikler, 5/13/6, LLM çıktı şemaları değişmedi. - Tadımlık artık rozetle çelişemez:
tadimlikSec()DB'deki LLM cümlesini servis etmiyor; notu okuma anında adayın gerçek sırasından üretiyor. Prod'dapnpm tadimlikyeniden koşusu gerekmiyor. - "4 yıl" →
VERI_YIL_SAYISI(5): ana sayfada 5,/paket'te 1 yer sabitten okuyor; prompt/mock'ta düz "5". - İki [BİLAL] commit'i gerçekten bağımsız:
main'den geçici dalda tek tek, birlikte ve "commit 2 olmadan" senaryosunda cherry-pick edildi → çakışma yok, tsc 0 hata. Fiyat rakamını ajanlar doğrulamadı — Bilal Armut sayfasını açmadan commit 2'yi almasın.
Commit listesi
| # | SHA | Mesaj | Dosyalar |
|---|---|---|---|
| 1 | 16c4508 |
fix(metin): olasılık dili + 5 yıl |
src/lib/veri-kapsami.ts (Y) · src/lib/risk.ts · src/lib/ai/rapor.ts · src/app/page.tsx · src/features/odeme/components/paket-satinal.tsx · src/components/arama-funnel-karti.tsx |
| 1b | cae2aaa |
fix(ai): tadımlık risk notu deterministik + prompt dili |
src/lib/tadimlik-havuzu.ts · scripts/tadimlik-uret.ts · src/app/api/soru/route.ts |
| 2 | 52520ac |
chore(metin): danışman fiyat kıyası [Bilal onayı gerekir] |
src/app/page.tsx · src/app/paket/page.tsx · src/app/layout.tsx |
| 3 | 9d450c5 |
chore(guven): hero'da YÖK logosu yerine tarihli veri satırı [Bilal onayı gerekir] |
src/app/page.tsx · src/features/katalog/components/veri-kaynagi.tsx |
Bilal reddederse: commit 3 en üstte → git merge gece/p3-vaat-dili~1 (3'süz) / ~2 (2 ve 3'süz). Yalnız 2 reddedilirse: ~2'yi merge + git cherry-pick 9d450c5 (D senaryosu, test edildi).
Metin değişiklikleri — önce → sonra (satır numaraları dal HEAD'inde)
Commit 1
| Yer | Önce | Sonra |
|---|---|---|
src/app/page.tsx:180 |
Her tercih için yerleşme olasılığı ve risk analizi (son 4 yıl) | Her tercih için yerleşme riski ve trend analizi (son 5 yıl) |
src/features/odeme/components/paket-satinal.tsx:32 |
Her tercih için yerleşme olasılığı ve risk analizi (son 4 yıl trend) | Her tercih için yerleşme riski ve trend analizi (son 5 yıl) |
src/app/page.tsx:108 |
Son 4 yılın YÖK Atlas verisi — … | Son 5 yılın YÖK Atlas verisi — … (gerisi aynı) |
src/app/page.tsx:122 (SSS + FAQ JSON-LD) |
…son 4 yılın taban başarı sıralamaları… | …son 5 yılın taban başarı sıralamaları… |
src/app/page.tsx:148 |
Son 4 yılın trend analizi | Son 5 yılın trend analizi |
src/app/page.tsx:355 |
4 yıl | 5 yıl |
src/lib/risk.ts:55 (eski rapor.ts:166) güvenli |
Taban sıralaması senin sıranın belirgin altında; yüksek ihtimalle yerleşirsin. | Son taban sıralaması senin sıranın belirgin altında; geçmiş veriye göre güvenli aralıkta. |
src/lib/risk.ts:57 az-riskli |
Taban sıralaması sırana yakın; orta ihtimalle yerleşilebilir. | Son taban sıralaması sırana yakın; küçük bir kayma sonucu değiştirebilir. |
src/lib/risk.ts:59 riskli |
Taban sıralaması senin sıranın üstünde kapandı; yerleşme ihtimali düşük. | Son taban sıralaması senin sıranın üstünde kapandı; hayal tercihi olarak düşün. |
src/lib/risk.ts:61 veri yok |
Güncel taban sıralaması verisi yok; ihtimal öngörülemez, temkinli yaklaş. | Güncel taban verisi yok; bu satırı temkinli değerlendir. |
src/components/arama-funnel-karti.tsx:38 |
Yerleşme ihtimalini görerek seç. | Yerleşme riskini görerek seç. |
rapor.ts:168-170 riskNotuUret gövdesi tek satır: return riskNotuMetni(riskHesapla(p.sira2025 ?? p.sira2024, adaySira)); (+ import satırı). Metinlerde sayı VERI_YIL_SAYISI'ndan template literal ile geliyor.
Commit 1b
| Yer | Önce | Sonra |
|---|---|---|
src/lib/tadimlik-havuzu.ts:89 |
riskNotu: satir.riskNotu (DB'deki LLM cümlesi) |
riskNotuMetni(riskHesapla(program.efektifSira, sira) ?? dilimdenRisk(satir.dilim)) — tadimlik-satiri.tsx:107 rozetiyle aynı formül |
scripts/tadimlik-uret.ts:70-72 (prompt) |
riskNotu: yerleşme ihtimali değerlendirmesi … "yüksek/orta/düşük ihtimal" dili kullan. | riskNotu: geçmiş taban verisine dayalı risk değerlendirmesi (TEK kısa cümle). ASLA garanti/kesin/yüzde/olasılık/ihtimal deme; "güvenli / az riskli / riskli" etiketleriyle konuş. |
scripts/tadimlik-uret.ts:73 (prompt) |
trendOzeti: son 4 yılın… | trendOzeti: son 5 yılın… |
scripts/tadimlik-uret.ts:86 (mock) |
(Dev mock) Taban sıralaması senin civarında; orta-yüksek ihtimalle yerleşilebilir. | (Dev mock) Son taban sıralaması sırana yakın; küçük bir kayma sonucu değiştirebilir. |
scripts/tadimlik-uret.ts:88 (mock) |
(Dev mock) Son 4 yılda… | (Dev mock) Son 5 yılda… |
src/app/api/soru/route.ts:48-49 |
ASLA yerleşme garantisi verme; "yüksek/orta/düşük ihtimal" dili kullan. | ASLA yerleşme garantisi verme; olasılık, yüzde ya da "ihtimal" dili kullanma — güvenli / az riskli / riskli etiketleri ve taban sıralarıyla konuş. |
Prompt'larda yalnız talimat cümlesi değişti; TadimlikSchema (gerekce/riskNotu/trendOzeti) ve sohbetin akışı/ayrıştırması aynı.
Commit 2 [BİLAL]
| Yer | Önce | Sonra |
|---|---|---|
src/app/page.tsx:92 |
İyi bir tercih danışmanı 2.000–10.000 TL istiyor. | …1.000–5.000 TL istiyor. |
src/app/page.tsx:168 (kıyas tablosu) |
2.000–10.000 TL | 1.000–5.000 TL |
src/app/page.tsx:474 |
İnsan danışmanın 2.000–10.000 TL aldığı işi… | İnsan danışmanın 1.000–5.000 TL aldığı işi… |
src/app/page.tsx:478-480 (yeni) |
— | <p className="text-xs text-slate-500">Danışman fiyat aralığı: Armut, 2026.</p> (düz metin, sabit yok) |
src/app/page.tsx eski 225-229 |
yorum içinde ölü <p> ("…onda bir fiyatına yapar.") |
blok silindi |
src/app/paket/page.tsx:49 |
onda bir fiyatına | çok daha düşük fiyata |
src/app/paket/page.tsx:52 |
…bu dönemde 2.000–10.000 TL alıyor. | …bu dönemde 1.000–5.000 TL alıyor. |
src/app/layout.tsx:55 (description) |
İnsan danışmanın onda bir fiyatına, yapay zekâ destekli… | İnsan danışmandan çok daha düşük fiyata, yapay zekâ destekli… |
Commit 3 [BİLAL]
| Yer | Önce | Sonra |
|---|---|---|
src/app/page.tsx:231-241 |
<Image src="/yok-logo.svg" alt="Yükseköğretim Kurulu"> + dikey ayraç + "YÖK Atlas'ın gerçek verileriyle güvenilir sonuçlar" |
"Veri: YÖK Atlas · son güncelleme <time dateTime="2026-08-09">9 Ağustos 2026</time>" — kutu sınıfları aynen |
src/app/page.tsx:15 / :57,61 |
import Image from "next/image" |
silindi / KATALOG_VERI_TARIHI seo import'una + KATALOG_TARIH_METNI import'u eklendi |
src/features/katalog/components/veri-kaynagi.tsx:6 |
const TARIH_METNI |
export const KATALOG_TARIH_METNI (dosya içi kullanım güncellendi) |
public/yok-logo.svg duruyor. Yeni badge/pill yok; CTA butonlarına dokunulmadı; huni-semasi.tsx SEMA değişmedi (davranış değişmedi, CTO teyidi).
Kabul kriterleri
| Kriter | Sonuç | Kanıt |
|---|---|---|
typegen + tsc + lint (dal HEAD 9d450c5) |
Geçti | next typegen ✓ · tsc --noEmit exit 0, çıktı yok · pnpm lint exit 0. Ayrıca commit 1, 1b, 2, 3 sonrasında ayrı ayrı tsc+lint temiz |
grep -rniE "olasılı|ihtimal" src scripts/tadimlik-uret.ts → yalnız izinli kalıntılar |
Geçti (3 ek yorum satırıyla) | Beklenenler: page.tsx:78 ("binlerce ihtimal"; şartnamede :76, import eklenince kaydı), page.tsx:132, program-tablosu.tsx:176, yasaklayıcı prompt'lar soru/route.ts:48, tadimlik-uret.ts:71. Ek: risk.ts:48-49 ve tadimlik-havuzu.ts:88 — benim yazdığım, kuralı açıklayan kod yorumları (kullanıcıya görünmez, yasaklayıcı) |
grep -rn "4 yıl" src/app/page.tsx src/features/odeme → boş |
Geçti | exit 1, çıktı yok |
grep -rn "onda bir|2\.000–10\.000" src → boş |
Geçti | exit 1, çıktı yok |
| Bağımsızlık (cherry-pick) testi | Geçti | Geçici dal gece/p3-tmp-test @ 56925e1: A yalnız commit 2 → çakışmasız, tsc 0 · B yalnız commit 3 → çakışmasız, tsc 0 · C 2+3 (commit 1'siz) → tsc 0 · D 1+1b+3 (commit 2'siz) → çakışmasız, tsc 0. Geçici dal silindi, worktree temiz |
| Ana sayfada kamu logosu yok, tarih görünür HTML'de | Geçti (kod incelemesi) | grep "yok-logo|next/image" src/app/page.tsx boş; <time dateTime> sunucu bileşeninde |
Repo geneli tarama — kalan ifadeler ve gerekçe
src/features/sihirbaz/components/cta-sira-form.tsx:143,164,189,209"Sıralamanla nereye yerleşirsin? Saniyede gör." — dosya P2'nin; CTO bunu Garanti→Güvenli (H2) backlog'una bağladı. En görünür kalan vaat cümlesi bu; H2 kararıyla birlikte ele alınmalı.src/app/page.tsx:132SSS "boşta kalma ihtimalini en aza indiririz" — şartnamede açıkça kapsam dışı (SSS). Not: yerleşme olasılığı değil ama yine bir sonuç vaadi; H2 paketinde gözden geçirilmeli.src/app/page.tsx:78"24 tercih, binlerce ihtimal" — kombinasyon anlamı, vaat değil.src/features/pazarlama/components/meraklisina-icerik.tsx:64"şansını" —/meraklisina, kapsam dışı (H6).src/features/pazarlama/components/hero-baslik.tsx:24"Dört yıllık geleceğini",bolum-listesi.tsx:95"4 Yıllık" — öğrenim süresi, veri kapsamı değil.content/rehber/*.md"son 3-4 yılın tabanına bak", "yerleşme ihtimaline göre dizme" — yazar dalının; genel tercih tavsiyesi, ürün vaadi değil.taban-siralamalar…md:12"dört yılın tabanı = film" ürünün "5 yıl"ıyla birebir örtüşmüyor ama ürün iddiası değil (SEO ajanına not).- "Son 5 yıl" tablo başlıkları (
rapor-listesi.tsx:368,program-tablosu.tsx:242,bolum-program-listesi.tsx:160,universite-program-tablosu.tsx:51) zaten 5; sabitten okumuyorlar (dosyalar P3'ün değil) → veri yılı eklenince elle güncellenecek 4 yer; backlog adayı. src/app/api/soru/route.ts:46aynı prompt'ta "Riskli = geçen yıl adayın sıralamasının üzerinde kapandı" — efektif sıra 2024'e düşebildiği için teknik olarak gevşek; şartname yalnız 48. satırı verdi, dokunulmadı.- DB'deki kayıtlı raporlarda ve
tadimlik_havuzu.risk_notukolonunda eski cümleler duruyor: raporlar göçsüz kalır (CEO kabulü); tadımlık kolonu artık servis edilmiyor.
Sapmalar / şartname notları
rapor.ts'te import satırı da değişti ("başka hiçbir şeye dokunma"ya rağmen):riskNotuMetniimport'u olmadan gövde derlenmez. Başka değişiklik yok.scripts/tadimlik-uret.ts"5"i düz yazıyor, sabitten okumuyor — şartname metni öyle ("son 5 yılın"); prompt'a import sokmamak için harfiyen uygulandı. Veri yılı eklenince güncellenecek yerler:veri-kapsami.ts+ bu script (2 satır) + yukarıdaki 4 tablo başlığı.layout.tsx:55: şartname yalnız "onda bir fiyatına → çok daha düşük fiyata" diyordu; cümle "İnsan danışmanın çok daha düşük fiyata" diye bozulacağı için "İnsan danışmandan çok daha düşük fiyata" yapıldı.- Kabul grep'inde 3 fazladan satır — kendi açıklayıcı kod yorumlarım (yukarıda). Temiz grep istenirse yorumlar yeniden yazılabilir; davranışa etkisi yok.
- Satır kayması: şartnamedeki
page.tsx:76artık:78(commit 1 ve 3'ün import satırları). pnpm buildkoşulmadı (talimat).KATALOG_TARIH_METNImodül seviyesindenew Date(<sabit string>)kullanıyor — zaten katalog sayfalarında prerender edilen mevcut kod; ana sayfaya ilk kez giriyor, Tur 4 build'indecacheComponentsuyarısı çıkarsa ilk bakılacak yer (beklenmiyor: argümanlıDate). CTO backlog #6 (P1'intrTarih'ine geçiş) bunu tümden kapatır.- Görsel kontrol Bilal'de: hero kutusu logosuz daha dar; fiyat bölümünde kaynak satırı
gap-4sütununun son öğesi.
Yazılımcı P4 · Giriş e-postası
Dal gece/p4-eposta (worktree .claude/worktrees/p4-eposta), taban 56925e1. Push/merge yok; dev sunucusu/tarayıcı/pnpm build koşulmadı. Gerçek e-posta gönderilmedi: Resend'e ulaşan hiçbir kod yolu çalıştırılmadı, canlıya istek atılmadı, .env* dosyaları okunmadı. Tüm doğrulama betikleri scratchpad'de, scratch SQLite DB + sahte secret + RESEND_API_KEY tanımsız koştu; hiçbiri commit'lenmedi.
Özet (5 madde)
- Prod'da sessiz fallback bitti. Anahtar yokken konsola yazıp "gönderildi" dönmek artık yalnız dev'de ya da
EPOSTA_KONSOL_FALLBACK=1ile; prod + anahtarsız → gönderim anındathrow(better-auth 500 → formda hata toast'ı), token'lı link loga düşmüyor.EMAIL_FROMyoksa prod'daresend.dev'e düşmek yerine hata. Tüm env okumaları fonksiyon gövdesinde →next buildetkilenmez. - Reply-To eklendi (
EMAIL_REPLY_TO, yoksadestek@kolaytercih.com). - Adres başına 60 sn soğuma, süreç içi
Map(CTO itirazı #2'ye uygun;verificationtablosuna dokunulmadı), yalnızNODE_ENV=production. Pencere kaymaz, gönderim hatasında kayıt geri verilir. Uçtan uca (better-authsignInMagicLink→sendMagicLink) çevrimdışı doğrulandı. giris_basarilisunucu olayısession.create.after'da,awaitsiz;yontem: eposta|google|diger. Stubfetchile doğrulandı: verify sonrası tam 1 olay, gövdede e-posta yok.- Commit 2, 3, 4, 5'in her biri tek başına
git revertedilebiliyor (denendi: çakışmasız + tsc temiz). Bunun için commit 3 bilinçli olarak "sarmalayıcı" biçiminde yazıldı (aşağıda sapma #2).
Commit listesi
| # | Hash | Başlık | Canlı giriş yolunu değiştirir mi |
|---|---|---|---|
| 1 | aac33e7 |
chore(eposta): şablondan harici font + footer iletişim |
Hayır (yalnız mail içeriği) |
| 2 | 5992cf3 |
fix(eposta): Reply-To + prod'da sessiz fallback yok |
EVET — prod'da anahtar/EMAIL_FROM eksikse giriş isteği artık 500 döner (eskiden sahte başarı). Env tamamsa tek fark Reply-To başlığı. |
| 3 | 2af4a9f |
feat(giris): adres başına 60 sn soğuma |
EVET — aynı adrese 60 sn içinde 2. istek 200 döner ama mail çıkmaz. |
| 4 | 17046c8 |
feat(analitik): giris_basarili sunucu olayı |
Hayır (yan etki; await yok, hata fırlatmaz). Oturum oluşturma kancasına eklenir — Google girişinde de tetiklenir. |
| 5 | ea3ba5f |
chore(ci): .env.production'a RYBBIT_* ve EMAIL_REPLY_TO [Bilal onayı gerekir] |
Hayır (deploy hattı; yalnız secret ADI referansı, değer yok). Önceki dört commit'e bağımlı değil. |
Değişen dosyalar (yalnız P4'e atananlar)
src/lib/eposta.ts · src/lib/eposta-gonder.ts · src/lib/auth.ts · src/lib/analitik-sunucu.ts · .gitea/workflows/ci.yaml — toplam +155/−17. Yeni dosya yok, şema/migration yok, bağımlılık yok.
Kabul kriterleri
| Kriter | Sonuç | Kanıt |
|---|---|---|
| typegen + tsc + lint | Geçti | HEAD ea3ba5f: next typegen ✓, tsc --noEmit exit 0, pnpm lint exit 0. Ayrıca commit 1/2/3/4 sonrası ayrı ayrı tsc+lint temiz. |
grep -n "fonts.googleapis|fonts.gstatic" src/lib/eposta.ts → boş |
Geçti | Çıktı boş; render edilen iki şablonda <link sayısı 0. |
grep -n "process.env" src/lib/eposta-gonder.ts → hepsi fonksiyon gövdesinde |
Geçti | 7 okuma: :18 (kacisBayragi), :30-31 (epostaKonsolModu), :45,51,52,62 (epostaGonder). Modül seviyesinde okuma/throw yok. |
grep -n "await sunucuOlayi" src/lib/auth.ts → boş |
Geçti | Çıktı boş (void sunucuOlayi(...)). |
Prod + anahtarsız + bayraksız yolda hiçbir console.log URL basmıyor |
Geçti | Kod: iki dosyada 4 console.* var — eposta-gonder.ts:40 ve auth.ts:98 yalnız epostaKonsolModu() dalında; auth.ts:73 soğuma bilgi satırı (adres/link içermez); eposta-gonder.ts:73 Resend hata logu (link içermez). Çalışma kanıtı: betikte console.log/info yakalanarak bu yolda 0 satır + RESEND_API_KEY tanımlı değil hatası görüldü. |
| Footer + düz metin iletişim satırı | Geçti | Render: HTML'de <a href="https://kolaytercih.com"…>kolaytercih.com</a> · <a href="mailto:destek@kolaytercih.com"…>; iki şablonun text'i — / kolaytercih.com · destek@kolaytercih.com ile bitiyor. |
| Lokal docker testi (bayrakla link konsolda, 60 sn içinde 2. istek link üretmez, bayraksız → hata) | Bilal'de (aşağıda adımlar) | Çevrimdışı eşdeğeri geçti: NODE_ENV=production + scratch DB ile auth.api.signInMagicLink → 1. istek link, 2. istek (büyük harfli aynı adres) {status:true} + link yok; bayraksız → hata + link yok; hata sonrası hemen yeniden deneme link üretiyor. |
Elle doğrulama betikleri (commit'lenmedi, scratchpad): p4-guard.mts 12/12 (konsol modu matrisi: dev/prod × anahtar × bayrak; EPOSTA_KONSOL_FALLBACK=true açmaz, yalnız 1; EMAIL_FROM="" de hata), p4-soguma.mts 10/10 (22 sn senaryosu, trim+lowercase, 59.999 ms düşer / 60.000 ms geçer, pencere kaymıyor, bırak→yeniden dene, 500 kayıt tek çağrıda budanıyor), p4-e2e.mts 6/6, p4-olay.mts 6/6 (stub fetch: /api/track, pathname:/giris, properties:{"yontem":"eposta"}, e-posta yok, tam 1 olay, verify 19 ms). Projede test altyapısı (vitest/jest) yok → test dosyası eklenmedi.
better-auth doğrulamaları (kaynaktan, tahmin değil): databaseHooks.session.create.after: (session, context: GenericEndpointContext | null) => Promise<void> (@better-auth/core/dist/types/init-options.d.mts:1192); context = getCurrentAuthContext() (better-auth/dist/db/with-hooks.mjs:7), path: string better-call EndpointContext'te var; uç yolları /magic-link/verify (plugins/magic-link/index.mjs:84) ve /callback/:id (api/routes/callback.mjs:21). Resend 6.18.0 replyTo?: string | string[] (resend/dist/index.d.mts:559).
Sapmalar / şartname notları
??yerine||(EMAIL_REPLY_TO,EMAIL_FROM): şartnameprocess.env.EMAIL_REPLY_TO ?? "destek@…"diyordu. Commit 5'teki CI satırı secret yokkenEMAIL_REPLY_TO=(boş string) üretir;??boş string'i geçirir → Resend'e boş Reply-To gider → doğrulama hatası → kimse giriş yapamaz.||ile boş değer varsayılana düşer; CTO'nun "secret yoksa zararsız" varsayımı ancak böyle doğru.- Commit 3'te fonksiyon bölündü: soğuma, eski gövdeyi satır satır değiştirmek yerine onu
girisLinkiniIletadıyla olduğu gibi bırakıp üstüne yenisendMagicLinkEmailsarmalayıcısı olarak eklendi (diff: 60 ekleme, 0 silme). İlk denemede gövdeyi taşımıştım; commit 2'nin tek başına revert'i çakışıyordu → "tek tek atılabilir" şartı için yeniden yazıldı. Yan etki: dev'deki__sonMagicLinkyakalaması artık soğuma kontrolünden sonra — soğuma dev'de kapalı olduğu için davranış aynı. girisSogumasiAl/girisSogumasiBirakauth.ts'ten export ediliyor (saf mantığı betikle test edebilmek için; zaman parametresi enjekte edilebilir). Uygulama içinde başka çağıranı yok.- Soğumada düşen istek için bir
console.infosatırı eklendi ("Soğuma penceresinde tekrar istek — e-posta gönderilmedi."; adres ve link içermez). Şartnamede yoktu; Bilal'in docker testinde "2. istek gerçekten yutuldu mu"yu görünür kılıyor. İstenmezse 3 satır silinir. - Footer'da
SITE_URLdeğil sabitkolaytercih.com(şartnamedeki gibi): lokal/dev'de üretilen mailde bile iletişim satırı prod alan adını gösterir. İki küçük sabit (SITE_ALANI,DESTEK_EPOSTA) +METIN_ALT_BILGIHTML ve iki düz metin gövdede ortak. eposta.tsüst yorumundaki "web fontları<link>ile yüklenir" cümlesi yeni duruma göre düzeltildi.BASLIK_TIPI/MARKA_TIPIfont yığınları bırakıldı (cihazda kuruluysa çalışır, zararsız).- Bilinen sınırlar (CTO kabulü, değişmedi): Map yeniden başlatmada sıfırlanır, çoklu kopyada paylaşılmaz; eşzamanlı iki istekte ilki hata verirse ikincisi yutulmuş olur (nadir); soğumada düşen isteğin
verificationsatırı 15 dk yetim kalır; Gmail nokta/+etiketeşlemesi yok (anahtar yalnız trim+lowercase). Kullanıcı 60 sn içinde sayfayı yenileyip yeniden isterse "gönderildi" görür ama mail çıkmaz — P2'nin 60 sn geri sayımıyla birlikte merge edilmesi önerilir (P2 commit 3). kredi-hatirlatma.ts(P4'ün değil) aynıepostaGonder'ı kullanıyor: prod'da anahtar yoksa artıkthrow→ mevcuttry/catchyakalayıp logluyor, hatırlatma "yanar" (mevcut at-most-once davranışı). Eskiden sessizce konsola yazıp yine yanıyordu → fiilî fark yok..gitea/workflows/ci.yamlYAML'ıruby -ryamlile ayrıştırılarak doğrulandı (4 yeni satır heredoc içinde, doğru girintide). Gitea runner'da koşturulmadı.
Bilal'in merge öncesi lokal docker testi (sırayla)
Hazırlık: gece/p4-eposta dalını checkout et. Lokal .env.production'ın kopyasını al ve kopyada RESEND_API_KEY= ile EMAIL_FROM= satırlarını boşalt/sil (gerçek mail çıkmasın); BETTER_AUTH_URL=http://localhost:3000 yap. docker-compose.yml Traefik ağına bağlı olduğu için en kolayı: docker build -t kt-p4 . → docker run --rm -p 3000:3000 --env-file <kopya> -e APP_DB_URL=file:/app/data/app.db [-e EPOSTA_KONSOL_FALLBACK=1] kt-p4.
- Build geçiyor mu (kritik: prod guard modül seviyesinde değil):
docker buildhatasız bitmeli. - Bayraklı koşu (
-e EPOSTA_KONSOL_FALLBACK=1, anahtar boş): gizli pencerede/giris→ e-posta gir → form yeşil "Bağlantı gönderildi" →docker logs'ta[giris] Magic link for …+/giris/dogrula?token=…linki. - Soğuma: 60 sn dolmadan aynı adresi (bir de BÜYÜK harfle) yeniden iste (P2 merge edilmediyse "Yeniden gönder" 30. sn'de açılır) → form yine başarı gösterir, logda yeni link YOK, yerine
[giris] Soğuma penceresinde tekrar istek — e-posta gönderilmedi.Farklı bir adres aynı anda link alabilmeli. 60 sn sonra aynı adres yeniden link almalı. - Giriş tamamlanıyor mu: logdaki linki aç →
/giris/dogrulaonay kartı → buton → oturum açıldı, yeni kullanıcıya deneme kredisi yazıldı. Aynı link ikinci kez → "geçersiz bağlantı" mesajı. Google ile giriş de dene (session kancası orada da çalışıyor). - Bayraksız + anahtarsız koşu (konteyneri
EPOSTA_KONSOL_FALLBACKolmadan yeniden başlat):/giris→ e-posta gir → formda hata toast'ı ("Bağlantı gönderilemedi…"), logda[eposta] RESEND_API_KEY tanımlı değil, logda hiçbirtoken=URL'i yok (docker logs … | grep -c "token="→ 0). Hemen ardından aynı adresle tekrar dene → yine hata (soğumaya takılıp sahte başarı göstermemeli). EMAIL_FROMguard'ı (isteğe bağlı, mail ÇIKMAZ): kopyadaRESEND_API_KEY=re_sahte+EMAIL_FROMboş + bayraksız → formda hata, logda[eposta] EMAIL_FROM tanımlı değil(Resend'e gitmeden atar).- Gerçek gönderim (tek mail, kendi adresine): gerçek
.env.productionile koş → gelen mailde "Show original":Reply-To: destek@kolaytercih.com; HTML kaynağındafonts.googleapisyok; footer'da site + destek adresi; yanıtla'ya basınca alıcıdestek@…. giris_basarili:RYBBIT_HOST/SITE_ID/API_KEYkopyada tanımlıysa 4. adımdan sonra Rybbit'tegiris_basarili {yontem: eposta}(ve Google ilegoogle) düşmeli; olayda e-posta adresi olmamalı. Tanımlı değilse no-op (hata yok) — bu da doğrulanmış olur.- Merge sonrası canlıda ilk iş: gizli pencereden kendi adresinle bir giriş; 500 görürsen Gitea secret'larında
RESEND_API_KEY/EMAIL_FROMboş demektir → commit 2'yi revert et (git revert 5992cf3, çakışmasız — denendi).
Gereken env / secret adları
| Ad | Zorunlu mu | Not |
|---|---|---|
RESEND_API_KEY |
Prod'da zorunlu (mevcut secret) | Yoksa artık giriş isteği 500. |
EMAIL_FROM |
Prod'da zorunlu (mevcut secret) | Yoksa artık 500 (eskiden sessiz onboarding@resend.dev). |
EMAIL_REPLY_TO |
İsteğe bağlı (yeni Gitea secret) | Yok/boş → destek@kolaytercih.com. |
EPOSTA_KONSOL_FALLBACK |
Yalnız lokal docker testi, değer 1 |
Prod'a/Gitea'ya EKLEME — eklenirse (ve anahtar da yoksa) giriş linkleri prod loguna yazılır. |
RYBBIT_HOST, RYBBIT_SITE_ID, RYBBIT_API_KEY |
giris_basarili/odeme_tamamlandi için gerekli (yeni Gitea secret'ları) |
Üçünden biri boşsa no-op. Secret'lar eklenmeden commit 5 merge edilirse zararsız (boş satırlar), ama olaylar yine düşmez. |
Bilal'in kod dışı işleri (04-mail-testi'nden, bu pakette çözülemez): DMARC kaydı + apex SPF (Cloudflare), destek@kolaytercih.com kutusunun gerçekten açık olduğunun teyidi (Reply-To artık oraya gidiyor).
Yazılımcı B · K2 tadımlık dili
Worktree .claude/worktrees/p3b-tadimlik-dili · dal gece/p3b-tadimlik-dili · taban cae2aaa · push/merge yok, pnpm build koşulmadı, script/DB yazımı yok (DB denemesi data/app.db'nin scratchpad'deki .backup kopyasına karşı, sqlite3 -readonly ile alındı).
Özet (5 madde)
- 2 commit, şartnamedeki bölünmeyle:
79bc7fa[KARAR] tadımlık dili ·004473a[BİLAL] rakamsız fiyat, en tepede. Yalnız 6 sahipli dosyaya dokunuldu. - Tadımlıkta servis edilen tek LLM metni artık
gerekceve o da filtreli.trendOzetiDB'den okunmuyor; rapordakiyle aynı saf fonksiyondan (src/lib/trend.tstrendOzetiMetni)program.siraGecmisi'nden üretiliyor. Tüm anahtar uzayında (1.170 istek) gerçektadimlikSec()çağrısıyla servis edilen metinlerde olasılık/ihtimal/şans/"son 4 yıl" 0. - Bedeli: 514 satırın 26'sı elendi; tadımlığın gizlendiği istek kombinasyonu 127 → 186 (1.170'te +59, +%5). CEO'nun dar kalıbı uygulansaydı 16 satır / +32 olurdu — fark bilinçli sapma (aşağıda #1), geri alması tek satır.
- Trend cümlesinde tahmin yargısı yok: "bölüm zorlaşıyor" → "taban sıkılaştı", "yerleşmek görece kolaylaşıyor" → "taban gevşedi". Eşik, ilk–son yıl mantığı, 5/13/6, LLM şeması/prompt'u değişmedi. Ege Tıp tipi yanıltma sürüyor (4 yıl düz seri hâlâ "çıktı; taban gevşedi" diyor) — CEO backlog'unda, K2 kapsamı dışı.
9d450c5(YÖK logosu) bu dalın hem tepesine hem~1'ine çakışmasız uygulanıyor (merge-tree + gerçek cherry-pick + tsc/lint). Fiyat commit'i reddedilirsegit merge gece/p3b-tadimlik-dili~1.
Commit listesi
| # | SHA | Mesaj | Dosyalar |
|---|---|---|---|
| 1 [KARAR] | 79bc7fa |
fix(ai): tadımlık trendi deterministik + gerekçe dil filtresi |
src/lib/trend.ts (Y) · src/lib/tadimlik-havuzu.ts · src/lib/ai/rapor.ts |
| 2 [BİLAL] | 004473a |
chore(metin): danışman fiyat kıyası rakamsız ve atıfsız [Bilal onayı gerekir] |
src/app/page.tsx · src/app/paket/page.tsx · src/app/layout.tsx |
rapor.ts diff'i: siraKisa + trendOzetiUret gövdesi çıktı, yerine trendOzetiMetni([p.sira2021…p.sira2025]) çağıran 9 satırlık sarmalayıcı + 1 import. İki çağrı yeri (:200 mock, :402 gerçek rapor) ve AiTercihSchema/prompt/dilimHedefiHesapla dokunulmadı. siraGecmisi yıl sırası doğrulandı: scripts/tadimlik-uret.ts:94 ve rapor.ts programBilgisi ikisi de [sira2021…sira2025]; raporSiraSerisi de indeks 0 = 2021 okuyor → trend.ts'te çapa ILK_VERI_YILI = 2021.
Metin değişiklikleri — önce → sonra
Commit 1
| Yer | Önce | Sonra |
|---|---|---|
src/lib/trend.ts:45 (eski rapor.ts:160) |
…düzeyine indi; bölüm zorlaşıyor. | …düzeyine indi; taban sıkılaştı. |
src/lib/trend.ts:48 (eski rapor.ts:163) |
…düzeyine çıktı; yerleşmek görece kolaylaşıyor. | …düzeyine çıktı; taban gevşedi. |
| stabil / veri yok cümleleri | aynı | aynı |
tadimlik-havuzu.ts trendOzeti |
satir.trendOzeti (DB, LLM: "Son 4 yılda taban sıralaması 13.000'den 6.100'e hızla yükseldi, bölüm popülerleşiyor.") |
trendOzetiMetni(program.siraGecmisi) ("2021-2025 arasında taban 16B düzeyinden 6B düzeyine indi; taban sıkılaştı.") |
tadimlik-havuzu.ts gerekce |
koşulsuz servis | gerekceServisEdilebilir() geçmezse satır yok sayılır → genel → null |
tadimlik-havuzu.ts yorum |
"…metin ile rozet çelişemez, olasılık dili sızamaz." | riskNotu ve trendOzeti'nin servis edilmediğini, gerekce'nin servis edilen tek LLM metni olduğunu ve filtreden geçtiğini söylüyor |
Filtre kalıbı (Türkçe küçük harfe çevrilmiş metinde): /olasılı|ihtimal|şans|garanti|kesin|yüzde|yerleşirsin|yerleşebil|son (4|dört) yıl/.
Commit 2 [BİLAL]
| Yer | Önce | Sonra |
|---|---|---|
src/app/page.tsx:91 |
İyi bir tercih danışmanı 2.000–10.000 TL istiyor. | İyi bir tercih danışmanının ücreti birkaç bin lirayı bulabiliyor. |
src/app/page.tsx:167 (kıyas tablosu) |
2.000–10.000 TL | Danışmana göre değişir |
src/app/page.tsx:483 |
İnsan danışmanın 2.000–10.000 TL aldığı işi tek seferlik… | İnsan danışmanın birkaç bin liraya yaptığı işi tek seferlik… |
src/app/paket/page.tsx:49 (h1) |
onda bir fiyatına | çok daha düşük fiyata |
src/app/paket/page.tsx:52 |
Tercih danışmanları bu dönemde 2.000–10.000 TL alıyor. | Tercih danışmanlarının ücreti bu dönemde birkaç bin lirayı bulabiliyor. |
src/app/layout.tsx:55 (description) |
İnsan danışmanın onda bir fiyatına, yapay zekâ destekli… | İnsan danışmandan çok daha düşük fiyata, yapay zekâ destekli… |
Kaynak satırı / şirket adı eklenmedi; page.tsx:224-228 yorum içi ölü <p> bloğuna dokunulmadı.
Lokal DB deneme sonuçları
Betikler (commit'lenmedi): <scratchpad>/k2/dene.ts (gerçek tadimlikSec + trendOzetiMetni + gerekceServisEdilebilir'i worktree'den import eder; APP_DB_URL=file:<scratchpad>/k2/app-kopya.db) ve <scratchpad>/k2/sim.ts (filtre varyantı kıyası). Ana data/app.db yalnız sqlite3 -readonly … .backup ile okundu.
| Ölçüm | Sonuç |
|---|---|
tadimlik_havuzu satır |
514 (genel 174 · devlet 166 · vakıf 174; 13 kategori slug'ı) |
DB trend_ozeti'nde "Son 4 yıl" |
89 satır (büyük-küçük harf duyarsız; 08'deki 126 sayısını üretemedim — denetçi muhtemelen daha geniş kalıp saydı). Artık hiçbiri servis edilmiyor |
siraGecmisi olmayan satır |
0 (18 satırda <2 dolu yıl → "yeterli geçmiş yıl verisi yok" cümlesi) |
Filtreye takılan gerekce |
26 / 514 (8'i genel kategori, 18'i kategoriye özel). Yalnız CEO kalıbıyla: 16. Ek 10 satır: şans 3 ("yerleşme şansınız yüksek/düşük", "kazanma şansın yüksek"), yerleşebil 1 ("rahatça yerleşebileceğiniz"), son 4/dört yıl 6 |
Anahtar uzayı (6 kova × 5 tür × 13 kategori+kategorisiz × 3 tip = 1.170 istek), null dönen |
filtresiz 127 → CEO kalıbı 159 → uygulanan 186 (filtre yüzünden gizlenen: 59) |
Kategorisiz (yalnız genel) 90 istekte null |
10 → 15 → 18 |
Kategoriye özel satırı elenip genel'e düşen istek |
17 |
Servis edilen 984 yanıtta (gerekce+riskNotu+trendOzeti) olasılı|ihtimal|son 4 yıl|son dört yıl|şans|yerleşirsin|garanti|kesin|yüzde |
0 |
| Üretilen trend dağılımı (514 satır) | sıkılaştı 287 · gevşedi 131 · stabil 78 · veri yok 18 |
null'a düşen 8 genel anahtarı: 10-50k\|ea\|genel, 0-10k\|say\|devlet, 10-50k\|say\|vakif, 10-50k\|tyt\|vakif, 50-100k\|ea\|vakif, 100-250k\|ea\|vakif, 100-250k\|soz\|vakif, 500k-plus\|say\|devlet — bunlarda kategoriye özel satırı olmayan her istek tadımlıksız kalır; prod'da pnpm tadimlik --force (karar #17) geri getirir.
Üretilen trendOzeti örnekleri (gerçek satırlar):
[16356,13032,9886,7429,6106]→ "2021-2025 arasında taban 16B düzeyinden 6B düzeyine indi; taban sıkılaştı." (eski DB metni: "Son 4 yılda taban sıralaması 13.000'den 6.100'e hızla yükseldi, bölüm popülerleşiyor.")[2273,1879,2364,2391,5731]→ "2021-2025 arasında taban 2B düzeyinden 6B düzeyine çıktı; taban gevşedi."[16523,13251,12057,12896,15834]→ "2021-2025 arasında taban sıralaması 16B düzeyinde stabil seyretti."[25412,14281,9831,15697,10244]→ "…25B düzeyinden 10B düzeyine indi; taban sıkılaştı." (eski: "son 4 yılda 14K ile 15K arasında dalgalandı" — eski metin rakamca da yanlıştı)[4218,5159,5303,5294,5118]→ "…4B düzeyinden 5B düzeyine çıktı; taban gevşedi." ← Ege Tıp tipi: son 4 yıl düz, cümle yine "çıktı" diyor (backlog).- Kenar:
undefined/ tek dolu yıl → "Karşılaştırma için yeterli geçmiş yıl verisi yok; trendi temkinli oku.";[null,null,100000,null,95000]→ "2023-2025 arasında … 95B düzeyinde stabil seyretti.";1.500.000→1.200.000→ "1,5M … 1,2M". Filtre: "İHTİMAL yüksek" ve "OLASILIK" yakalanıyor (düz/iİ/ı'yı kaçırırdı).
Kabul kriterleri
| # | Kriter | Sonuç | Kanıt |
|---|---|---|---|
| 1 | tadimlikSec() DB trendOzeti'ni servis etmez; aynı saf fonksiyon; yıl sırası doğrulandı; filtre → genel → null; yorum düzeltildi |
Geçti | git show 79bc7fa; grep -n "satir.trendOzeti" src/lib/tadimlik-havuzu.ts boş; rapor ve tadımlık ikisi de trendOzetiMetni import ediyor |
| 2 | Trend dili; eşik/mantık/şema/prompt aynı | Geçti | trend.ts gövdesi eski trendOzetiUret ile satır satır aynı, yalnız iki cümle sonu farklı; rapor.ts diff'inde şema/prompt satırı yok |
| 3 | DB betiği + servis edilen alanlarda 0 | Geçti | yukarıdaki tablo (sizinti: 0, 984 yanıt) |
| 4 | Commit 2: atıf ve TL aralığı yok, ölü <p>'ye dokunulmadı |
Geçti | grep -rn "2\.000–10\.000|Armut|1\.000–5\.000" src boş; grep -rn "onda bir" src → yalnız page.tsx:227 (yorum içi ölü blok, şartname gereği bırakıldı; 9d450c5 de silmiyor) |
| 5 | 9d450c5 çakışmasız |
Geçti | aşağıda |
| — | typegen + tsc + lint | Geçti | commit 1 öncesi ve commit 2 öncesi ayrı ayrı: next typegen ✓ · tsc --noEmit exit 0 · pnpm lint exit 0 |
Cherry-pick testi (9d450c5)
git merge-tree --write-tree --merge-base=9d450c5~1 HEAD 9d450c5→ exit 0, ağaç841760c(çakışma yok) — tepe (004473a) üstüne.- Aynı komut
HEAD~1(79bc7fa) için → exit 0, ağaç2d991c7— fiyat commit'i reddedilirse de temiz. - Geçici dal
gece/p3b-tmp-test@004473a:git cherry-pick 9d450c5çakışmasız (2 dosya, +11/−13) →tsc --noEmitexit 0,pnpm lintexit 0,grep "yok-logo\|next/image" src/app/page.tsxboş. Dal silindi, worktree temiz,git branch --list 'gece/p3b*'yalnız asıl dalı gösteriyor.
Sapmalar / şartname notları
- Filtre kalıbı şartnameden GENİŞ (en güvenli yorum): CEO
/olasılı|ihtimal|garanti|kesin|yüzde/idemişti. Eklenenler:şans,yerleşirsin,yerleşebil(orkestratör görevi "yerleşirsin dili"ni de sayıyordu; DB'de "yerleşme şansınız yüksek" birebir olasılık vaadi) veson (4|dört) yıl. Sonuncusu zorunluydu: "Son 4 yıl" yalnıztrend_ozeti'nden değilgerekce'den de sızıyor (6 satır; ilk koşuda 19 servis yanıtında yakalandı) — kriter 3'ün "Son 4 yıl = 0" şartı onsuz sağlanmıyordu. Bedel: 16 yerine 26 satır, +32 yerine +59 gizlenen istek. Daraltmak isteyenYASAK_GEREKCE_DILI'nden ilgili alternatifi siler. /ibayrağı yerinetoLocaleLowerCase("tr-TR"): JS'te düz/i"İhtimal"/"OLASILIK"ı eşlemez. Davranış şartnamenin niyetiyle aynı, daha sıkı.VERI_YIL_SAYISItrend.ts'te kullanılmadı: cümle "son N yıl" demiyor, yıl aralığını serideki dolu yıllardan yazıyor ("2022-2025 arasında") — sabitten türetmek yerine gerçek veri. Yıl çapasıILK_VERI_YILI = 2021(dizi hep 2021'den başlıyor; yeni yıl sona eklenince değişmez).paket/page.tsx:52için şartname cümle vermemişti; ana sayfadaki kalıpla eşlendi ("…ücreti bu dönemde birkaç bin lirayı bulabiliyor"). "birkaç bin lira" CEO metni; aralık değil ama yine teyitsiz bir büyüklük iddiası — Bilal tümden rakamsız isterse üç yerde "birkaç bin lira" → "yüksek ücret" tek kelimelik iş.- Kapsam dışında kalan aynı dil (sahipli dosya değil, dokunulmadı):
src/features/pazarlama/components/meraklisina-icerik.tsx:137"çizgi yukarı tırmanıyorsa bölüm zorlaşıyor demektir" (ayrıca yön ters görünüyor: sıra küçülünce taban sıkılaşır; çizimin ekseni bilinmeden karar verilemez — Bilal baksın) vescripts/tadimlik-uret.ts:74prompt örneği ("…bölüm zorlaşıyor"). İkincisi artık zararsız (trend servis edilmiyor) ama--forcekoşusundan önce düzeltilmeli. gerekce'de filtreye takılmayan kalite sorunları (bilgi): batch metinleri temsili sırayı kullanıcıya kendi sırasıymış gibi söylüyor ("30.000 sıralamanızla", "75K bandı"), hitap karışık ("sıralamanız" / "adayın" / "sıralaman"), bazıları yumuşak vaat içeriyor ("yerleşme potansiyeli var", "rahat yerleşim sağlayan", "rahatça yetiyor"). Kalıcı çözüm yeni prompt'la yeniden üretim (karar #17); istenirsegerekcede deterministik şablona çekilebilir (ayrı karar).- P3'ün
grep -rniE "olasılı|ihtimal" srckabul taramasına 2 yeni izinli satır eklendi:tadimlik-havuzu.ts'teki filtre kalıbı ve onu açıklayan yorum (yasaklayıcı, kullanıcıya görünmez). pnpm build, dev sunucusu, tarayıcı,pnpm tadimlik: koşulmadı (talimat). UI bileşeni değişmedi;SEMAsenkronu gerekmiyor (sihirbaz/havuz/iskelet davranışı aynı).
Yazılımcı C · K3 katalog
Dal gece/p7-katalog (taban e1bb482), worktree .claude/worktrees/p7-katalog. Push yok, build koşulmadı, tarayıcı açılmadı. Şartname: 11-ceo-kararlari-tur2.md §2-K3.
Özet (5 madde)
- 667 derin sayfanın (304 bölüm + 363 üniversite) başlık/açıklaması artık sayfa numarası dışında da ayrışıyor: bölümde taban sırası aralığı (title + description + H1), üniversitede o sayfadaki birim adları (description + giriş paragrafı). Salt-okunur betikle 667 sayfanın tamamı tarandı: sayfa numarası silinince aynı kalan title+description çifti 0.
- Canonical (kendine), robots, sitemap,
seo.tsx, ikisayfa/[no]/page.tsxve 1. sayfaların title/description'ı değişmedi (git diff e1bb482 HEADbu satırlarda boş). - "yerleşir misin? / nereye yerleşirsin?" başlıkları 5 yerden kalktı; CEO'nun uyarladığı köprü cümlesi aynen kullanıldı;
CtaSiraForm/bolum/[slug]sayfasına üniversite sayfasıyla aynı konumda eklendi. - İki commit bağımsız: metin beğenilmezse
git merge gece/p7-katalog~1yalnız sayfalamayı alır (commit 1 tek başına tsc/lint temiz doğrulandı). - Üç küçük sapma var (aşağıda): köprü sabitinin yeri, tek birimli üniversite sayfalarına sıra aralığı eklenmesi, uzun bölüm adlarında
<title>uzunluğu.
Commit listesi
| # | Hash | Mesaj | Dosyalar |
|---|---|---|---|
| 1 | 4dfb24b |
feat(seo): derin katalog sayfalarında başlık/açıklama/H1'i sayfanın içeriğiyle ayrıştır |
bolum-icerik.tsx, universite-icerik.tsx, sayfalama.tsx |
| 2 | f1abedc |
feat(katalog): CTA kartında vaatsiz başlık + köprü cümlesi, /bolum sayfasına CTA |
cta-sira-form.tsx, universite-icerik.tsx, bolum-icerik.tsx, sayfalama.tsx |
Metadata nerede üretiliyor: rota dosyalarındaki generateMetadata → bolumSayfaMetadata / uniSayfaMetadata (iki *-icerik.tsx) → sayfaMetadata (seo.tsx, dokunulmadı). Next metadata API'sine dokunulmadı (yalnız title/description string'leri); yine de node_modules/next/dist/docs/01-app/03-api-reference/04-functions/generate-metadata.md title/template bölümü okundu — kök template: "%s — KolayTercih" derin sayfalara da uygulanıyor.
Tek yardımcı: sayfaDilimi() (sayfalama.tsx) → bolumSayfaDilimi() / uniSayfaDilimi(); hem metadata hem gövde bunları çağırıyor (gövdedeki eski elle slice kaldırıldı).
Örnek üretilen metinler (gerçek veri, lokal data/yokatlas.db, salt-okunur betik)
Yöntem: bileşen modülü next/link yüzünden node'da yüklenemediği için betik @/lib/katalog'u gerçek DB'ye karşı çalıştırdı; metin yardımcıları dosyalardan birebir kopyalandı (betik scratchpad'de, commit'lenmedi).
Bölüm — Psikoloji (381 program, 8 sayfa)
| 1. sayfa (değişmedi) | sayfa/2 | sayfa/3 | |
|---|---|---|---|
| title | Psikoloji Taban Puanları ve Başarı Sıralamaları 2026 | Psikoloji Taban Puanları 2026 (Sıra 52.892–102.279, Sayfa 2) | Psikoloji Taban Puanları 2026 (Sıra 103.498–139.934, Sayfa 3) |
| description | Psikoloji 2025 yerleştirme verileri: 381 programın taban puanı ve sıralaması, 90 devlet / 291 vakıf. En iyi taban sıralaması 522. 2026 tercih rehberi. | Psikoloji taban puanları, sayfa 2: taban sırası 52.892–102.279 arası programlar. Toplam 381 programın 2025 yerleştirme verileri — taban puanı, başarı sıralaması ve kontenjan. | …sayfa 3: taban sırası 103.498–139.934 arası programlar. … |
| H1 | Psikoloji | Psikoloji — Sayfa 2 + (H1 içinde alt satır) Taban sırası 52.892–102.279 arası programlar | Psikoloji — Sayfa 3 + Taban sırası 103.498–139.934 arası programlar |
| breadcrumb | Ana sayfa › Bölümler › Psikoloji | Ana sayfa › Bölümler › Psikoloji (link) › Sayfa 2 | aynı desen |
Eski sayfa/2: title "Psikoloji Taban Puanları 2026 (Sayfa 2)", H1 "Psikoloji" (1. sayfayla aynıydı), breadcrumb'da üst bölüm linki yoktu.
Üniversite — İstanbul Medipol (428 program, 9 sayfa)
| 1. sayfa (değişmedi) | sayfa/2 | sayfa/3 | |
|---|---|---|---|
| title | İstanbul Medipol Üniversitesi Taban Puanları ve Başarı Sıralamaları 2026 | İstanbul Medipol Üniversitesi Taban Puanları 2026 (Sayfa 2) — değişmedi | … (Sayfa 3) |
| description | İstanbul Medipol Üniversitesi 2025 yerleştirme verileri: 428 programın taban puanları, başarı sıralamaları ve kontenjanları (İstanbul). 2026 tercih rehberi. | İstanbul Medipol Üniversitesi taban puanları, sayfa 2: Güzel Sanatlar Tasarım ve Mimarlık Fakültesi, Hukuk Fakültesi ve 3 birim daha. Toplam 428 programın 2025 yerleştirme verileri — taban puanı, başarı sıralaması ve kontenjan. | …sayfa 3: İşletme ve Yönetim Bilimleri Fakültesi ve Meslek Yüksekokulu. … |
| giriş paragrafı | (değişmedi) | mevcut cümle + "Bu sayfadaki birimler: Güzel Sanatlar Tasarım ve Mimarlık Fakültesi, Hukuk Fakültesi ve 3 birim daha." + ilk sayfa linki | aynı desen |
Tek birimli sayfa örneği (Beykent): sayfa/3 "…: Meslek Yüksekokulu (taban sırası 419.725–669.824 arası)." · sayfa/4 "…: Meslek Yüksekokulu (taban sırası 680.217–2.190.246 arası)."
Uç durumlar (tüm derin sayfalar üzerinde sayıldı): 304 bölüm derin sayfasının 21'i tümüyle taban verisiz → title "(Sayfa N)", description/H1 "taban verisi olmayan programlar"; 113'ü kısmen verisiz → "taban sırası X–Y arası programlar ile taban verisi olmayanlar"; 3'ünde min=max → "taban sırası X olan programlar". 363 üniversite derin sayfasında birim adı çıkmayan 0 (çıkmazsa eski description'a düşer; fakültesi boş satırlar "Diğer" grubunda kalır, ad listesine girmez). Dilim boşsa (geçersiz sayfa no) eski metne düşer — sayfa zaten notFound().
Önce → sonra metin tablosu (commit 2)
| Yer | Önce | Sonra |
|---|---|---|
cta-sira-form.tsx profilli kart başlığı (varsayılan) |
Sıralamanla nereye yerleşirsin? Saniyede gör. | Sıralamana yakın programlar hangileri? Saniyede gör. |
cta-sira-form.tsx profilsiz kart başlığı (varsayılan) |
Sıralamanla nereye yerleşirsin? Saniyede gör. | Sıralamana yakın programlar hangileri? Saniyede gör. |
Çekmece DrawerTitle (sr-only) |
Sıralamanla nereye yerleşirsin? | Sıralamana yakın programlar hangileri? |
| Çekmece H2 | Sıralamanla nereye yerleşirsin? | Sıralamana yakın programlar hangileri? |
universite-icerik.tsx baslik |
Sıralamanla {uni.ad} programlarına yerleşir misin? | Sıralaman {uni.ad} tabanlarının neresinde? |
bolum-icerik.tsx baslik |
(kart yoktu) | Sıralaman {bolum.ad} tabanlarının neresinde? |
Katalog aciklama (üniversite + bölüm, yalnız profilsiz kart) |
varsayılan paragraf | Bu tablodaki tabanlar geçmiş yerleştirmelerin sonucu; bu yıl değişebilir. Sıralamanı gir, tabanı sıralamana yakın programları risk seviyesine göre ayrılmış hâlde listeleyelim. Ücretsiz, üyelik gerekmez. |
| Varsayılan paragraflar (profilli + profilsiz + çekmece) | — | Aynen ("garanti dilimleri" dahil, dokunulmadı) |
| Buton metinleri / ikon deseni | — | Aynen (metin + sonda ArrowRight className="size-4") |
CtaSiraForm kullanım yerleri ve etkisi
| Yer | Prop | Etki |
|---|---|---|
src/app/rehber/page.tsx:45 |
yok | Varsayılan başlık değişti (kart + çekmece); paragraf aynı |
src/features/rehber/components/rehber-makale.tsx:100 |
yok | aynı |
src/features/katalog/components/bolum-listesi.tsx:101 (/bolumler) |
yok | aynı |
src/features/katalog/components/universite-listesi.tsx:94 (/universiteler) |
yok | aynı |
src/features/katalog/components/universite-icerik.tsx |
baslik + aciklama |
Yeni başlık + köprü cümlesi |
src/features/katalog/components/bolum-icerik.tsx (YENİ) |
baslik + aciklama |
Kart ilk kez geliyor; 1. ve derin sayfalarda |
Ana sayfa CtaSiraForm kullanmıyor (hero kendi formunu kullanıyor) → ana sayfa etkilenmedi. Çekmece başlığı baslik prop'undan bağımsız sabit (şartname gereği) → katalogda kart başlığı "…tabanlarının neresinde?", açılan çekmecede "Sıralamana yakın programlar hangileri?". Profilli ziyaretçide aciklama kullanılmaz (şartname: yalnız profilsiz kart); başlık baslik'tan gelir.
cta_form_goruntulendi: useGorunumOlayi çağrısı ve ref={formRef} bağlaması değişmedi (cta-sira-form.tsx:91,180). Yan etki (beklenen): olay artık /bolum/* pathname'lerinden de düşecek — payda büyür; Rybbit pathname'i zaten yazdığı için sayfa tipine göre ayrıştırılabilir.
Kabul kriterleri
| Kriter | Durum | Kanıt |
|---|---|---|
Bölüm sayfa>1: title+description+H1 taban sırası aralığı; null'lar hariç; tümü null yedeği |
Tamam | bolumSayfaDilimi + siraAraligiMetni; yukarıdaki örnekler + uç durum sayımı |
| Üniversite: description + giriş paragrafı birim adları (ilk 2 + "ve N birim daha") | Tamam | uniSayfaDilimi + fakulteOzeti; Medipol örnekleri |
| Bölüm breadcrumb'ı üniversite deseniyle (üst link + Sayfa N) | Tamam | bolum-icerik.tsx nav; bölüm nav'ının kendi link class'ları kullanıldı |
| Canonical/robots/sitemap/rota dosyaları değişmez | Tamam | git diff --stat e1bb482 HEAD → yalnız 4 dosya; path: satırlarında diff yok |
| 1. sayfa regresyonu yok | Tamam | 1. sayfa dalları diff'te yok; H1/paragraf 1. sayfada aynı metni üretir |
| Metadata ve gövde tek yardımcıdan | Tamam | ikisi de *SayfaDilimi() çağırıyor |
aciklama?: string, varsayılan paragraflar aynen |
Tamam | diff: paragraf metni kelimesi kelimesine aynı, yalnız aciklama ?? sarmalı |
| Başlıklar (varsayılan 4 yer + üniversite + bölüm) | Tamam | önce→sonra tablosu |
Kart /bolum'da aynı konum (mt-10, liste+sayfalama altı) |
Tamam | bölümde sayfalama BolumProgramListesi içinde; kart </section> sonrası <div className="mt-10"> |
grep -rniE "yerleşir misin|yerleşirsin" src → 0 |
Kendi dosyalarımda 0; dalda 1 isabet kalıyor | src/lib/ai/rapor.ts:166 riskNotuUret ("yüksek ihtimalle yerleşirsin") — LLM prompt'u değil ama benim dosyam da değil; P3 (cae2aaa, risk.ts:55'e taşıyıp düzeltti) merge edilince 0'a iner |
| Yeni badge/pill/modal yok | Tamam | yeni eleman: yalnız H1 içinde <span class="block …"> alt satır |
| Yeni metinlerde vaat yok | Tamam | yerleşirsin/garanti/olasılık geçmiyor |
Doğrulama
Her iki commit'te ayrı ayrı: pnpm exec next typegen → 0 · pnpm exec tsc --noEmit → 0 · pnpm lint → 0. pnpm build koşulmadı (şartname). Çalışma ağacı temiz; git add yalnız adı verilen dosyalarla yapıldı.
Sapmalar / en güvenli yorumlar
- Köprü sabiti
sayfalama.tsx'te (KATALOG_CTA_ACIKLAMA). Şartname bu dosyayı yalnız dilim yardımcısı için anmıştı. Gerekçe:cta-sira-form.tsx"use client"— istemci modülünden export edilen string sunucu bileşeninde değer olarak okunamaz (client reference olur);bolum-icerik↔universite-icerikçapraz import'u ise bölüm rotasının modül grafiğine üniversite sayfasının istemci bileşenlerini sokardı.sayfalama.tsxiki sayfanın zaten ortak import ettiği, yönergesiz küçük modül. Alternatif: cümleyi iki dosyada tekrarlamak (tek-kaynak ilkesine aykırı bulundu). - Tek birimli üniversite sayfalarına taban sırası aralığı eklendi (şartnamede yok). İlk koşuda 9 sayfanın description'ı sayfa numarası dışında komşusuyla aynı çıktı (Beykent 4-5, Nişantaşı 4 ve 7, Arel/Gelişim/Topkapı/Üsküdar 4, İzmir Kavram MYO 3 — 100+ programlı MYO'lar iki sayfayı tek başına dolduruyor). Dilim tek birimse "(taban sırası X–Y arası)" eklenince çakışma 0'a indi. Birim içinde satırlar zaten taban sırasına göre dizili olduğu için ifade doğru.
- Üniversite
<title>değişmedi (CEO: "~60 karakteri aşmasın"). 10 §B3'teki "uzunluk elverirse başlığa" seçeneği uygulanmadı: taban başlık zaten ~55–60 karakter, koşul neredeyse hiç sağlanmıyor. Üniversite derin sayfalarında farklılaşma description + gövdede. - Bölüm
<title>uzun bölüm adlarında uzuyor: en uzun 96 karakter ("Siyaset Bilimi ve Uluslararası İlişkiler Taban Puanları 2026 (Sıra 1.193.512–1.703.790, Sayfa 3)") + " — KolayTercih". Google keser; aralık kesilen kısımda kalabilir. CEO bölümde aralığın title'da olmasını açıkça istediği için kısaltma kuralı eklenmedi — Bilal/SEO kararı (ör. uzun adlarda "Taban Puanları 2026" yerine "2026"). - H1 biçimi: 10 §B3'teki öneri izlendi — "Psikoloji — Sayfa 2", aralık H1'in içinde blok alt satır (
text-lg sm:text-2xl, muted). Böylece H1 aralığı taşıyor (CEO) ama 5xl punto ile üç satıra yayılmıyor. - Lisans + önlisans karışan dilimde aralık min–max (CEO şartı): SAY/EA sırası ile TYT sırası aynı cümlede birleşiyor; teknik olarak doğru, anlamca karışık olabilir.
- Bölüm listesi istemci tarafında yeniden sıralanabiliyor (URL değişmeden); H1/paragraftaki aralık varsayılan (taban sırası) dizilimi anlatır. Kullanıcı "Puan"a göre sıralarsa görünen satırlar aralığın dışına çıkar — mevcut davranış, dokunulmadı.
Bilal'in tarayıcıda bakması gerekenler
- Mobilde derin bölüm H1'i:
/bolum/psikoloji/sayfa/2— "Psikoloji — Sayfa 2" + gri alt satır; uzun adlı bir bölümde de bak (/bolum/siyaset-bilimi-ve-uluslararasi-iliskiler/sayfa/3). - Bölüm breadcrumb'ı: derin sayfada "Psikoloji" tıklanabilir ve 1. sayfaya gidiyor mu; mobilde satır kırılması.
/bolum/psikolojialtındaki yeni CTA kartı: tablo + sayfalama + veri kaynağı satırının altında; başlık "Sıralaman Psikoloji tabanlarının neresinde?"; buton → çekmece açılıyor, sıra girişi → sihirbaz →/sonucakışı bozulmamış mı. Sayfada iki#cta-siralamayok (tek kart).- Üniversite sayfası kartı: uzun üniversite adında başlık iki satıra taşıyor mu ("Sıralaman Burdur Mehmet Akif Ersoy Üniversitesi tabanlarının neresinde?").
- Köprü cümlesini oku (metin kararı senin): "…risk seviyesine göre ayrılmış hâlde listeleyelim."
/sonucücretsiz tablosundaki dilim sekmeleriyle örtüşüyor mu. - Profilli hâl: sıralaman kayıtlıyken katalog kartı yeni başlığı + eski "Sıralaman kayıtlı…" paragrafını gösteriyor (köprü cümlesi bu hâlde görünmez — şartname).
/rehber, bir rehber yazısı,/bolumler,/universiteler: varsayılan başlık "Sıralamana yakın programlar hangileri? Saniyede gör." bağlama oturuyor mu.- Build sonrası kontrol (entegrasyon build'inde):
.next/server/app/bolum/psikoloji/sayfa/2.htmliçinde<link rel="canonical" …/sayfa/2>ve<meta name="robots" content="index, follow">aynı;<title>/<h1>yukarıdaki gibi. Deploy sonrası Search Console'da 2–3 derin sayfa için "dizine ekleme iste".
Yazılımcı A · K1 kapı ölçümü + K4 prototip
Özet (5 madde)
- K1 tamam, 3 commit,
gece/p5-kapi-olcum(tabane1bb482).program_eklendiartık yalnız gerçek eklemede atılıyor;kapi_acildi/kapi_kapatildieklendi;kullaniciTanitscript'ten önce kaybolmuyor. Davranış değişmedi: profilsiz + hâlâ kapıyı açıyor. - K4 tamam, tek commit,
gece/p6-arti-aninda-ekle(taban = P5 tepesi) —[Bilal onayı gerekir]. Profilsiz + programı anında ekliyor, kapı açılmıyor; 8 sn'lik toast "Sıralamamı gir →" ile kapıyı doğrudan sıra adımında açıyor. Yalnız iki dosya. - K4'ün en önemli riski (CEO varsayımı kısmen yanlış):
riskleriYenileyalnız kapı tamamlanınca çağrılıyor (profilTamamlandi). Profil kapı dışı yoldan yazılırsa (katalog sayfasının dibindekiCtaSiraForm, ana sayfahero-form,sihirbaz-cagri-karti, giriş sonrasıliste-senkron) önceden eklenmiş null riskler null kalır →/sonucharitasında turuncu ("az riskli") pin. Şartname "yeni kod yazma" dediği için düzeltmedim; 3 satırlık öneri aşağıda. - Profilsiz listenin tek yüzeyi çekmece.
/listemgiriş ister ve manuel listeyi değil YZ raporunu gösterir;secimlerim-panelihiçbir yere monte değil (ölü bileşen). Çekmece altındaki "Risk analizini biz yaptık / Her seçimin yerleşme riski hazır" kartı profilsiz listede yanlış beyan olur. - Her iki dalın tepesinde
next typegen+tsc --noEmit+pnpm linttemiz.pnpm buildkoşulmadı (talimat). Tarayıcıda hiçbir şey doğrulanmadı.
Commit listesi
| Dal | Hash | Başlık |
|---|---|---|
gece/p5-kapi-olcum |
4b87a3e |
fix(analitik): program_eklendi yalnız gerçek eklemede atılsın |
gece/p5-kapi-olcum |
67be93c |
feat(analitik): kapi_acildi + kapi_kapatildi olayları |
gece/p5-kapi-olcum |
643e41c |
fix(analitik): kullaniciTanit script'ten önce sessiz no-op olmasın |
gece/p6-arti-aninda-ekle |
1a87d89 |
feat(liste): ilk + profilsiz ziyaretçide anında eklesin [Bilal onayı gerekir] |
Worktree: .claude/worktrees/p5-kapi-olcum (şu an gece/p6-arti-aninda-ekle checkout'lu; P5 dalı 643e41c'de duruyor). Dokunulan dosyalar — K1: src/lib/analitik.ts, program-ekle-butonu.tsx, use-tercih-profili.ts, tercih-profili-kapisi.tsx. K4: use-tercih-profili.ts, program-ekle-butonu.tsx. Başka dosya yok; rybbit-identify.tsx, arama-funnel-karti.tsx vb. açıcılara dokunulmadı.
Olay tablosu
| Olay | Nerede atılıyor | Özellikler |
|---|---|---|
program_eklendi (P5) |
program-ekle-butonu.tsx handleClick, yalnız sonuc.eklendi === true |
{kaynak, yol: "dogrudan"} |
program_eklendi (P5) |
use-tercih-profili.ts profilTamamlandi, bekleyen program için ekle() true döndüyse |
{kaynak: bekleyen.kaynak, yol: "kapi"} |
kapi_acildi |
use-tercih-profili.ts kapiyiAc() — depodaki tek açılış noktası; üç açıcı da buradan geçer |
{tetik}: programEkleIste→arti · profilDuzenlemeyiAc→duzenle · profilToplamaAc(hedef, dogrudanSira, tetik?)→ verilen değer, yoksa hedeften sonuc/sihirbaz, o da yoksa diger |
kapi_kapatildi |
tercih-profili-kapisi.tsx vazgec() — bileşendeki tek nokta (Dialog onOpenChange(false) = X / dışarı tıklama / Esc, giriş adımı "Vazgeç", sıra adımı "Vazgeç") |
{adim: giris|sira|sihirbaz, tetik} |
program_eklendi (P6) |
buton, aynı nokta | {kaynak, yol: "dogrudan", profilli: "evet"|"hayir"} |
kapi_acildi (P6) |
toast aksiyonu → profilToplamaAc(null, true, "arti_toast") |
{tetik: "arti_toast"} (P6'da arti artık hiç atılmaz) |
Hiçbir olayda ham sıra / e-posta / program adı yok. tetik türetmesi sayesinde sonucaGitIste (sonuc) ve arama-funnel-karti (sihirbaz) dosyalarına dokunmadan doğru değeri alıyor; diger bugün hiçbir açıcıdan çıkmıyor (ileride profilToplamaAc() argümansız çağrılırsa düşer).
Kabul kriterleri — K1
| # | Kriter | Sonuç | Kanıt |
|---|---|---|---|
| 1 | program_eklendi yalnız gerçek eklemede; kapiAcildi dalında atılmaz |
Geçti | Buton: else if (sonuc.eklendi); kapiAcildi sonucu hiçbir dala girmiyor. profilTamamlandi: const eklendi = ekle(...); if (eklendi) olay(..., {yol: "kapi"}) |
| 2 | kapi_acildi {tetik} + kapi_kapatildi {adim, tetik}; kapatıldı yalnız tamamlanmadan |
Geçti (kod incelemesi) | Tamamlanma yolu: secimleriTamamla → profilTamamlandi depoda acik:false yazar; profilKapisiniKapat/vazgec çağrılmaz. Radix Dialog kontrollü open prop'u değişince onOpenChange tetiklemez (yalnız kullanıcı etkileşiminde) → olay atılmaz. adim, üst bileşendeki adimRef'te; KapıIcerik mount'ta ve her adimaGec'te bildirir (key ile remount'ta başa sarar). vazgec if (!acik) return ile çift atışa karşı korumalı |
| 3 | kullaniciTanit tek slot, olaylardan önce; kullaniciTemizle slotu siler |
Geçti | Scratchpad'de tsx betiği (commit'lenmedi): script yokken olay(sonuc_goruntulendi) → kullaniciTanit(u1) → kullaniciTanit(u2); script gelince çağrı sırası ["identify:u2","event:sonuc_goruntulendi"] (u1 ezildi, kimlik olaydan önce). Script varken kullaniciTanit(u3) doğrudan, kullaniciTemizle → clear. Script 10 sn'de gelmezse slot da atılır (kuyrukKapali). rybbit-identify.tsx diff'te yok |
| 4 | OlayAdi'na yalnız 2 ad + seri kırılması yorumu |
Geçti | git diff e1bb482..643e41c -- src/lib/analitik.ts: birlikte yalnız kapi_acildi, kapi_kapatildi; program_eklendi üstünde "önce = + tıklaması, sonra = gerçek ekleme; seriler karşılaştırılamaz" notu |
| 5 | Davranış değişmez; grep -rn "program_eklendi" src → 2 atış + tip |
Geçti | grep çıktısı: program-ekle-butonu.tsx:59, use-tercih-profili.ts:289, analitik.ts:26. Açıcıların durum yazımı kapiyiAc'a taşındı ama yazılan alanlar birebir aynı (+tetik) |
Kabul kriterleri — K4
| # | Kriter | Sonuç | Kanıt |
|---|---|---|---|
| 1 | Profilsiz: hemen ekle, kapı açma, profilsiz: true; olayda profilli |
Geçti | programEkleIste'de kapı dalı kalktı; tek ekleme yolu, profilsiz = !tercihProfiliTamamlandiMi(). Katalogda adaySira yok → programdanManuelTercih(..., null) → risk null. kapiAcildi alanı tipte kaldı (hep false) |
| 2 | Toast: sabit id, ~8 sn, başlık/açıklama/aksiyon birebir, sonda ArrowRight |
Geçti | sonner Action.label: React.ReactNode (node_modules/sonner/dist/index.d.ts:44) → <span className="inline-flex items-center gap-1">Sıralamamı gir <ArrowRight className="size-4" aria-hidden /></span>. id: "profilsiz-ekleme", duration: 8000, toast.success. Metin başında ikon yok, Sparkles yok (soldaki onay işareti sonner'ın kendi success ikonu, buton etiketi değil) |
| 3 | Profil girilince riskleriYenile null'ları doldurur (yeni kod yok) |
Kısmen | Toast → kapı yolu: profilTamamlandi ilk iş riskleriYenile(profil) çağırır → tüm liste riskHesapla(efektifSira, profil.sira) ile yeniden yazılır. Ama grep -rn riskleriYenile src → tek çağrı yeri bu. Kapı dışı 4 profil yazma yolu listeyi yenilemiyor (bkz. Riskler #1) |
| 4 | Tüketici envanteri | Aşağıda | — |
| 5 | SEMA, meraklisina-icerik.tsx, kapı bileşeni, sihirbaz adımları değişmedi |
Geçti | git diff 643e41c..1a87d89 --stat → yalnız 2 dosya. + kapısı /meraklisina şemasında yok (CEO §1 tablosu) → AGENTS.md şema senkron kuralı tetiklenmez |
tsc / lint
| Dal tepesi | next typegen |
tsc --noEmit |
pnpm lint |
|---|---|---|---|
gece/p5-kapi-olcum @ 643e41c |
başarılı | 0 hata | 0 hata / 0 uyarı |
gece/p6-arti-aninda-ekle @ 1a87d89 |
başarılı | 0 hata | 0 hata / 0 uyarı |
Ara commit'ler (4b87a3e, 67be93c) de commit anında tsc + lint temizdi. pnpm build koşulmadı.
K4 tüketici envanteri — profilsiz + dolu liste
| Yüzey | Ne gösteriyor | Durum |
|---|---|---|
Navbar listem-butonu.tsx |
İlk eklemede belirir, turuncu sayaç rozeti | Sorun yok — ekleme onayının kalıcı izi (toast kaybolunca bu kalıyor) |
Çekmece satırı liste-cekmecesi.tsx:398 |
tercih.risk ? nokta : null → null riskte nokta yok, satır düzgün |
Kırılmıyor. Ama başlıktaki renk lejandı (yeşil/turuncu/kırmızı) noktasız listede boşa duruyor |
Çekmece alt kartı liste-cekmecesi.tsx:~271 |
"Risk analizini biz yaptık — Her seçimin yerleşme riski hazır" + "Listemde aç" → /listem |
Yanıltıcı: profilsiz listede risk yok; link de girişsizi /giris'e atar, girişliye manuel listeyi değil YZ raporunu (ya da boş CTA'yı) gösterir |
| Çekmece + (kesik çizgili) | sonucaGitIste() → profilsizde kapı (tetik: sonuc) |
Çalışır; sıra girişine ikinci doğal yol |
secimlerim-paneli.tsx |
Null riski karşılıyor (:223), profilsizde "Tercih profilin oluşunca uyum notları görünür" |
Hiçbir yere monte değil (grep -rn SecimlerimPaneli src → yalnız kendi dosyası). Ölü kod; profilsiz listenin tam sayfa görünümü fiilen yok |
/listem (listem-icerik → listem-govde) |
verifySession → girişsiz /giris'e yönlenir; girişlide YZ raporu ya da ListemBosCta. Manuel liste burada gösterilmiyor |
CEO'nun "profilsiz /listem" kontrol maddesi karşılıksız: bakılacak ekran çekmece |
kaydet-banner |
Girişsiz + ≥3 seçim + /sonuc ve kromsuz sayfalar dışında |
Artık profilsiz ziyaretçi için ulaşılabilir (eskiden kapı yüzünden 3'e çıkılamıyordu). Metni risk iddia etmiyor. Toast üstte (top-center), banner altta → çakışma yok |
manuel-harita.tsx:33 |
t.risk ?? "az-riskli" → null risk turuncu pin |
Yalnız /sonuc'ta monte. Profilsiz /sonuc = SiraGerekli (harita yok) → saf profilsizde görünmez. Görünür olduğu iki durum: (a) eski ?sira= linkiyle profilsiz /sonuc, (b) Riskler #1 — profil kapı dışından girilince null'lar kalır → katalogdan eklenenler yanlış renkle (turuncu, "az riskli") pinlenir |
liste-senkron / liste-dogrula.ts |
risk: null doğrulamadan geçiyor, sunucuya null yazılıyor |
Kırılmıyor; girişte sunucudan profil gelirse (tercihProfiliYaz) riskler yine yenilenmiyor (#1) |
K4 riskleri
- Null riskler kapı dışı profil girişinde kalıcı. En olası senaryo tam da hedef kitle: üniversite sayfasında + → toast'ı kaçırır → sayfa dibindeki
CtaSiraForm'a sırasını yazar →/sonucharitasında eklediği programlar turuncu. Önerilen düzeltme (K4 commit'ine ek, sahip olunan dosyada, ~3 satır — yazılmadı):use-tercih-profili.tsyukle()içindekiPROFIL_DEGISTI_EVENTdinleyicisindeprofiliTazele()sonrasıif (durum.profil) riskleriYenile(durum.profil);. Alternatif/tamamlayıcı:manuel-harita.tsx:33'te null riski nötr (gri) pinle göstermek (Bilal/tasarım kararı). - Toast mobilde görünürlük.
Toaster position="top-center"; %93 mobil, + genelde ekranın alt yarısında. 8 sn sonra tek kalıcı iz navbar'daki sayaç. Aksiyon butonu sonner'ın 24 px yüksekliğindeki varsayılan butonu — dokunma alanı küçük,size-4ok 12 px metnin yanında büyük durabilir. Gözle bakılmalı. - Ölü yol:
bekleyen/ "Kaydet ve programı ekle" etiketi /program_eklendi {yol:"kapi"}P6'da erişilemez (kimsebekleyenyazmıyor). Bilerek bırakıldı: revert tek commit kalsın, kapı bileşenine dokunulmasın. Karar "evet" olursa ayrı temizlik commit'i. - Seri: P6 canlıya çıkarsa
kapi_acildi{tetik:arti}sıfıra iner, yerinearti_toastgelir; Huni C'nin yeni tanımıprogram_eklendi{profilli:hayir}→kapi_acildi{arti_toast}→sira_girildi{kaynak:kapi}. - Art arda +'larda sabit
idtoast'ı yeniler (yığılmaz) ama süre her seferinde baştan başlar — istenen davranış.
Sapmalar / yorumlar
kapi_acildidepodan,kapi_kapatildibileşenden. Şartnamedeki "olay, kapı bileşeninde tek noktadan atılır" cümlesinikapi_kapatildiiçin okudum (adımı yalnız bileşen bilir).kapi_acildidepodaki tek açılış fonksiyonundan atılıyor: bileşende mount effect'iyle atmak,keyprofil değişince remount ettiği için çift sayıma açıktı.tetikvarsayılanı hedeften türetiliyor (tetik ?? hedef ?? "diger"): şartname "her açıcı kendi değerini yazar" diyor amaarama-funnel-karti.tsxsahip olunan dosyalarda değil; türetme aynı sonucu dosyaya dokunmadan veriyor.KapıIcerik'e iki prop eklendi (onAdimDegisti,onVazgec) ve bir mount effect'i (eslint-disable-next-line react-hooks/exhaustive-deps, repoda emsali var). Görsel/metin değişikliği yok.- K4'te
adaySiraverilmişse (yalnız/sonuctablosu, eski?sira=linki) risk null değil o sıradan hesaplanıyor — mevcutprogramdanManuelTercihsemantiği korundu; katalogda her zaman null. - K4 toast'ı
toast.success(mevcut iki uyarıtoast.info); "eklendi" olumlu onay olduğu için.
Bilal'in elle bakması gerekenler
- K1 deploy tarihini yaz (karar #13) —
program_eklendiserisi o gün kırılıyor. - K4, telefonda 10 dk: üniversite sayfasında profilsiz + → toast görünüyor mu, okunuyor mu, "Sıralamamı gir" dokunulabilir mi ve kapıyı sıra adımında açıyor mu; kapıyı tamamlayınca çekmecede noktalar geliyor mu.
- Aynı testin kötü yolu: profilsiz 2 program ekle → toast'a dokunma → sayfa dibindeki forma sıranı gir →
/sonucharitasında pinlerin rengine ve çekmecede noktaların gelmediğine bak (Risk #1). K4'e "evet" diyeceksen 3 satırlık düzeltmeyi de iste. - Çekmece alt kartındaki "Risk analizini biz yaptık" metni profilsiz listede kalsın mı (metin/koşul kararı).
- Rybbit canlıda:
kapi_kapatildi'nin tamamlanan kapıda düşmediğini bir kez kendi oturumunla doğrula (kod incelemesiyle gösterildi, tarayıcıda denenmedi); OAuth dönüşündesonuc_goruntulendi'nin tanımlı kullanıcıya yazıldığına bak (commit 3).
Blog: universite-okurken-tekrar-yks
Yazar: SEO/GEO içerik yazarı (gece vardiyası, 2. tur · B1) · Worktree .claude/worktrees/rehber-yazilari, dal gece/rehber-yazilari · yalnız content/rehber/*.md · push yok, pnpm build koşulmadı (src/ değişmedi).
Özet (5 madde)
- İki commit, şartnamedeki sırayla:
9c7ea13fix(rehber)(küçük düzeltmeler) →2602b6ffeat(rehber): universite-okurken-tekrar-yks yazısı(yeni yazı + 3 iç link, en tepede). Bilal yazıyı almazsagece/rehber-yazilari~1=9c7ea13; linkler de gider, 404 kalmaz. - Yazı: ~1.250 kelime (şema ve Kaynaklar hariç), 1
flowchart TD(%% aria+%% altyazi), 1 tablo (devam / kayıt dondurma / kayıt sildirme × hak / bedel / geri dönüş), 5 soruluk SSS, Kaynaklar (6 kaynak, erişim tarihli), 7 farklı iç hedef (mezuna-kalmak…,yatay-gecis…,obp-nedir…,hazirlik-sinifi…,hedef-siralama…,olu-tercih…+/bolumler,/tercih-robotu). Frontmatter/şema çitisrc/lib/rehber.tsregex'leriyle node'da doğrulandı; 28 yazıda 118/rehber/*linki, 0 ölü. - Omurga cümleleri bu gece birincil metinden tekrar okundu (önceki yazarın scratchpad'deki pypdf çıktıları + YÖK ilkeleri PDF'i bu oturumda yeniden indirilip okundu): kayıtlı olmak tercih/yerleştirmeye engel değil; yeni kayıt için ilişik kesme şart (YKS Kılavuzu b.10); başvuru formunda "Bir yükseköğretim programına kayıtlıyım" seçeneği (23. alan, kod 6); Ek Madde-1'in ara sınıflar/son sınıf dâhil olduğu (YÖK ilkeleri A.7).
- Kanibalizasyon sınırı korundu: OBP kuralı yeniden anlatılmadı (tek paragraf özet + 2 link); Ek Madde-1'in kontenjan oranı/başvuru dönemi maddeleri tekrar edilmedi,
mezuna-kalmak…'a bırakıldı. Bu yazıya özgü olanlar: okuyan öğrenciyi ilgilendiren ilke maddeleri (hangi yılın puanı, intibak, taban oluşmamış program, özel koşul/dil şartı, vakıf bursu kararı), not ortalamasıyla kurumlar arası geçişin yönetmelik şartları, sınava giriş→tercih→ilişik kesme sırası. - Vaat/kaygı dili yok; askerlik/tecil, harç/ücret rakamı, 2027 tarihi yok; dilim adı ilk geçişte "güvenli (halk arasında "garanti tercih")"; "dilimler yerleşme olasılığı değil" notu var.
Commit 1 — 9c7ea13 ayrıntı
hedef-siralama-nasil-belirlenir.md:83: "; üründe dilimin adı da böyle geçer" yan cümlesi silindi (parantez "(halk arasındaki adıyla garanti tercih)" olarak kaldı).taban-siralamalar-nasil-degisir.md:%% aria("beş yılın (2021–2025) tabanı filmdir. Beş yıl üst üste…"), şema düğümü ("5 yılın tabanı = film"), kenar etiketi ("5 yıl dar bantta"), gövde :42 ("5 yılın (2021–2025) tabanı filmdir"), :44 ("5 yıl üst üste dar bantta"), :53 ("son 5 yılın (2021–2025) tabanına bak"). Dokunulmayan:%% altyazi"en az 3-4 yıla bak" (genel okuma tavsiyesi; CEO notu).- DB teyidi (
sqlite3 -readonly data/yokatlas.db):programstablosundasira2021…sira2025kolonları var; dolu satır sayıları 2021: 11.450 · 2022: 18.086 · 2023: 18.373 · 2024: 20.805 · 2025: 17.994 (toplam 23.610 program). Ürün satır başlığı da "Son 5 yıl" (bolum-program-listesi.tsx:160,program-tablosu.tsx:242).
Commit 2 — 2602b6f iç linkler (3 dosya, şartnamedeki üst sınır)
| Dosya | Değişiklik |
|---|---|
mezuna-kalmak-mi-kayit-olmak-mi.md |
"Üniversitede kayıtlıyken YKS'ye girebilir misin?" paragrafının sonuna tek cümle + link |
yerlesemedim-ne-yapmaliyim.md |
Yol 3 girişine yarım cümle + link |
yatay-gecis-cap-yandal.md |
"4) Yeniden sınava girmek" 2. madde yeniden yazıldı + link + guncelleme: 2026-09-21. Eski cümle "ertesi yıl yerleştiğinde eski kaydın silinir" diyordu; kılavuzda böyle bir otomatik silme hükmü yok (b.10 yalnızca "ilişiğini kesmezse yeni programa kayıt yaptıramaz" diyor). Cümle kılavuz ifadesine çekildi; eski cümledeki yks-tercih-takvimi-2026 linki düştü. Dikkat: Bilal commit 2'yi almazsa bu teyitsiz cümle geri gelir — o durumda elle düzeltilmeli. |
Doğrulanan bilgiler + kaynaklar (hepsi 21.09.2026 gecesi birincil metinden okundu)
| Yazıdaki iddia | Kaynak |
|---|---|
| Kayıtlı olmak YKS (ÖZYES dâhil) tercih ve yerleştirmesinde bir programa yerleştirilmeye engel değil; aynı anda iki örgün ön lisans ya da iki örgün lisansa kayıt/devam yok; ilişiğini kesmeyen yeni yerleştirildiği programa kayıt yaptıramaz | 2026-YKS Kılavuzu b.10 (kılavuz s.45 / PDF s.50) — sayfa: https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu . Aynı uyarı geçerli: ÖSYM'deki asıl PDF 10 MB sınırını aşıyor; metin ÖSYM e-imza ibareli MEB kopyasından (önceki yazarın kullandığı URL) okundu |
| Başvuruda öğrenim durumu seçeneği "Bir yükseköğretim programına kayıtlıyım" (kod 6); ayrıca "yerleştirildim fakat kayıt olmadım" (5), "kaydım silindi" (9) | Aynı kılavuz, başvuru bilgileri 23. alan "Öğrenim Durumu ve Kodu" (PDF s.13) |
| OBP: bir önceki yılın YKS'siyle yerleşen, "kayıt olsun veya olmasın"; 2026-YKS ile yerleşen 2027-YKS'ye girerse katsayı yarıya | YKS Kılavuzu b.4.2 (PDF s.38) · Kontenjan Kılavuzu b.1.3 · SSS 51–52 (URL'ler önceki tabloda) |
| ÖSYM uyarısı: yerleşirsen bir sonraki yıl katsayı yarıya ineceğinden devam etmeyi düşünmediğin programı yazma | Kontenjan Kılavuzu, tercih uyarıları 2-ç (PDF s.19–20) |
| Ek Madde-1: kayıt yılındaki puan ≥ hedefin o yılki tabanı, puan türü (A.2) · bir kez (A.5) · hazırlık, ara sınıflar ve son sınıf dâhil; intibakı ilgili kurullar yapar (A.7) · fazla başvuruda puanı yüksek olandan (A.11) · hedefin özel koşulları (A.16) · kayıt yılında öğrenci almamış programa geçiş yok (A.17) · yabancı dil şartı (A.18) · yalnız yerleştiği yıldaki puan, başarı şartı yok (A.20) · vakıfta ücretli programa geçiş, burs kararı kurumun (A.21) · taban puanlar ÖSYM en küçük/en büyük puanlar yayınında (A.15) | YÖK "Güz ve Bahar Dönemi Ek Madde 1 Uygulama İlkeleri" — https://egitim.yok.gov.tr/tr/document/2853 (PDF bu oturumda WebFetch ile indirildi, 7 sayfa pypdf ile okundu; üst veri 20.05.2026) |
| Kurumlar arası yatay geçiş: aynı düzeydeki eşdeğer programlar, YÖK'ün yayımladığı kontenjanlar (m.11/1); GNO en az 100 üzerinden 60 (m.11/2) · hazırlık sınıfına, ön lisans ilk/son yarıyıla, lisans ilk iki/son iki yarıyıla geçiş yok (m.6/1) · örgünde aynı düzeydeki birden fazla programa kayıt yapılamaz (m.23/1) · Ek Madde 1 metni | Yönetmelik — https://www.mevzuat.gov.tr/mevzuat?MevzuatNo=13948&MevzuatTur=7&MevzuatTertip=5 (önceki yazarın curl ile aldığı, RG-28/2/2026 değişikliğini içeren güncel metinden okundu) |
| Kayıt dondurma örneği: akademik takvime bağlı son gün; talebi Öğrenci İşleri değerlendirir; dondurulan yarıyılda derse kaydolunamaz | Karabük Üni. yönetmeliği m.27/1–2 — https://www.mevzuat.gov.tr/anasayfa/MevzuatFihristDetayIframe?MevzuatTur=8&MevzuatNo=38896&MevzuatTertip=5 . Yazıda açıkça "bir örnek" diye etiketli |
Çıkarım olan cümleler (kaynakta bu kelimelerle yok): (a) "kural 'kayıt olsun veya olmasın' diye yazıldığı için kaydının durumu bunu değiştirmez" — mezuna-kalmak… yazısındaki aynı çıkarım; (b) "2026 kılavuzlarındaki kural aynı kalırsa her yeni yerleştirme bir sonraki yılın sınavı için OBP bedelini yeniden doğurur" — koşullu yazıldı; (c) "kaydı sildirirsen kayıtlı öğrenciye açık iki yatay geçiş kapısı kapanır" — A.7 ve m.11/2'nin "kayıtlı" şartından; (d) "yerleşemezsen kayıtla ilgili yapman gereken bir işlem doğmaz" — kılavuz yalnızca yeni kayıt anına şart koyduğu için.
Çıkarılan / yazılmayan iddialar
- Yerleşip yeni programa kayıt yaptırmayan öğrencinin eski kaydının durumu: kılavuzda hüküm yok → "eski kaydın yerinde durur" ya da "silinir" yazılmadı; şema düğümü ve SSS yalnızca "ilişik kesme şartı doğmaz" diyor.
- Kayıt sildirmenin geri dönüşü: "geri dönüş yok" diye kural cümlesi kurulmadı (kaynak okunmadı); tablo "geri dönüş varmış gibi plan kurma, öğrenci işlerine yazılı sor" diyor.
- Kayıt dondurulmuşken Ek Madde-1 / yatay geçişe başvurulabilir mi; "YKS'ye hazırlık" gerekçesi kabul edilir mi; dondurulan dönemde katkı payı/ücret: kaynak yok → yazılmadı (SSS'de "genel cevabı yok" denildi).
- Eski bölümde geçilen derslerin yeni bölümde saydırılması (muafiyet/intibak): teyit yok → yalnızca "öğrenci işlerine sor" listesinde anıldı.
- Ek Madde-1 güz başvuru tarihleri (A.10: 1–15 Ağustos), %30/90 kontenjan ayrıntısı: ilki CEO'nun "tarih yok" kuralı, ikincisi tekrar olmasın diye alınmadı.
- İkinci üniversite/açıköğretim, farklı düzeylerde eşzamanlı öğrenim (kılavuzdaki Anadolu Üni. esasları), askerlik/tecil, KYK/burs-yurt etkisi, harç/ücret rakamı, 2027 takvimi: kapsam dışı/teyitsiz → yazılmadı.
- Plan taslağındaki GEO cümlesinin ikinci yarısı ("eski kaydını sildirerek yenisine kayıt olur") kılavuzun kelimesine çekildi: "ilişiğini kesmen gerekir".
Yayın öncesi kontrol listesi (Bilal)
- Kaynaklar'daki linkleri aç, üç kural cümlesini gözle teyit et: YKS Kılavuzu b.10 (ÖSYM'deki asıl PDF'te) ve 23. alan kod 6; YÖK ilkeleri A.7, A.17, A.20, A.21; Yönetmelik m.6/1, m.11/1–2, m.23/1.
- Şemayı gör: 13 düğüm, bu setteki en uzun şema.
mermaid.parsenode'da DOM olmadığı için koşturulamadı (mevcut yazılarda da aynı hata); yalnızca mevcut şemalarda kullanılan sözdizimi kullanıldı (yuvarlak/eşkenar düğüm, etiketli kenar,classDef). Mobilde okunaklı mı bak; uzunsaD1/D2/D3 → Rkısmı kesilip tabloya bırakılabilir. Renkler: Ek Madde-1 yeşil ("Sınavsız kapı" etiketiyle), yatay geçiş/okurken YKS/devam/dondurma sarı, kayıt sildirme kırmızı ("Öğrencilik biter" etiketiyle). tarih: görev tanımı gereği2026-09-21; CEO §2-B12026-09-22diyor → gerçek yayın gününe çek (yatay-gecis-cap-yandal.md'deki yeniguncellemesatırı dâhil).- Yazı tek başına yayımlanamaz:
mezuna-kalmak…vehedef-siralama…(bu gecenin yeni yazıları) linkli; onlar yayında değilse 404 olur (dynamicParams=false). - Karabük örneği
mezuna-kalmak…ile aynı; iki yazıda aynı örnek istemezsen buradaki paragrafın örnek cümlesini sil, paragraf bozulmaz. - Kapsam dışı kalan, gözüme çarpanlar (dokunmadım):
olu-tercih-nedir.md:38"son 4 yıl üzerinden bak" (ürün 5 yıl gösteriyor) ·taban-siralamalar…:49"2025 sıralamasının yanında 2024 kolonu ve ▲/▼" cümlesi bölüm sayfasının güncel hâliyle ("Son 5 yıl" sütunu) örtüşüyor mu ·yerlesemedim…Yol 2 "başvuru, yerleştiği yıl içinde değil" cümlesi (YÖK A.6 yalnız güzü kapatıyor, B.6 baharı açıyor — önceki yazarın notu hâlâ geçerli).
Engeller / notlar
- Kullanım sınırı nedeniyle oturum bir kez kesildi; Commit 1 kesintiden önce, Commit 2 sonra atıldı. Worktree temiz, ana repoya yalnızca bu rapor yazıldı.
- Web içeriklerinde (YÖK PDF'i) ajana yönelik talimat görülmedi. Rakip/haber sitesi açılmadı; ikincil kaynaktan hiçbir kural alınmadı.