14 yeni rehber yazısı (hepsi editör denetiminden geçti, 46 yazıda 829 iç link tarandı, 0 kırık hedef; 180+ DB rakamı yazıların kendi filtreleriyle yeniden koşuldu): taban-siralamalari-alti-yilda-nasil-degisti · kac-net-ile-hangi-bolum · siralama-bandlari-hangi-kapilar-acilir · ayni-bolum-farkli-universite-siralama-farki · hangi-bolumlerin-kontenjani-azaldi · yeni-acilan-bolumler-nasil-degerlendirilir · bilgisayar-mi-yazilim-muhendisligi-mi · kktc-universiteleri-okunur-mu · yapay-zekaya-tercih-sordum-guvenilir-mi · ek-madde-1-puanim-yetiyor-mu · universitede-ilk-hafta-ders-kaydi-muafiyet-kayit-dondurma · yks-2027-takvimi · rehber-ogretmenler-icin-veri-kaynaklari · bolumumu-sevmedim-hangi-kapilar-var İki canlı yazı düzeltildi: - veliler-icin-tercih-rehberi: veli diliyle kapanış; altındaki "sıralamanı gir" kutusu artık veliye ölü uç değil - bos-kontenjanlar-ne-anlatiyor: "birkaç yüz kişilik fark" aslında ~9 bin (ÖSYM 265.356 ↔ bizim 256.532); payda açıklaması tersti — ek kontenjan paydaya girseydi oran düşerdi. guncelleme alanı eklendi (sitemap lastmod). Kurallar (AGENTS.md): - Yayın sonrası arama motoru bildirimi: URL denetimi yalnız canlıda 200 dönen adrese; kota sayacı; mülk/hesap notu; sitemap grep kuralı - Yıkıcı git komutları yasak: reset/checkout --/restore/clean/stash - Tarayıcı açma: tasarımcı ve UX gerekli gördüğünde açabilir (yetenek için .claude/agents/tasarimci.md'ye tarayıcı araçları eklendi) docs/gece-vardiyasi/2026-09-22/ — 34 rapor: CEO kararları ve kapanış turu, marka/ödeme analizi, sıfır ödeme teşhisi, SEO konu planı, veri kalitesi, editör denetimi, CTO şartnamesi, yazılımcı ve güvenlik raporları, SABAH-OZETI. docs/ekip/YAYIN-KUYRUGU.md — Search Console bildirim kuyruğu. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
8.4 KiB
06 — CTO şartnamesi: P0-ek + P1–P4
Hazırlayan: CTO ajanı · 22 Eyl 2026 · Taban commit: main @ bda4d07
Kaynak kararlar: 05-ceo-karari.md, docs/ekip/KARARLAR.md (22 Eyl iki kayıt)
Doğrulama koşusu (CTO): next typegen → tsc --noEmit → pnpm lint, baseline yeşil (Bilal'in kirli ağacı dâhil).
Özet
.txtaçığı gerçekten duruyordu: birincil yol (uret()içindekirouter.replace) ölü sunucuda Next'in kendi kodunda tam-sayfa gezinmeye düşüyor. P0-ek olarak 22 Eyl'de orkestratör tarafından uygulandı (aşağıda).liste-uretici.tsxçakışması (a) ile çözüldü: P2 o dosyaya hiç dokunmuyor, olaylistem-icerik.tsx'e monte edilen yeni bir istemci bileşeninden atılıyor. Bedeli:yeniden_denemebu turda ölçülmüyor.src/lib/analitik.tsyalnız P2'nin. P3/P4 yeni olay adı eklemiyor → dört paketin dosya kümesi kesişimi sıfır, dördü paralel.- İki itiraz: (İ1) P3'te Ö1'in ikinci yarısı yapılmamalı — ölü kod olur ve
hedefsözleşmesini bozar. (İ4) P4'te giriş callback'i/listemolmamalı — bağlam kaybı, ve?uret=1taşırsa rızasız 3 kredi yakar; callback bulunulan sayfa olmalı. /meraklisinaşeması etkilenmiyor (doğrulandı):SEMAadım/havuz/iskelet/gevşetme kurallarını belgeliyor, P3 yalnız kapı kapandıktan sonraki gezinme hedefini değiştiriyor.
P0-ek — birincil yol koruması (UYGULANDI, 22 Eyl)
Bulgu (Next 16.2.10 kaynağından doğrulandı):
fetch-server-response.js— cevap flight değilse ya da!res.okisedoMpaNavigation(url)→ string döner (bağlantı hiç kurulamazsa catch dalı da aynısını yapar ve konsolaFailed to fetch RSC payload for … Falling back to browser navigation.basar).segment-cache/navigation.js—typeof result === "string"→completeHardNavigation→pushRef.mpaNavigation = true.app-router.js—mpaNavigationdalındalocation.replace(canonicalUrl).
Yani router.replace ölü sunucuda tam olarak kaçınılmak istenen tam-sayfa gezinmeyi yapıyordu; ters vekilin düz metin 502 gövdesi tarayıcıya iniyor, WebKit listem.txt olarak indiriyordu. Üstelik iki yol birbirini eziyordu: RSC fetch'i 6 sn'den uzun asılırsa önce supap SunucuYokEkrani'nı basıyor, sonra MPA dalı o ekranı üstünden siliyordu.
Uygulanan düzeltme (src/features/rapor/components/liste-uretici.tsx):
sunucuAyaktaMi()yoklamasısetDurum({ad:"geciliyor"})verouter.replaceöncesine taşındı; sunucu ölüyseliste_uretim_hata {kod:"SUNUCUYA_ULASILAMIYOR"}atılıpsunucu-yokekranı basılıyor, gezinme hiç başlamıyor.- Yoklama bilerek
"geciliyor"dan önce: o durum 6 sn'lik supap zamanlayıcısını kuruyor; sonrasına konsa iki yol yarışıp aynı ekranı iki kez yazardı. sunucuAyaktaMizamanaşımı sertleştirildi:AbortSignal.timeoutyoksa (eski Safari)Promise.raceile 5 sn'lik yedek zamanaşımı; kaybeden fetch'in sonradan reddetmesi.catchile yutuluyor (sahipsiz reddetme olmasın). Yoklama artık mutlu yolda koştuğu için asılması her başarılı üretimi kilitlerdi.- Emniyet supabındaki mevcut yoklama kaldı (ikinci kalkan).
Dürüst sınır: ön-yoklama pencereyi saniyelerden milisaniyelere indirir, kapatmaz — konteyner yoklamadan sonra, /listem render'ı sırasında ölürse yine 502 gelir. Kalıcı çözüm Dockerfile'daki heap tavanıdır (NODE_OPTIONS=--max-old-space-size=768); bu ek, "kredisi yanan kullanıcı ekranda .txt bulmasın" garantisidir.
Durum: Bilal'in commit'lenmemiş işinin üstüne, çalışma ağacında uygulandı. typegen + tsc + lint temiz. Bilal'in kendi commit'iyle birlikte main'e girer.
Denetim: guvenlik-uyum — "listen kaydedildi, kredin yanmaz" iddiasının doğruluğu.
Dosya sahipliği (kesişim: sıfır)
| Paket | Dal | Dosyalar (Y = yeni) |
|---|---|---|
| P1 | icerik/sezon-celiskisi |
src/lib/sezon.ts Y · src/components/site-top-banner.tsx · src/features/pazarlama/components/hero-focus-button.tsx |
| P2 | olcum/liste-uretim-basladi |
src/lib/analitik.ts · src/features/rapor/components/uretim-basladi-olayi.tsx Y · src/features/rapor/components/listem-icerik.tsx · src/app/listem/page.tsx · src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx · src/features/odeme/components/paket-satinal.tsx |
| P3 | funnel/arti-olu-ucu |
src/features/liste/components/program-ekle-butonu.tsx · src/features/liste/components/liste-cekmecesi.tsx |
| P4 | funnel/listem-girisi |
src/features/kullanici/components/user-nav.tsx · src/features/kullanici/components/giris-linki.tsx Y · src/features/rapor/components/listem-bos-cta.tsx |
Hiçbir paketin dokunmayacağı (Bilal'in kirli ağacı — PROTOKOL kural 3):
Dockerfile, src/app/globals.css, src/app/layout.tsx, src/features/rapor/components/liste-uretici.tsx, src/app/api/saglik/, docs/, content/rehber/*.md.
git add -A / git add . yasak — yalnız kendi paketinin yollarını tek tek ekle.
Ortak kurallar
- Yalnız verilen worktree + dalda lokal commit. Push/merge/deploy yok,
main'e commit yok. - Commit öncesi
git status --porcelainile Bilal'in kirli dosyalarının stage'e sızmadığını doğrula. - Doğrulama:
pnpm exec next typegen && pnpm exec tsc --noEmit && pnpm lint. (Depodatypecheckscript'i yok;pnpm lint=eslint.) - typegen'i atlama —
PagePropsglobal tipi.next/types'tan gelir, taze worktree'detsconsuz baseline'da bile kırıktır. pnpm build'i yalnız P2 koşar (paralel build'ler belleği tüketir).- Worktree'de
node_modulessymlink'i Turbopack'te patlar — klon kullan:cp -Rc <repo>/node_modules <worktree>/node_modules. - Next bu sürümde farklı (16.2.10) — API'ye dokunmadan önce
node_modules/next/dist/docs/altındaki ilgili sayfayı oku. Bu depodacacheComponents: true(next.config.ts:28). - AGENTS.md bağlayıcı: rozet gerekirse
SectionEyebrow; CTA'daSparklesyok, metin sonunda<ArrowRight className="size-4" aria-hidden />; yeni modaldaDialogContentvarsayılan kapatma çarpısı. - Bu turda hiçbir paket
huni-semasi.tsx/meraklisina-icerik.tsx'e dokunmaz. - Dev sunucusu yok, tarayıcı yok — UI'ı Bilal kontrol ediyor.
- Uydurma veri yok: ÖSYM 2027 takvimi açıklanmadığı için P1'de tarih uydurulmaz,
nullbırakılır.
Merge sırası ve denetim
Dördü paralel geliştirilir. Merge sırası P2 → P3 → P4 → P1 (CEO'nun "payda önce" kuralı).
guvenlik-uyum denetimi merge koşulu: P3 (kapı → /sonuc?sihirbaz=1 → otomatik 3 kredi harcama yolu), P4 (giriş callback'i / açık yönlendirme yüzeyi), P0-ek.
tasarimci: P4 navbar'ın 375 px davranışı ve "Yapay Zeka Listem" ↔ "Kendi Listem" ayrımı.
qa-muhendisi: P3/P4 dallarında + → toast → sihirbaz → nereye çıkıyor; boş /listem CTA'sı kapıyı açıyor mu.
İtirazlar
| # | İtiraz | Düzeltilmiş kapsam |
|---|---|---|
| İ1 | P3'te use-tercih-profili.ts:346 null dalının değiştirilmesi ölü kod olur ve hedef sözleşmesini bozar |
Yalnız iki çağrı yeri değişir; use-tercih-profili.ts kapsam dışı |
| İ2 | P3 girişli kullanıcıda ek tık olmadan 3 kredi harcatıyor | Kapsam aynı, guvenlik-uyum denetimi merge koşulu |
| İ3 | P3, + toast'ının vaat ettiği risk rozetini göstermeden kullanıcıyı taşıyor | Bu tur uygulanmıyor; backlog |
| İ4 | P4'te callback=/listem bağlam kaybı + ?uret=1 ile rızasız kredi |
Callback = bulunulan sayfa; yeni giris-linki.tsx |
| İ5 | P2'de girisli özelliği sabit (/listem auth kapılı) |
girisli yerine paketli + profil |
| İ6 | P2'de yeniden_deneme kirli dosya olmadan ölçülemez |
Bu turda çıkarıldı; liste-uretici.tsx açıldığında eklenir |
Backlog önerileri
- + kapısının ödülü yerinde teslim edilsin (İ3) — M, tasarımcı girdisi gerekir.
liste_uretim_basladi'nın gerçek çağrı yerine taşınması +yeniden_deneme.ListemButonuboşken gizlenmesi kuralı yeniden değerlendirilsin (listem-butonu.tsx:24).- En küçük duman testi altyapısı (
vitest):sonucHref,sihirbazDogrula,sezonAsamasi,raporMaskele,siraKovasi. - Kalan CTA ok/ikon tutarsızlıkları — tek temizlik paketi.
secimlerim-paneli.tsxölü kod (grep ile doğrulanıp silinmeli).- Footer "YKS Tercih Robotu 2026" — vizyonla çelişiyor, yıl sabiti elle gömülü.