Çok ajanlı gece vardiyasının çıktıları: analitik (Rybbit) bulguları, SEO/GEO konu planı, marka stratejisi, canlı mail testi, CEO kararları (2 tur), CTO şartnamesi, yazar/yazılımcı raporları, bağımsız kod denetimi ve sabah özeti (yazılı + sesli). Kod değişiklikleri gece/* dallarında. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.