Files
kolaytercih/docs/gece-vardiyasi/2026-09-21/11-ceo-kararlari-tur2.md
bilalgursen 0ab4dbe88c
All checks were successful
Deploy / deploy (push) Successful in 7m18s
Enhance Traefik configuration for www.kolaytercih.com
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.
2026-09-21 20:37:12 +03:00

32 KiB
Raw Blame History

11 — CEO kararları, 2. tur — 2026-09-21 gece vardiyası

Hazırlayan: CEO ajanı · Girdi: 07, 08, 09, 10 + kod okuması (worktree'ler, salt-okunur) · Kod/içerik değiştirilmedi, yalnızca bu dosya yazıldı. İşaretler ilk turla aynı: [KARAR] ajan yetkisinde, bu gece gece/* dalında uygulanır (push/merge yok) · [BİLAL] Bilal onayı bekler; ayrı commit/dal, ben yalnız tavsiye veririm. Saat ~05:15 → plan: 05:30 başla · 06:15 yazılımcılar biter · 06:15–07:00 denetim + entegrasyon build'i (tek build, RAM) · 07:00–07:30 sabah özeti.

1. Özet — ilk tura göre stratejik resim nasıl değişti? (5 madde)

  1. En büyük sızıntı sandığımız yerde değil, ilk dokunuşta. İlk turda "veri yok, katalog köprüsüne dokunma, önce paydayı ölç" demiştim. Payda zaten verideymiş; yanlış okumuşuz: program_eklendi eklemeyi değil + tıklamasını ölçüyor. Katalogdan +'ya basan 83 oturumun 82'si 5 ekranlık profil kapısına çarpıyor, 77'si (%94) vazgeçiyor, programı listeye girmiyor. "Katalog ziyaretçisi eklemeyi seviyor" okumam niyet için doğru, davranış için yanlıştı; kaydet banner'ı (eşik 3) profilsiz ziyaretçi için fiilen ulaşılamaz. Erteleme kararımı geri alıyorum: ölçüm düzeltmesi bu gece [KARAR], davranış prototipi ayrı dalda [BİLAL].
  2. Sezon dışında yön okunabilecek tek huni bu. P2'nin hunilerine oran olarak 11 Ocak 2027'den (CTA formu) / 2027 tercih dönemi bitmeden (/sonuc→giriş) önce bakılamaz. +→sıra hunisinde ise taban %6 o kadar düşük ki büyük bir değişiklik 3–5 haftada (≈37 oturum) görünür: 28 Eylül'de canlıya çıkarsa en erken 2 Kasım. Her haftalık gecikme bu tarihi bir hafta iter. Diğer her şeyde oran değil adet + tek tek oturum okunacak.
  3. Büyüme motoru rehber değil katalog. Trafiğin %97'si Google→katalog, %93'ü mobil; + niyeti iniş sayfasında ilk 29 saniyede doğuyor. İlk turda "Search Console verisi gelmeden sayfalama kararı riskli" diye ertelemiştim; o risk canonical değişikliğine aitti. Yeni öneri canonical/robots'a dokunmuyor (programların ~%53'ü yalnız sayfa/2+'da, 667 derin URL'nin başlığı yalnız sayfa numarasıyla ayrışıyor) → indeks riski yok, bu gece yapılır. Blogda tersine frene basıyorum: 2 slot hakkım var, 1 yazı yazdırıyorum.
  4. Bu gecenin 5 dalı sağlıklı, ama P3 amacını tam kapatmadı ve bir commit alınmamalı. Kritik bulgu yok. 52520ac (Armut atıflı fiyat) teyitsiz → merge edilmez; yerine hiç doğrulama gerektirmeyen rakamsız alternatifi hazırlatıyorum. Tadımlık satırında gerekce/trendOzeti hâlâ LLM metni (lokal DB: 13/514 satırda olasılık dili, 126/514'te "Son 4 yıl") → girişsiz ziyaretçinin gördüğü ilk yapay zekâ metni vaadimizi deliyor; P3b ile kapatılıyor.
  5. Garanti→Güvenli ~10 değil ~35 dosya ve etiket beş ayrı yerde yaşıyor. Hazırlık refaktörünü bu gece yaptırmıyorum (P3/P3b ile dosya çakışması + "Güvenli · Güvenli" gösterim kararı Bilal'in). Bilal'in bu hafta vereceği "evet/hayır", işin tüm dallar merge edildikten sonra tek PR'da (iki commit) yapılmasını mümkün kılar. Bu gecenin yeni metinleri karardan bağımsız yazılıyor (dilim adı geçmeyen cümleler).

Bu turda koddan doğruladıklarım

İddia / varsayım Sonuç
program_eklendi kapı açıldığında da atılıyor (09) Doğru. program-ekle-butonu.tsx handleClick: doldu/zatenVar dışındaki her sonuç (kapiAcildi: true dahil) else'e düşüp olayı atıyor. Kapı tamamlanınca eklenen bekleyen program için (use-tercih-profili.ts profilTamamlandi) olay yok.
Profilsiz ekleme teknik olarak mümkün mü? Evet, depo zaten destekliyor. liste-store.ts ekle() profil yoksa tercih.risk'i (null) korur; programdanManuelTercih sıra null kabul eder; riskleriYenile(profil) profil gelince tüm listeyi yeniden hesaplar; UI null riski zaten karşılıyor (liste-cekmecesi.tsx:398, secimlerim-paneli.tsx:224). Prototip tip/şema değişikliği gerektirmez.
Kapı tanıtım ekranını atlayabiliyor mu? Evet. profilToplamaAc(hedef, dogrudanSira) mevcut; adımlar "giris" | "sira" | "sihirbaz" (tercih-profili-kapisi.tsx:51).
+ kapısı /meraklisina şemasında (SEMA) var mı? Yok. huni-semasi.tsx SEMA yalnız sihirbaz adımları → havuz → gevşetme → 24'lük iskeleti anlatıyor. + davranışı değişse de AGENTS.md şema senkron kuralı tetiklenmez (sihirbaz adımları, havuz, iskelet, gevşetme sırası, havuz-dışı kuralı aynı kalır).
Marka ajanının 3 köprü cümlesi ürünün yaptığı şeyi mi söylüyor? Hayır — üçü de olmayan özelliği vaat ediyor. V1 "satır satır gör", V3 "bu programların … risk seviyesini gösterelim", V2 "bu üniversite içinde sana en yakın olanları öne alalım" diyor; katalog tablolarında satır bazlı risk yok (universite-program-tablosu.tsx / bolum-program-listesi.tsx'te risk/profil geçmiyor) ve CTA akışı sıra → sihirbaz → genel /sonuc'a gidiyor (cta-sira-form.tsx secimleriTamamla). İlk turdaki ilkem ("olmayan özelliği satma") gereği V1'i uyarlayarak seçtim (§2-K3).
/sonuc ücretsiz tablosu risk "etiketi" gösteriyor mu? Kısmen. Dilim sekmeleri + satırda renkli nokta (program-tablosu.tsx:307, aria-hidden), metin etiketi yok. Köprü cümlesi bu yüzden "etiketlerle" demiyor, "risk seviyesine göre ayrılmış" diyor. (Yan not → §5: nokta tek başına renk; risk dili kuralı açısından Bilal baksın.)
P2'nin [BİLAL] commit'i (c055e82) analitik.ts'e dokunuyor mu? Hayır (yalnız rybbit-identify.tsx, user-nav.tsx). Yeni ölçüm dalı e1bb482'den açılabilir; Bilal'in identify kararı bağımsız kalır.
Tadımlıkta trend deterministik üretilebilir mi? Evet. rapor.ts:144 trendOzetiUret saf fonksiyon (şu an private); tadımlık program kaydında siraGecmisi?: (number|null)[] var (features/rapor/types/rapor.ts:47).
/bolum/[slug]'da CTA yok (10) Doğru. CtaSiraForm 5 yerde kullanılıyor (rehber/page, rehber-makale, bolum-listesi, universite-listesi, universite-icerik); bolum-icerik.tsx'te yok.

2. Tur 2 iş paketleri (4 kod paketi + 1 blog yazısı), öncelik sıralı

Ortak kurallar (ilk turla aynı): kendi worktree + belirtilen dal; AGENTS.md geçerli (kod yazmadan önce node_modules/next/dist/docs/; tarayıcı/dev sunucusu yok); data/app.db, docker-compose.yml, docs/geo/geo-raporu.md dokunulmaz; şema/DB migrasyonu yok; pnpm build koşma (RAM — tek build entegrasyonda), her commit'te next typegen + tsc --noEmit + pnpm lint temiz olmalı; rapor 07-yazilimci-raporlari.md'ye kendi başlığıyla eklenir. "Sahip olduğu dosyalar" dışına çıkılmaz.

Paralellik: Yazılımcı A = K1 sonra K4 (aynı dosyalar → sıralı, aynı kişi) · Yazılımcı B = K2 · Yazılımcı C = K3 · Yazar D = B1. Zaman daralırsa ilk düşecek iş K4'tür (ölçüm asla düşmez).

K1 · + kapısı ölçüm düzeltmesi — [KARAR]

  • Dayandığı bulgu: 09 özet m.1, m.4 ve "CTO'ya ölçüm notu"; 08 #6 (kullaniciTanit kuyruğu).
  • Dal: YENİ gece/p5-kapi-olcum, taban e1bb482 (= gece/p2-olcum~1; P2'nin analitik.ts ve tercih-profili-kapisi.tsx değişikliklerini içerir, [BİLAL] identify commit'ini içermez). Mevcut P2 dalının üstüne eklenmez (tepedeki [BİLAL] commit'inin "~1'i merge et" talimatı bozulmasın).
  • Sahip olduğu dosyalar: src/lib/analitik.ts, src/features/liste/components/program-ekle-butonu.tsx, src/features/liste/hooks/use-tercih-profili.ts, src/features/liste/components/tercih-profili-kapisi.tsx.
  • Kabul kriterleri:
    1. Commit 1: program_eklendi yalnız gerçek eklemede atılır: (a) butonda yalnız sonuc.eklendi === true iken, {kaynak, yol: "dogrudan"}; (b) kapı tamamlanıp bekleyen program listeye girdiğinde (profilTamamlandi içinde ekle() true döndüyse), {kaynak: bekleyen.kaynak, yol: "kapi"}. kapiAcildi dalında atılmaz.
    2. Commit 2: iki yeni olay, adlar kalıcı sözleşme — kapi_acildi {tetik} (tetik: arti | sonuc | sihirbaz | duzenle | diger; depoya tetik alanı eklenir, her açıcı kendi değerini yazar, profilToplamaAc'a isteğe bağlı 3. parametre) ve kapi_kapatildi {adim, tetik} (adim: giris | sira | sihirbaz). kapi_kapatildi yalnız tamamlanmadan kapanışta atılır (X, dışarı tıklama, geri→kapat); tamamlanan kapıda atılmaz (kod incelemesiyle göster). Olay, kapı bileşeninde tek noktadan atılır; ham sıra/e-posta özelliğe girmez.
    3. Commit 3 (küçük): kullaniciTanit() script yokken sessiz no-op olmasın — tek "son değer" slotu, olay() kuyruğunun boşaltıldığı yerde olaylardan önce uygulanır; kullaniciTemizle() slotu siler. rybbit-identify.tsx'e dokunulmaz.
    4. OlayAdi birliğine yalnız kapi_acildi, kapi_kapatildi eklenir; program_eklendi yorumuna "bu commit'in canlıya çıktığı tarihten önce = + tıklaması, sonrası = gerçek ekleme; seriler karşılaştırılamaz" notu düşülür.
    5. Davranış değişmez: profilsiz + hâlâ kapıyı açar. grep -rn "program_eklendi" src → yalnız bu iki atış noktası + tip.
  • Kapsam dışı: kapının tasarımı/metni, dogrudanSira varsayılanı, kaydet banner eşiği, cta_form_goruntulendi hydration koruması (08 #5 — OLASI, tarayıcısız körlemesine düzeltilmez), sihirbaz_adim özellikleri.
  • Bilal onayı: gerekmez (saf ölçüm). Bilal'in işi: canlıya çıkış tarihini not etmek (seri kırılması) — §4.

K2 · Tadımlık metin sızıntısı + rakamsız fiyat alternatifi

  • Dayandığı bulgu: 08 #2 (orta) ve #1 (yüksek); 07-P3 "kalan ifadeler".
  • Dal: YENİ gece/p3b-tadimlik-dili, taban cae2aaa (P3'ün iki [KARAR] commit'i; Armut ve logo commit'leri yok). Mevcut P3 dalının üstüne eklenmez (tepesinde alınmaması gereken 52520ac var).
  • Sahip olduğu dosyalar: commit 1 → src/lib/tadimlik-havuzu.ts, src/lib/ai/rapor.ts (yalnız trendOzetiUret'in taşınması/import'u), yeni src/lib/trend.ts (saf fonksiyon) · commit 2 → src/app/page.tsx (yalnız 3 fiyat cümlesi), src/app/paket/page.tsx, src/app/layout.tsx (yalnız description).
  • Kabul kriterleri:
    1. Commit 1 [KARAR]: tadimlikSec() DB'deki trendOzeti'ni servis etmez; trend, rapordakiyle aynı saf fonksiyondan program.siraGecmisi'nden okuma anında üretilir (önce siraGecmisi'nin yıl sırasını scripts/tadimlik-uret.ts'ten doğrula; alan yoksa "yeterli geçmiş veri yok" cümlesi). gerekce için okuma anı filtresi: /olasılı|ihtimal|garanti|kesin|yüzde/i eşleşen satır atlanır (önce genel kategoriye düşer, o da eşleşirse null → tadımlık gizlenir; PRD kuralı "generic tadımlık gösterilmez" ile uyumlu). tadimlik-havuzu.ts:84-93 yorumu gerçeği söyleyecek biçimde düzeltilir.
    2. Trend cümlelerindeki tahmin dili de düzelir (tek kaynak olduğu için rapor + tadımlık birlikte): "bölüm zorlaşıyor" → "taban sıkılaştı"; "yerleşmek görece kolaylaşıyor" → "taban gevşedi". Eşikler (±%10), ilk–son yıl mantığı, 5/13/6 şeması, LLM prompt'u değişmez.
    3. Lokal data/app.db'ye karşı salt-okunur betik (scratchpad, commit'lenmez): 514 satırın kaçının filtreye takıldığı ve kaç anahtarın null'a düştüğü rapora yazılır. grep -niE "olasılı|ihtimal|Son 4 yıl" servis edilen alanlarda 0.
    4. Commit 2 [BİLAL], en tepede, 52520ac'nin alternatifi (ikisi birlikte alınmaz): üçüncü tarafa atıf ve TL aralığı yok. "İyi bir tercih danışmanı 2.000–10.000 TL istiyor." → "İyi bir tercih danışmanının ücreti birkaç bin lirayı bulabiliyor."; kıyas tablosu hücresi → "Danışmana göre değişir"; "İnsan danışmanın 2.000–10.000 TL aldığı işi…" → "İnsan danışmanın birkaç bin liraya yaptığı işi…"; "onda bir fiyatına" → "çok daha düşük fiyata" (paket/page.tsx, layout.tsx — P3 sapma #3'teki "danışmandan" düzeltmesiyle). Yorum içindeki ölü <p> bloğuna dokunma (logo commit'iyle çakışmasın).
    5. git merge-tree ile kanıtla: 9d450c5 (YÖK logosu) bu dalın tepesine çakışmasız cherry-pick ediliyor.
  • Kapsam dışı: trend hesabının ilk–son yıl duyarlılığı (Ege Tıp örneği — davranış değişikliği, §5), tadimlik_havuzu şeması, prod'da yeniden üretim (Bilal), SSS'deki "boşta kalma ihtimali" cümlesi, Garanti→Güvenli.
  • Bilal onayı: commit 1 gerekmez; commit 2 ayrı ve en tepede → reddedilirse git merge gece/p3b-tadimlik-dili~1.

K3 · Katalog: derin sayfa başlıkları + vaatsiz köprü + /bolum'a CTA — [KARAR] (metni Bilal okur)

  • Dayandığı bulgu: 10 §B (sayfalama), 10 özet m.5 + §A9 (vaat dili, CTA eksikliği); 09 m.2 (148 giriş oturumu /bolum/*'a düşüyor, CTA yok); 07-P3 "en görünür kalan vaat cümlesi".
  • Dal: YENİ gece/p7-katalog, taban e1bb482 (cta-sira-form.tsx P2'de değişti; aynı tabandan açılan K1 ile dosya kesişimi yok).
  • Sahip olduğu dosyalar: src/features/katalog/components/bolum-icerik.tsx, src/features/katalog/components/universite-icerik.tsx, src/features/sihirbaz/components/cta-sira-form.tsx, (isteğe bağlı) src/features/katalog/components/sayfalama.tsx içine dilim yardımcı fonksiyonu.
  • Kabul kriterleri:
    1. Commit 1 — sayfalama (10 §B3 aynen): sayfa > 1 iken bölüm sayfasının title + description + H1'i o sayfanın taban sırası aralığını taşır (dilimdeki min–max efektifSira; null'lar hariç; tümü null ise "taban verisi olmayan programlar"; lisans/önlisans karışan dilimde aralık yine min–max). Üniversite sayfasında description + giriş paragrafı o sayfadaki fakülte adlarını sayar (ilk 2 + "ve N birim daha"); <title> ~60 karakteri aşmasın diye farklılaştırıcı öncelikle description + H1 altı. Bölüm derin sayfasının görünür breadcrumb'ı üniversite sayfasındaki desenle birebir (üst bölüm linki). Canonical kendine, robots index, follow, sitemap ve iki sayfa/[no]/page.tsx DEĞİŞMEZ. Metadata ve gövde aynı dilim hesabını tek yardımcıdan alır.
    2. Commit 2 — vaat dili + köprü: CtaSiraForm'a isteğe bağlı aciklama?: string prop'u (yalnız profilsiz karttaki paragrafın yerine geçer; varsayılan paragraflar aynen kalır — içlerindeki "garanti dilimleri" H2 kararına ait). Başlıklar:
      • varsayılan (4 yer): iki kart başlığında "Sıralamana yakın programlar hangileri? Saniyede gör."; çekmecenin DrawerTitle'ı ve H2'sinde "Sıralamana yakın programlar hangileri?"
      • üniversite: Sıralaman ${uni.ad} tabanlarının neresinde? · bölüm: Sıralaman ${bolum.ad} tabanlarının neresinde?
      • katalog aciklama'sı (seçilen varyant: 10 §A9-V1, ürünün gerçekten yaptığına uyarlanmış): "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."
      • bolum-icerik.tsx'e CtaSiraForm eklenir — üniversite sayfasıyla aynı konumda (liste + sayfalama altı, mt-10). Buton metni/ikon deseni değişmez (metin + sonda ArrowRight).
    3. grep -rniE "yerleşir misin|yerleşirsin" src → 0 (LLM prompt'ları hariç). Yeni badge/pill/modal yok; mevcut SectionEyebrow aynen.
  • Kapsam dışı: CTA'nın tablonun üstüne taşınması, satır içi tek soruluk köprü, katalog tablosuna satır bazlı risk (asıl çözüm bu — §3 #16), kart gövdesindeki dilim adları, cta_form_goruntulendi koruması, SAYFA_BOYU, noindex, canonical.
  • Bilal onayı: iki commit bağımsız; metni beğenmezse git merge gece/p7-katalog~1 yalnız sayfalamayı alır. Görsel risk düşük (yeni eleman yok; bölüm sayfasına mevcut kart geliyor, derin sayfa H1'i uzuyor → mobilde bir bakış).

K4 · Prototip: ilk + anında eklesin, sıra sorusu sonra gelsin — [BİLAL]

  • Dayandığı bulgu: 09 "Tasarımcıya 5 çıkarım" #1 ve #5; Huni C eşiği.
  • Neden tavsiyeyle yetinmeyip prototip: değişiklik küçük ve geri alınabilir (depo profilsiz eklemeyi zaten destekliyor), marka/hukuk kararı değil, ve hazır dal Bilal'in kararını "telefonda 10 dk bak → evet/hayır"a indirir. İlk turdaki "ucuz olanı ayrı commit'te hazırlat" ilkesiyle aynı. Pahalı/tasarım gerektiren her şey (alt sayfa, satır içi soru, mini çubuk) kapsam dışı.
  • Dal: YENİ gece/p6-arti-aninda-ekle, taban gece/p5-kapi-olcum'un tepesi (K1 bitince, aynı yazılımcı). Tek commit.
  • Sahip olduğu dosyalar: src/features/liste/hooks/use-tercih-profili.ts (programEkleIste), src/features/liste/components/program-ekle-butonu.tsx. Başka dosya yok.
  • Kabul kriterleri:
    1. Profil yokken programEkleIste programı hemen listeye ekler (risk null), kapıyı açmaz; dönüşe profilsiz: true eklenir. program_eklendi {kaynak, yol: "dogrudan", profilli: "hayir"} (profilli dalda "evet").
    2. Buton profilsiz eklemede sonner toast gösterir (sabit id → üst üste yığılmaz, süre ~8 sn): başlık "Seçtiklerine eklendi", açıklama "Sıralamanı girersen bu programın risk seviyesini de gösteririz.", aksiyon "Sıralamamı gir" → profilToplamaAc(null, true, "arti_toast") (tanıtım ekranı atlanır). Sonner label ReactNode kabul ediyorsa sonda ArrowRight className="size-4"; etmiyorsa düz metin + rapora not. Metnin başında ikon yok, Sparkles yok.
    3. Profil sonradan girilince mevcut riskleriYenile null riskleri doldurur (kod incelemesiyle göster; yeni kod yazma).
    4. Tüketici envanteri (rapora tablo): profilsiz + dolu liste durumunda şu yüzeyler ne gösteriyor — çekmece (liste-cekmecesi), secimlerim-paneli, /listem (listem-govde), kaydet-banner, manuel-harita (null riski az-riskli sayıyor — :33, yanlış renk riski). Kırılan/yanıltan yer varsa düzeltme, raporla (Bilal kararı).
    5. SEMA, meraklisina-icerik.tsx, kapı bileşeni, sihirbaz adımları değişmez (§1 tablosu: + kapısı şemada yok → senkron kuralı tetiklenmez; rapora bu cümle yazılır).
  • Kapsam dışı: alt sayfa/satır içi genişleme, "Listende 1 program" mini çubuğu, kaydet banner eşiği, "Neden vazgeçtin?" sorusu, iOS + görünürlüğü, giriş duvarının yeri.
  • Risk: tarayıcıda doğrulanamıyor; %93 mobilde toast'ın görünürlüğü ve profilsiz /listem Bilal'in gözüne kalıyor. K1'den ayrı dal olduğu için K1'in merge'ünü bekletmez.

B1 · Blog: universite-okurken-tekrar-yks (tek yazı; 2. slot bilinçli boş)

  • Neden bu: Dalga B'de ürün bağı en güçlü (okurken yeniden deneyen = 2027'nin ödeyen adayı) ve kaynaklarının tamamı bu gece zaten açılıp okundu (mezuna yazarının teyit tablosu): 2026-YKS Kılavuzu §4.2/§10 (kayıtlı olmak YKS'ye engel değil; aynı anda iki örgün program olmaz), ÖSYM SSS 49–52 (OBP), Kontenjan Kılavuzu §1.3, YÖK Ek Madde-1 uygulama ilkeleri, kayıt dondurmanın üniversite yönetmeliğine bağlı olduğu. "Bu gece teyit edilemeyecek konu seçme" kuralımı geçen tek aday.
  • Dal: MEVCUT gece/rehber-yazilari'nın üstüne; yalnız content/rehber/*.md. İki commit, sırası önemli: (1) küçük düzeltmeler, (2) yeni yazı + ona verilen iç linkler aynı commit'te ve en tepede (dynamicParams=false → Bilal yazıyı almazsa ~1 ile linkler de gitmiş olur, 404 kalmaz).
  • Commit 1 (düzeltmeler): hedef-siralama-nasil-belirlenir.md:83 "üründe dilimin adı da böyle geçer" yan cümlesi silinir (H2 kararından bağımsız doğru kalsın) · taban-siralamalar-nasil-degisir.md şema + %% aria + gövdede ürün verisine atıf yapan "dört yıl / son 4 yıl" → "beş yıl (2021–2025)" (genel okuma tavsiyesi olan "son 3–4 yıla bak" cümleleri kalır).
  • Commit 2 (yazı): ilk turdaki ortak yazar kuralları aynen (1 flowchart TD + %% aria + %% altyazi, ≥1 tablo, ilk paragraf tek başına cevap, soru biçimli H2'ler, "Kaynaklar" + erişim tarihi; doğrulanamayan cümle çıkarılır; 2027'ye dair tarih yok; askerlik/tecil yok; harç/ücret rakamı yok; dilim adı ilk geçişte "güvenli (halk arasında 'garanti tercih')"). Tablo: kayıt dondurma · devam ederek hazırlanma · kayıt sildirme (hak / bedel / geri dönüş) — kayıt dondurma satırı "üniversitenin yönetmeliğine bak" der, genelleme yapmaz. Kanibalizasyon sınırı: mezuna-kalmak-mi-kayit-olmak-mi yeni yerleşenin kararını anlatıyor; bu yazı hâlihazırda okuyan öğrencinin sürecini (sınava giriş, tercih, yeni kayıt/ilişik kesme, Ek Madde-1 ve yatay geçiş alternatifleri) anlatır; OBP kuralını yeniden açıklamaz, obp-nedir… ve mezuna-kalmak…'a link verir. İç link alan yazılar (en fazla 3): mezuna-kalmak…, yatay-gecis-cap-yandal, yerlesemedim-ne-yapmaliyim. tarih: 2026-09-22.
  • Bilal onayı: YMYL'ye yakın → "Kaynaklar"daki linkleri açıp kural cümlelerini teyit etmeden yayımlamasın; ÖSYM'deki asıl kılavuz PDF'i (10 MB sınırı yüzünden MEB kopyasından okunmuştu) §4.2 ve §10 gözle kontrol.

3. Bilal'in karar tablosu — EKLENENLER / DEĞİŞENLER (ilk turdaki 11 karara ek)

# Karar Tavsiyem Gerekçe Gecikmenin maliyeti
4 (DEĞİŞTİ) Danışman fiyat kıyası 52520ac'yi alma. İki yol: (a) Armut sayfasını 5 dk aç; aralık tutuyorsa 52520ac + kaynak satırına URL ve erişim tarihi; (b) açmayacaksan/tutmuyorsa K2'nin rakamsız commit'ini al. Varsayılan tavsiyem (b) Canlıdaki "2.000–10.000 TL / onda bir" de teyitsiz; (b) hiçbir doğrulama istemeden riski sıfırlar. Gerçek bir şirkete atıflı teyitsiz rakam, atıfsız olandan daha kötü Düşük trafik ama site geneli meta description'da duruyor; her gün Google snippet'inde
2 (GÜNCELLENDİ) Garanti→Güvenli Hâlâ evet; ama kapsam ~35 dosya (src 13 + sözlük 2 + rehber 19 + AGENTS.md). Onay gelirse: tüm gece/* dalları merge edildikten sonra tek PR, iki commit (src+AGENTS.md / content). Onayla birlikte iki küçük karar daha ver: (i) satır başlığı "Güvenli · Güvenli" olmasın → risk etiketi yalnız dilimin varsayılanından farklıysa görünsün; (ii) sihirbaz çipi "İş garantisi" → "İş bulma kolaylığı" 10 §A: etiket 5 ayrı yerde; LLM'e ham garanti anahtarı gidiyor, serbest metne geri sızıyor (prompt sözlüğü aynı PR'da) Şimdi düşük; bu gece yazılan her metin karardan bağımsız yazıldı ama her yeni içerik eski sözlükle birikiyor
12 İlk + profilsiz ziyaretçide anında eklesin mi? (K4 prototipi) Evet — telefonda 10 dk bak: bir üniversite sayfasında + → toast görünüyor mu, çekmece//listem profilsiz listeyle düzgün mü, "Sıralamamı gir" doğrudan sıra adımını açıyor mu. Düzgünse K1 ile aynı gün canlıya 77/82 kapıdan dönüyor; önce-iste-sonra-ver düzeni %6 ile ölçülmüş durumda. Sezon dışında etkisi okunabilecek tek değişiklik Hafta bazında: 28 Eyl'de çıkarsa Huni C en erken 2 Kasım'da okunur; her hafta gecikme o tarihi bir hafta iter
13 K1 canlıya çıkış tarihinin kaydı Deploy gününü SABAH-OZETI/not defterine yaz; Rybbit'te o tarihten önceki program_eklendi = "+ tıklaması", sonrası = "gerçek ekleme" Seriler karşılaştırılamaz; tarih yazılmazsa 2027'de kimse hatırlamaz Sıfır efor, unutulursa kalıcı veri kirliliği
14 Katalog CTA'sı tablonun üstüne (ilk ekrana) taşınsın mı? Şimdi hayır. Büyük kart mobilde Google'dan gelinen tabloyu aşağı iter. Önce K4'ün sonucunu gör; asıl çözüm profil varken katalog satırında risk seviyesini göstermek ("bu programa sıralamam yeter mi?"nin dürüst cevabı) — tasarımını sen yap, sonraki vardiya uygular Form kaynaklı sıra girişi 6, kapı kaynaklı 18: kullanıcı forma değil satıra dokunuyor Düşük; K4 sonucundan önce karar vermek kör atış
15 "son 5 yıl" mı "son 5 yıla kadar" mı? (08 #10) "son 5 yıl" kalsın Programların ~%45'inde 5'ten az yıl var ama trend cümlesi her programda gerçek yıl aralığını ("2023-2025 arasında…") zaten yazıyor; eski "4 yıl" da aynı ölçüde yaklaşıktı ~0
16 Nitel araştırma: haftalık oturum okuması + 5 kişilik mobil kullanılabilirlik testi; session replay Oturum okuması evet (haftada 30 dk, ~8 + oturumu tek tek okunabilir). 5 kişilik test evet, Ekim'de, K4 canlıdayken. Session replay hayır — Ekim'deki hukuki gözden geçirmeye (karar #10) ekle Oranlar Ocak 2027'ye kadar okunamıyor; %6'nın nedeni analitikten çıkmaz Düşük; ama tek öğrenme kanalımız bu
17 Deploy sonrası prod'da pnpm tadimlik (+ yeni prompt'la --force) Evet, ama artık acil değil — K2 okuma anında filtrelediği için sızıntı kod tarafında kapanıyor; yeniden üretim filtreye takılıp gizlenen tadımlıkları geri getirir Bellek notundaki bekleyen prod koşusuyla aynı iş Filtreye takılan anahtarlarda tadımlık görünmez (K2 raporu kaçını söyleyecek)

Diğer ilk tur kararları (#1, #3, #5–#11) değişmedi; #1'in yerini §4 alıyor.


4. Bilal için güncel merge sırası

Denetçinin sırasını kabul ediyorum, üç değişiklikle: (i) P3 artık cae2aaa değil P3b üzerinden alınır, (ii) P2'den hemen sonra P5 gelir, (iii) P7 ve P6 eklenir. Yeni dallar Tur 2 denetiminden geçmeden bu liste geçerli sayılmaz.

  1. gece/rehber-yazilari + gece/p1-rehber-altyapi birlikte. Önce osym.gov.tr'de ek yerleştirme sonuç tarihine bak (açıklandıysa yazıyı güncelle). B1'i henüz teyit etmediysen gece/rehber-yazilari~1. tarih/guncelleme alanlarını gerçek yayın gününe çek (grep -l "^guncelleme:" content/rehber/*.md). Takvime bağlı tek iş bu — Çarşamba'yı geçmesin.
  2. gece/p2-olcum ilk üç commit (git merge gece/p2-olcum~1); c055e82 karar #8'e göre.
  3. gece/p5-kapi-olcum (P2~1'i zaten içerir). Karar #12 "evet" ise onun yerine doğrudan gece/p6-arti-aninda-ekle (P5'i içerir) — ikisi aynı deploy'da çıksın, seri bir kez kırılsın. P6'yı bekleyip P5'i geciktirme. Deploy tarihini yaz (karar #13).
  4. gece/p3b-tadimlik-dili~1 (= 16c4508 + cae2aaa + tadımlık düzeltmesi) → istenirse git cherry-pick 9d450c5 (YÖK logosu) → fiyat için ya P3b'nin tepe commit'i (rakamsız) ya teyit edilmiş 52520ac; ikisi birlikte değil. gece/p3-vaat-dili dalını doğrudan merge etme.
  5. gece/p7-katalog (P2~1 gerekir; metni beğenmezsen ~1 = yalnız sayfalama). Deploy sonrası Search Console'da 2–3 derin sayfa için "dizine ekleme iste".
  6. gece/p4-eposta en son: P2 merge edilmiş olmalı (60 sn sayaç), lokal docker testi (07-P4 adımları), Gitea'da RESEND_API_KEY + EMAIL_FROM secret'larının dolu olduğunun teyidi; ea3ba5f + RYBBIT_* secret'ları karar sonrası.
  7. Her push öncesi AGENTS.md kuralı: birleşik HEAD temiz worktree'de pnpm build (VPS'te ~2 GB boş RAM — bellek notu).

5. Reddedilen / ertelenenler

Öneri Karar Neden
(f) Tek DILIM_ETIKET sözlüğü refaktörü Ertele → H2 PR'ının ilk adımı rapor.ts ve risk.ts'te P3/K2 ile çakışır; "Güvenli · Güvenli" gösterim kararı olmadan yarım kalır; etiket değişmeden kullanıcıya görünen faydası sıfır. Karar gelirse tüm dallar merge edildikten sonra tek PR
Sayfalamada canonical → 1. sayfa / noindex Kalıcı ret (erteleme değil) Derin sayfanın 50 satırı 1. sayfada yok; program detay sayfası yok; programların ~%53'ü için tek keşif yolu. İlk turdaki "GSC verisini bekle" şartım K3 için geçersiz (canonical'a dokunmuyor); GSC yalnız etkiyi ölçmek için
Marka V1/V2/V3 köprü cümleleri olduğu gibi Ret; V1 uyarlanarak alındı Üçü de katalog tablosunda olmayan satır bazlı risk/sıralama özelliğini vaat ediyor (§1 tablosu)
Blog kyk-burs-kredi-basvurusu Ertele → en geç 29 Eylül haftasındaki vardiya, koşullu Ürün bağı zayıf; 2026-27 tarih ve tutarı açıklanmamış; tarih sorgusuna haber siteleri hâkim. Evergreen "burs mu kredi mi" kısmı GSB/mevzuat kaynağından teyit edilebilirse o vardiyada yazılır; Bilal'in bu hafta zaten 4 YMYL yazı teyit edecek
Blog ikinci-universite-acikogretim Ret (bu sezon) "Açıköğretim OBP istisnası" 2026 belgelerinin hiçbirinde bulunamadı (07); yazının en çok aranan sorusuna resmî dayanakla cevap veremiyoruz; ürün bağı zayıf
P1 düşükleri: <figcaption> konumu (08 #9), takvim geçerlilik kontrolü (08 #11) Backlog (4 paket sınırı) Merge'i engellemiyor; düzeltme belli: <details>'i figcaption'dan önce al; TARIH_BICIMI'ne Date.UTC gün-ay kontrolü. Sonraki vardiyada gece/p1-rehber-altyapi üstüne tek commit
cta_form_goruntulendi hydration koruması (08 #5) İzle OLASI ve nadir; tarayıcısız körlemesine düzeltme çalışan hook'u bozabilir; Huni A zaten Ocak 2027'ye kadar okunmayacak
CTA'yı tablonun üstüne taşıma, alt sayfa (bottom sheet), satır içi tek soruluk köprü, "Listende 1 program" mini çubuğu, kaydet teklifini 1. programa çekme, "Neden vazgeçtin?" sorusu Ertele → K4 sonucu + Bilal'in tasarım gözü Hepsi yeni UI elemanı; AGENTS.md tek-kaynak kuralları ve mobil görünüm tarayıcısız doğrulanamaz. K4 en dar ve en büyük etkili dilim
iOS Safari'de + oranının Android'in yarısı olması İzle Kanıt yalnız oran farkı; neden bilinmiyor → 5 kişilik testte bir iOS kullanıcısı
Trend cümlesinin ilk–son yıl kıyası (Ege Tıp: 4 yıl düz, cümle "çıktı" diyor) Backlog, ürün kararı Deterministik rapor davranışını değiştirir; /meraklisina "gerçek sıralama geçmişinden hesaplanır" cümlesi doğru kalır ama yöntem tartışılmalı (ör. son 3 yıl medyanı). K2 yalnız dili düzeltiyor
/sonuc tablosunda risk yalnız renkli nokta (aria-hidden, metin yok) Bilal'e not Ürünün "renk tek başına anlam taşımaz" kuralıyla gergin; dilim sekmesi bağlam veriyor ama satırda metin yok. Garanti→Güvenli PR'ında birlikte ele alınabilir
Eski kayıtlarda isim'de "(İngilizce)"/kampüs ekinin kayıp olması (07 blog-3 yan bulgu) Sonraki vardiya: önce say Katalog trafiğin %97'si; aynı üniversitede ayırt edilemeyen satır kaç tane, bilinmiyor. Salt-okunur sorguyla boyutu çıkar, sonra karar
giris_basarili sunucu olayının UA/IP'si (08 #7), Gmail +etiket soğuma deliği (08 #8) Bilal deploy sonrası bakar / kabul Denetçinin önerisiyle aynı
İlk turda ertelenen her şey (T4 küme alanı, FAQPage, llms.txt, IndexNow, /hakkinda, anket, sosyal kanal, disposable filtre, ChunkLoadError…) Değişmedi Yeni kanıt yok

6. Bilal'in bu haftası (22–28 Eylül) — 5 öncelik

  1. Pazartesi–Çarşamba: ek-yerlestirme-sonuclari-ve-kayit + P1'i yayına al (§4-1). ÖSYM sonucu açıkladıktan sonra yayımlanırsa yazının varlık nedeni biter. Aynı oturumda diğer yazıların "Kaynaklar" linklerini aç, kural cümlelerini teyit et; yayımladıklarını Search Console'dan elle gönder.
  2. + kapısı: telefonda 10 dk K4'e bak, karar ver (#12); P2 → P5/P6'yı aynı gün canlıya al, tarihi yaz (#13). Takvime "2 Kasım: Huni C'ye bak (≥37 + oturumu biriktiyse)" ve "11 Ocak 2027'den önce CTA formu oranına bakma" notlarını koy. Bu haftadan itibaren haftada 30 dk + oturumlarını tek tek oku.
  3. Vaat dili paketini kapat: P3b'yi al, fiyat için (a)/(b)'den birini seç (#4), YÖK logosu kararını ver (#3), P7'yi al; deploy sonrası prod'da pnpm tadimlik (#17).
  4. 1 saatlik elle işler + P4: DMARC/SPF, magic link tıklama testi, Gitea secret'larının varlığı (RESEND_API_KEY, EMAIL_FROM; yeni RYBBIT_*, EMAIL_REPLY_TO), destek@ kutusunun açık olduğu, şema fontu lisansı → sonra lokal docker testiyle P4'ü merge et.
  5. Ajanların önünü açan iki şey (ilk turdan beri en büyük kilit): ÖSYM 2026 yerleştirme tablolarını data/kaynak/2026/'ya indir + Search Console dışa aktarımları; ve Garanti→Güvenli'ye evet/hayır (#2, iki alt kararla) — evet ise sonraki vardiya 35 dosyalık PR'ı, merge edilmiş main üstünde tek seferde yapar.