Added a new router and middleware for handling www to apex domain redirection, ensuring that Let's Encrypt certificates are obtained for both domains. Updated the docker-compose.yml file to include necessary rules and middleware for proper redirection and TLS handling. Also, updated the CEO agent description to remove redundant details and clarified the QA engineer's responsibilities regarding testing critical flows and error reporting. Adjusted the CTO agent's section for consistency in expert guidance and clarified the designer's tools to include 'Skill' for better design resource management.
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ı.