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.
32 KiB
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)
- 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_eklendieklemeyi 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]. - 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.
- 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. - 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ındagerekce/trendOzetihâ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. - 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 (
kullaniciTanitkuyruğu). - Dal: YENİ
gece/p5-kapi-olcum, tabane1bb482(=gece/p2-olcum~1; P2'ninanalitik.tsvetercih-profili-kapisi.tsxdeğ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:
- Commit 1:
program_eklendiyalnız gerçek eklemede atılır: (a) butonda yalnızsonuc.eklendi === trueiken,{kaynak, yol: "dogrudan"}; (b) kapı tamamlanıp bekleyen program listeye girdiğinde (profilTamamlandiiçindeekle()truedöndüyse),{kaynak: bekleyen.kaynak, yol: "kapi"}.kapiAcildidalında atılmaz. - Commit 2: iki yeni olay, adlar kalıcı sözleşme —
kapi_acildi {tetik}(tetik:arti|sonuc|sihirbaz|duzenle|diger; depoyatetikalanı eklenir, her açıcı kendi değerini yazar,profilToplamaAc'a isteğe bağlı 3. parametre) vekapi_kapatildi {adim, tetik}(adim:giris|sira|sihirbaz).kapi_kapatildiyalnı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. - 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. OlayAdibirliğine yalnızkapi_acildi,kapi_kapatildieklenir;program_eklendiyorumuna "bu commit'in canlıya çıktığı tarihten önce = + tıklaması, sonrası = gerçek ekleme; seriler karşılaştırılamaz" notu düşülür.- Davranış değişmez: profilsiz + hâlâ kapıyı açar.
grep -rn "program_eklendi" src→ yalnız bu iki atış noktası + tip.
- Commit 1:
- Kapsam dışı: kapının tasarımı/metni,
dogrudanSiravarsayılanı, kaydet banner eşiği,cta_form_goruntulendihydration 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, tabancae2aaa(P3'ün iki [KARAR] commit'i; Armut ve logo commit'leri yok). Mevcut P3 dalının üstüne eklenmez (tepesinde alınmaması gereken52520acvar). - Sahip olduğu dosyalar: commit 1 →
src/lib/tadimlik-havuzu.ts,src/lib/ai/rapor.ts(yalnıztrendOzetiUret'in taşınması/import'u), yenisrc/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ızdescription). - Kabul kriterleri:
- Commit 1 [KARAR]:
tadimlikSec()DB'dekitrendOzeti'ni servis etmez; trend, rapordakiyle aynı saf fonksiyondanprogram.siraGecmisi'nden okuma anında üretilir (öncesiraGecmisi'nin yıl sırasınıscripts/tadimlik-uret.ts'ten doğrula; alan yoksa "yeterli geçmiş veri yok" cümlesi).gerekceiçin okuma anı filtresi:/olasılı|ihtimal|garanti|kesin|yüzde/ieşleşen satır atlanır (öncegenelkategoriye düşer, o da eşleşirsenull→ tadımlık gizlenir; PRD kuralı "generic tadımlık gösterilmez" ile uyumlu).tadimlik-havuzu.ts:84-93yorumu gerçeği söyleyecek biçimde düzeltilir. - 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.
- 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ınnull'a düştüğü rapora yazılır.grep -niE "olasılı|ihtimal|Son 4 yıl"servis edilen alanlarda 0. - 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). git merge-treeile kanıtla:9d450c5(YÖK logosu) bu dalın tepesine çakışmasız cherry-pick ediliyor.
- Commit 1 [KARAR]:
- 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, tabane1bb482(cta-sira-form.tsxP2'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.tsxiçine dilim yardımcı fonksiyonu. - Kabul kriterleri:
- Commit 1 — sayfalama (10 §B3 aynen):
sayfa > 1iken bölüm sayfasınıntitle+description+ H1'i o sayfanın taban sırası aralığını taşır (dilimdeki min–maxefektifSira; null'lar hariç; tümü null ise "taban verisi olmayan programlar"; lisans/önlisans karışan dilimde aralık yine min–max). Üniversite sayfasındadescription+ 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,robotsindex, follow, sitemap ve ikisayfa/[no]/page.tsxDEĞİŞMEZ. Metadata ve gövde aynı dilim hesabını tek yardımcıdan alır. - Commit 2 — vaat dili + köprü:
CtaSiraForm'a isteğe bağlıaciklama?: stringprop'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'eCtaSiraFormeklenir — üniversite sayfasıyla aynı konumda (liste + sayfalama altı,mt-10). Buton metni/ikon deseni değişmez (metin + sondaArrowRight).
- varsayılan (4 yer): iki kart başlığında "Sıralamana yakın programlar hangileri? Saniyede gör."; çekmecenin
grep -rniE "yerleşir misin|yerleşirsin" src→ 0 (LLM prompt'ları hariç). Yeni badge/pill/modal yok; mevcutSectionEyebrowaynen.
- Commit 1 — sayfalama (10 §B3 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_goruntulendikoruması,SAYFA_BOYU,noindex, canonical. - Bilal onayı: iki commit bağımsız; metni beğenmezse
git merge gece/p7-katalog~1yalnı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, tabangece/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:
- Profil yokken
programEkleIsteprogramı hemen listeye ekler (risknull), kapıyı açmaz; dönüşeprofilsiz: trueeklenir.program_eklendi {kaynak, yol: "dogrudan", profilli: "hayir"}(profilli dalda"evet"). - 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). SonnerlabelReactNode kabul ediyorsa sondaArrowRight className="size-4"; etmiyorsa düz metin + rapora not. Metnin başında ikon yok,Sparklesyok. - Profil sonradan girilince mevcut
riskleriYenilenull riskleri doldurur (kod incelemesiyle göster; yeni kod yazma). - 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 riskiaz-risklisayıyor —:33, yanlış renk riski). Kırılan/yanıltan yer varsa düzeltme, raporla (Bilal kararı). 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).
- Profil yokken
- 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
/listemBilal'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ızcontent/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~1ile 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-miyeni 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…vemezuna-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.
gece/rehber-yazilari+gece/p1-rehber-altyapibirlikte. Önce osym.gov.tr'de ek yerleştirme sonuç tarihine bak (açıklandıysa yazıyı güncelle). B1'i henüz teyit etmediysengece/rehber-yazilari~1.tarih/guncellemealanları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.gece/p2-olcumilk üç commit (git merge gece/p2-olcum~1);c055e82karar #8'e göre.gece/p5-kapi-olcum(P2~1'i zaten içerir). Karar #12 "evet" ise onun yerine doğrudangece/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).gece/p3b-tadimlik-dili~1(=16c4508+cae2aaa+ tadımlık düzeltmesi) → istenirsegit 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-dilidalını doğrudan merge etme.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".gece/p4-epostaen son: P2 merge edilmiş olmalı (60 sn sayaç), lokal docker testi (07-P4 adımları), Gitea'daRESEND_API_KEY+EMAIL_FROMsecret'larının dolu olduğunun teyidi;ea3ba5f+RYBBIT_*secret'ları karar sonrası.- 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
- 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. - + 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.
- 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). - 1 saatlik elle işler + P4: DMARC/SPF, magic link tıklama testi, Gitea secret'larının varlığı (
RESEND_API_KEY,EMAIL_FROM; yeniRYBBIT_*,EMAIL_REPLY_TO),destek@kutusunun açık olduğu, şema fontu lisansı → sonra lokal docker testiyle P4'ü merge et. - 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.