# 05 — CEO kararları (gece vardiyası, 22 Eylül 2026) Hazırlayan: CEO ajanı · Kaynak: `00-kurucu-brief.md`, `02-seo-konu-plani.md`, `03-marka-ve-odeme.md`, `04-sifir-odeme-teshisi.md`, `01-orkestrator-gunlugu.md` + kendi kod/DB doğrulamalarım. Yöntem: yalnız okuma. Kod ve içerik değiştirilmedi; `KARARLAR.md`/`BACKLOG.md`'ye **dokunulmadı** (Bilal'in commit'lenmemiş değişikliği var). Karar günlüğüne girecek kayıtlar en sonda hazır. İşaret: **[D]** bu gece koştuğum sorgu/okuduğum dosya:satır · **[Ç]** koddan çıkarım · **[A]** başka ajanın açtığı dış kaynak, ben doğrulamadım. --- ## Tek cümlelik teşhis > **"Öğrenciler ödemiyor" bir pazar bulgusu değil, bir ölçüm yokluğudur: 30 günde ödeme ekranına 2 kişi geldi, kasa 6 hafta kırıktı, ödemesini beklediğimiz kişiye (veli) sitede tek bir yüzey yok ve ona verdiğimiz tek söz (PDF) ödemenin arkasında kilitli — bu yüzden bu hafta fiyata, maskeye ve marka adına dokunmuyoruz; kasanın çalıştığını kanıtlıyor, verdiğimiz sözü koda eşitliyor ve kurucunun istediği içerik hattını kalite kapısıyla birlikte kuruyoruz.** ## Özet — odak (5 madde) 1. **Ad değişmiyor, genişleme kapalı.** Marka ajanının tavsiyesi doğrulandı; gerekçesini daralttım: kilit adda değil veride ve mevsimde. Tek cümlelik tetik aşağıda. Bu karar bedava (maliyeti sıfır), o yüzden bende kaldı — Bilal'e gitmiyor. 2. **Ödeme sırası: (1) kasa çalışıyor mu, (2) verdiğimiz sözü koda eşitle, (3) ödeme öncesi tek gerçek önizlemeyi ilk ekrana getir, (4) ödeyecek kişiye tek yüzey.** Fiyat, maske (3→8), taksit ve ikinci paket bu hafta **açılmıyor** — ödeme ekranını gören kimse olmadığı için hepsi n=2 üzerine kurulu tahmin olur. 3. **Ödeyen veli, kullanan öğrenci — ama bu hafta akış değişmiyor.** Bu hafta atılan tek veli adımı kod değil, içerik: veli yazısının kendi gövdesinde veliye hitap eden kapanış. "Listeyi veline gönder" e-postası (3. kişi verisi + KVKK) 2027 öncesine PRD olarak bırakıldı. 4. **İçerik hattı kurucunun istediği gibi çoğalıyor: haftada 4 yazı, dalga başına en çok 5 paralel yazar, her dalga tek editör geçişinden geçmeden bir sonraki başlamaz.** Ama bu gecenin 10 yazısının **hiçbiri bu sabah yayına girmiyor**: üç yazıda rakamları kendi belirttikleri yöntemle yeniden üretemedim (aşağıda dosya:satır ve sorguyla). "Yayımlanmaz" kriterim §C.4'te. 5. **Bu turda 5 yeni teknik paket onaylandı** (2 XS, 3 S ≈ 50 dk inceleme). P1–P4 vardiya sırasında `main`'e merge edildi (84fc88e, 01:38) ama **push edilmedi** — `main`, `origin/main`'in 18 commit önünde [D]. Bilal'in sabahki ilk işi yeni kod değil, bu kuyruğun build + push'u. --- ## 1. İddiaların kod/DB doğrulaması Her satırı bu gece ben açtım. "Doğru ama eksik" = iddia doğru, sonucu değiştiren bir şey atlanmış. | # | İddia | Sahibi | Hüküm | Kanıt | |---|---|---|---|---| | 1 | Kasa 6 hafta kırıktı; uçtan uca tamamlanmış ödeme hâlâ 0 | Marka §2.1, Ürün §2 | **Doğru** (kaynak: 21 Eyl gece prod `orders` sorgusu, `KARARLAR.md`) — bu gece prod'a erişmedim, teyit Bilal'in testine bağlı | `docs/ekip/KARARLAR.md` 21 Eyl gece kaydı | | 2 | `/paket` girişsiz ziyaretçiye 299 TL'lik buton göstermiyor, "Paketi sonra alırsın." diyor | Ürün Ö2 | **Doğru ama eksik** — eksik olan: bu metin **21 Eylül'de Bilal'in onayladığı kararın uygulaması**; önceki hâli "Giriş yap — sonra 299 TL'ye…" idi | `paket-satinal.tsx:128-146` [D]; `git show 95bc87e` [D]; `KARARLAR.md` 21 Eyl gece #6 | | 3 | `/giris` ödemeye gelen kişiye üçüncü kez ücretsiz deneme anlatıyor | Ürün Ö2(b) | **Doğru ama eksik** — `funnel` koşuluna `/paket` eklemek **yetmez**: funnel dalı da "Seçimlerin hazır — listen üretilsin" diyor, ödeme niyetiyle gelene o da yanlış. Üçüncü dal gerekir | `giris-karti.tsx:28-31, 52-65` [D] | | 4 | Paket "60 danışman sorusu" diyor, kodda en çok 51 kalıyor | Ürün Ö3 | **Doğru** | `paket-satinal.tsx:36-41` (`${URUNLER.paket.credits} Yapay Zeka danışman sorusu`), `credits.ts:7,14,17`, `rapor-actions.ts:118-124` ve `:244-249` — `spendCredits` **`hasPaket` dalı olmadan** çağrılıyor [D] | | 5 | Çözüm (a): paketliden liste/revizyon kredisi alınmasın | Ürün Ö3 tavsiyesi | **Doğru ama tehlikeli — raporun kaçırdığı şey bu** | `spendCredits`'in ledger'daki UNIQUE `refId`'si, üretimin **tek idempotency çapası**; DUPLICATE dalı (`rapor-actions.ts:133-162`) ve iade mantığı ona bağlı. Çağrı atlanırsa paketli kullanıcı aynı `requestId` ile LLM üretimini tekrar tekrar tetikleyebilir ve Bilal'in şu an üzerinde çalıştığı "çifte kredi" düzeltmesi (backlog #1) paketlide hükümsüz kalır. Çözüm: çağrıyı kaldırma, `amount: hasPaket ? 0 : RAPOR_KREDI` yap — `gte(creditBalance, 0)` geçer, ledger satırı (delta 0) yazılır, DUPLICATE korunur. İade dalı da (`grantCredits`, `:172-176`) aynı koşulu almalı, yoksa paketliye bedava 3 kredi sızar [D + Ç] | | 6 | Ödeyecek kişiye (veli) sitede tek düğme yok | Marka §2.4 | **Doğru — ve rapordan daha kötü** | `src/` içinde "veli" 2 yerde, ikisi de aynı özellik satırı (`app/page.tsx:197`, `paket-satinal.tsx:36`) [D]. Eksik olan: o tek vaat (**PDF**) tamamen ödemenin arkasında — `rapor-yazdir.tsx:28` `if (!user.hasPaket) redirect("/paket")` [D]. Yani veliye verdiğimiz tek sözü veli ödemeden göremiyor | | 7 | Veli rehber yazısının CTA'sı öğrencinin CTA'sı | Marka §2.4 | **Doğru ve genel** | `rehber-makale.tsx:112-116` — `CtaSiraForm` **tüm** yazıların altına basılıyor, yazı başına seçim yok [D] | | 8 | Satıcı kimliği / fatura / makbuz e-postası yok | Marka §2.3 | **Doğru** | unvan/vergi/MERSİS grep = 0 [D]; `eposta.ts`'te yalnız 2 şablon (`:127` magic link, `:173` kredi hatırlatma) [D] | | 9 | Sosyal kanıt şeridi `/paket`'e taşınsın | Marka Ö2(b) | **Yanlış (bu tur)** | Eşik 25 liste (`sosyal-kanit-sabitler.ts:11`) [D], 30 günde üretilen liste 3 (`01-ai-listesi-hunisi` §5.1). Taşınsa da **hiç çizilmez**. Taşıma işi değil, ölçü işi | | 10 | Taksit kapalı | Marka §2.3 | **Doğru** | `iyzico.ts:201` `enabledInstallments: [1]` [D] | | 11 | Paket adı sezona kilitli ("Tercih Dönemi Paketi") | Marka §1.1 | **Doğru** | `credits.ts:7` [D] | | 12 | Footer ürünü "YKS Tercih Robotu 2026" diyor | Marka §1.5 | **Doğru** (satır 49 değil **48**) | `site-footer.tsx:48` [D] | | 13 | `/sonuc` ilk ekranı boş gri harita placeholder'ı | Ürün Ö4 | **Doğru** | `manuel-harita.tsx:69-79` [D] | | 14 | Tadımlık tablonun ~1.500 px altında | Ürün Ö5 | **Doğru** | `sonuc/page.tsx:102-118` — sıra: `ManuelHarita` → `SonucProgramTablosu` → `TadimlikBolumu` [D] | | 15 | 20 yazı `/rehber`'i kullanılamaz hâle getirir (T33, P0) | SEO T33 | **Doğru ama yanlış yeri işaret ediyor** | `/rehber` düz masonry, tarihe göre desc, kümeleme/sayfalama yok (`rehber-listesi.tsx:7-12`, `rehber.ts:250-253`) [D] — 52 kart çirkin ama kullanılabilir. Asıl kırılan yer **makale altı**: `getAllRehberler().filter(...).slice(0,4)` (`rehber-makale.tsx:45-47`) [D] → 52 yazının **hepsinde aynı 4 yeni yazı** görünür, iç link grafiği çöker. P0 olan yarısı bu, `/rehber` gruplaması P1 | | 16 | SEO planının DB rakamları | SEO §2 | **Doğru — birebir** | Altı yıllık trend (İktisat 51/256.761→131.892, Tarih 64/276.363→120.510, Psikoloji 184/152.325→270.358, İlk. Mat. Öğrt. 76/83.225→218.963), kontenjan kısıntısı (İng. Dili −1.096, Görsel İletişim −1.084, Hukuk −1.072, Diş Hek. −792), önlisans 9.254/354.627, bantlar 64/3.361/8.201, `netler` 2025=20.821 — **hepsini koşturdum, hepsi tuttu** [D] | | 17 | `netler` = "yerleşenlerin ortalama netleri" (SEO planı §2 ilk paragraf) | SEO #2 | **Yanlış** | YÖK Atlas verisi **son yerleşen kişinin** netleridir; bu gece yazılan `kac-net-ile-hangi-bolum.md:7` doğru çerçeveyi kullanmış. Planın cümlesi yayına **girmemeli** | | 18 | ÖSYM 2027 takvimi açıklanmadı → takvim yazısı şimdi yazılmaz (SEO §3) ↔ orkestratör `yks-2027-takvimi`'ni yazdırdı | SEO §3 ↔ Orkestratör | **Çelişki çözüldü: yazı haklı** | Yazının tezi zaten "açıklanmadı"; her satır AÇIKLANDI/BEKLENTİ etiketli, 2027 sütununda tek bir uydurma tarih yok (`yks-2027-takvimi.md:7,47,51-60`) [D]. Ayrıca 2026 satırı (29 Tem–10 Ağu) koddaki sezon sabitleriyle çakışıyor (`site-top-banner.tsx:7-8`) — iç tutarlılık teyidi [D] | ### Raporların kaçırdığı, benim eklediklerim 1. **Ö3(a)'nın idempotency maliyeti** (üstte #5). Tek satırlık bir "kredi düşme" kaldırma işi değil; yanlış yapılırsa çifte LLM maliyeti + backlog #1'in delinmesi. 2. **`/giris`'in üçüncü dalı** (üstte #3). Ö2(b) önerildiği gibi uygulanırsa metin yine yanlış olur. 3. **Veliye verilen tek söz paywall'un arkasında** (üstte #6). "Veli sayfası yok"tan daha keskin bir cümle ve bedava düzeltilebilir bir konum hatası değil — gelir modeli kararı. Not ediyorum, bu hafta açmıyorum. 4. **Gündüz yazdığım P1 kabul kriteri hatalıydı.** "`grep -rn "Tercih dönemi bitmeden" src/` → 0" ölçüsü işe yaramaz: cümle JSX'te satır sonuna bölünmüş (`hero-focus-button.tsx:44-46, 63-66`). Doğru ölçü `grep -rn "bitmeden yerini al" src/`; onunla `main`=2 → `icerik/sezon-celiskisi`=0, yani **P1 kabul kriterini geçiyor** [D]. Kriter düzeltildi. 5. **P1 dalı kapsamını aştı ama kabul edilebilir yönde:** `src/lib/sezon.ts` (86 satır, tek kaynak sezon takvimi + `BANT_METNI`) eklenmiş, hero'ya kanonik sağ ok konmuş. Bant metni A/B iki seçenek olarak hazır (`4034f03` "[Bilal]" commit'i dalın tepesinde, cherry-pick edilmezse dal A ile tutarlı) [D]. Bu, markanın "4 sezon durumu için tek metin şeması" isteğinin altyapısı — onaylıyorum, ama kayda geçiyorum: **tek amaçlı paket kuralı esnetildi.** 6. **`/rehber` sayfa başlığı sezona kilitli:** "Tercih Rehberi 2026 — YKS Tercih Dönemi Yazıları" (`src/app/rehber/page.tsx:13-17`) [D]. Bu gece eklenen yazıların yarısı 1. sınıf/veli/2027 içeriği; başlık artık sayfanın içeriğini yanlış tarif ediyor. 7. **Ödeme yolu değişikliği bu hafta yasak bölge.** Bilal tek gerçek uçtan uca ödemeyi yapacak; o testten **önce** `iyzico.ts`, `odeme-actions.ts`, paket adı ve taksit parametresine el değmez — yoksa testin neyi ölçtüğü belirsizleşir. Bu, aşağıdaki üç ertelemenin ortak gerekçesi. --- ## 2. Kurucunun dört sorusuna cevap ### A · Marka adı ve genişleme **Marka ajanının analizi doğrulandı, gerekçesi daraltıldı.** Doğrulananlar: paket adının sezona kilitli olması (`credits.ts:7`), footer'ın ürünü reddedilmiş kategoriyle adlandırması (`site-footer.tsx:48`), logo tipografisinin ağırlığı "Tercih"e kaydırmış olması (`site-header.tsx:22-27`), "Kolay yerleşme" çipinin ürün içinde *düşük hedef* anlamına gelmesi (`sihirbaz-sabitler.ts:17`) — hepsi [D]. Dış kaynaklar (TDK, MEB LGS robotu, Armut, Kunduz, 19.566 MEB birimi) **[A]** — ben açmadım, marka ajanı açtı; kararım bunların hiçbirine tek başına dayanmıyor. **Çürüttüğüm tek yer:** marka raporu "ad kararı ile genişleme kararını ayırın" derken genişleme tetiğini yalnız ödeme adedine bağlıyor. Eksik: genişlemenin gerçek maliyeti kod değil **mevsim ve veri hattı**. DGS/KPSS'nin cazip görünmesinin sebebi "aynı veri" değil, **boş kalan Ağustos–Eylül**; ama o ay bugün zaten boş ve biz onu dolduramıyoruz. İkinci alan, birinci alanın cevaplayamadığı soruyu ikiye katlar. > **[KARAR] — tek cümle:** Ad değişmiyor; KolayTercih üniversite tercihinin dışına ancak 2027 YKS sezonunda **100 tamamlanmış ödeme** görülürse ve ilk alan **DGS/KPSS** olarak açılır — LGS hiçbir koşulda açılmaz (MEB'in ücretsiz ve resmî yapay zekâ destekli LGS robotu var [A]). Maliyeti sıfır bir karar (hiçbir şey değişmiyor), o yüzden Bilal'e gitmiyor. Bilal'e giden tek ad konusu marka **tescili**dir (para + hukuk) ve onu da bu hafta istemiyorum; önce bir engel kontrolü gerekiyor (aşağıda marka ajanına soru). ### B · Öğrenciler neden ödemedi — çelişki çözümü ve sıra **İki rapor çelişmiyor, tek bir yerde çarpışıyor: `/paket` girişsiz CTA'sı.** Ürün yöneticisi "birincil buton fiyatı ve satın almayı taşısın, 'Paketi sonra alırsın.' kalksın" diyor (Ö2a). Ama bugünkü metin **21 Eylül'de Bilal'in onayladığı kararın ta kendisi** (`KARARLAR.md` 21 Eyl gece #6; `git show 95bc87e`). Gerekçesi olarak gösterilen 24 Ağustos'taki kullanıcı ise **o karardan önceki sürümü** gördü. Yani ortada yeni kanıt yok, bir günlük kararın verisi hiç okunmadı. **Hüküm: Ö2(a) reddedildi** (PROTOKOL: verilmiş karar yeni kanıt olmadan açılmaz). **Ö2'nin onaylanan yarısı:** "Paketi sonra alırsın." cümlesi kalkar — o cümle kararın metni değil, satın almayı aktif olarak erteleten bir alt satır; kaldırılması kararı bozmaz. **Sıra (ve neden bu sıra):** ölçülemeyen bir hipotezi test etmeden önce, testin mümkün olduğunu kanıtlamak gerekir. 1. **Kasa çalışıyor mu?** Bilal'in tek uçtan uca ödemesi + `odeme_hata {kod}` olayı (G2). Bu olmadan aşağıdaki hiçbir sayı yorumlanamaz. 2. **Verdiğimiz sözü koda eşitle.** "60 soru" ↔ 51 soru (G3). Ölçütüm sırasında ilk madde: kullanıcıya verilen sözü bozan yanlış bilgi. Ödeyen 0 kişi olduğu için **geri dönüş maliyeti bugün sıfır, bir hafta sonra olmayabilir.** 3. **Ödeme öncesi tek gerçek önizlemeyi ilk ekrana getir** (G1). "Ödemek için sebep" testinin tek eksiği, teslim edilecek şeyin örneğini ödeme kararından önce göstermek; örnek zaten üretilmiş ve bedava (522 satırlık tadımlık havuzu). 4. **Ödeyecek kişiye tek yüzey.** Bu hafta yalnız içerik adımı (aşağıda). **Fiyat ve maske kararı — erteleme gerekçesi:** 299 TL'nin yanlış olduğunu söyleyen **tek bir veri yok**, çünkü fiyatı gören hiç kimse ödeme ekranına varamadı (30 günde `odeme_baslatildi` → `/odeme` görüntülemesi = 0). Maskeyi 3'ten 8'e çıkarmak ya da fiyatı indirmek, geri alındığında müşteride kötü görünen hamlelerdir; veri yokken yapılırsa geri alma ihtimali yüksektir. İkisi de **Bilal'in alanında ve bu hafta açılmıyor.** **Ödeyen öğrenci mi, veli mi?** > **Kullanan öğrenci, ödeyen veli.** Vizyon bunu zaten söylüyor (`vizyon.md:36`), ürün hiç uygulamamış: "veli" kelimesi kodda iki yerde ve veliye verdiğimiz tek söz (PDF) ödemenin arkasında kilitli (`rapor-yazdir.tsx:28`). **Bu karar bu hafta akışı nasıl değiştirir? Neredeyse hiç — bilerek.** Veliye giden e-posta üçüncü kişi verisidir (KVKK metni + onay cümlesi + yeni şablon = M boy) ve sezon dışı hacimde etkisi okunamaz. Bu hafta atılan tek adım **kodsuz**: `content/rehber/veliler-icin-tercih-rehberi.md` gövdesine veli diliyle bir kapanış paragrafı + doğru bağlantı eklenir (bileşen CTA'sı yazı başına seçilebilir hâle gelene kadar ara çözüm). Kalıcı çözüm (`kume: veli` olan yazılarda farklı CTA) G4'ün üstüne, sonraki tura. **Türkiye ölçeğinde büyüyen girişimlerden ders — bizim hacmimizde ne işe yarar?** | Kaldıraç | Bizde işe yarar mı (95 ziyaret/hafta)? | Gerekçe | |---|---|---| | İçerik / organik yer tutma | **Evet — sezon dışı çalışan tek kaldıraç** | AI gösteriminde ilk 10'un 7'si rehber yazısı; 24 rehber, 864 katalog sayfasından fazla gösterim çekiyor (`geo-raporu` §8.1.1 [A/D]). Bileşik getirili, trafikten bağımsız birikir. **Kurucunun "yazı çoğalt" talimatı hacim gerçeğiyle uyumlu olan tek büyüme hamlesidir.** | | Rehber öğretmen kanalı | **Evet** | MEB'in 81 ildeki 19.566 birimi [A] rakip değil dağıtım kanalı; rehberlik servisleri ve il MEM sayfaları bu tür sayfalara link verir. Maliyeti bir yazı (#17). | | Sezon öncesi satış penceresi (Kunduz modeli) | Evet ama **2027 işi** | Bugün satacak sezon yok; hazırlığı Nisan 2027. | | Fiyat testi / indirim | **Hayır** | n=2. | | Taksit | **Hayır (bu hafta)** | 299 TL'de ekonomik değil; ayrıca ödeme yolu bir kez uçtan uca çalışmadan ödeme isteğine parametre eklenmez. | | A/B testi | **Hayır** | Her kol 47 ziyaret/hafta. | | Sosyal kanıt şeridi | **Hayır** | Eşik 25, elimizde 3 liste var; taşısak da çizilmez [D]. | | Ücretli reklam | **Hayır** | Alt huni sızdırırken üste trafik pompalamak. | ### C · İçerik hattı **(a) Bu gecenin 10 yazısı.** Dördü 20'lik planın konuları (#1 `taban-siralamalari-alti-yilda-nasil-degisti`, #2 `kac-net-ile-hangi-bolum`, #6 `siralama-bandlari-hangi-kapilar-acilir`, #19 `yapay-zekaya-tercih-sordum-guvenilir-mi`), üçü 21 Eylül planından (`universitede-ilk-hafta…`, `yks-2027-takvimi`, `ek-madde-1-puanim-yetiyor-mu`), ikisi yedek havuzdan (`bilgisayar-mi-yazilim-muhendisligi-mi`, `kktc-universiteleri-okunur-mu`), biri plan dışı yeni konu (`yeni-acilan-bolumler-nasil-degerlendirilir`). **Hiçbiri bu sabah yayına girmiyor.** Gerekçe — üç yazıda rakamları, yazının kendi belirttiği yöntemle **bağımsız koşturduğumda tutturamadım**: | Yazı | Yazıdaki rakam | Benim koşum (aynı filtre) | Hüküm | |---|---|---|---| | `bilgisayar-mi-yazilim-muhendisligi-mi.md:7,66` | "56 üniversitenin 54'ünde" | **57 / 55** (istisna sayısı 2 ✓) | Düzeltilecek. Program/kontenjan tablosu (303/133, 12.993, 11.285, 134/169) **birebir tuttu** [D] | | `kktc-universiteleri-okunur-mu.md:81,212` | Lisans 13.162/7.923, önlisans 4.851/3.632 ve "toplamlarımız ÖSYM ile **birebir aynı**" | Bizim DB: **12.912/7.849** ve **4.637/3.537**; ayrıca 16 değil **23** ayrı `universite` değeri | "Birebir aynı" iddiası **yanlış** — ya çıkarılır ya farkın kaynağı (arşivlenen satırlar / KKTC-uyruklu kontenjanlar) yazılır | | `siralama-bandlari-hangi-kapilar-acilir.md:7,66` | 9.304 program / 271 üniversite / 81 il | Stated filtre ile **9.482 / 277 / 84** | Fark muhtemelen yurt dışı kampüs + kirli `il` değerleri (T34); yazı bunu satır satır yazmalı | | `kac-net-ile-hangi-bolum.md:7` | Tıp 31,5/28,2/33,8 (106) ✓; Hukuk 30,1/19,4/21,9 (51); Psikoloji 28,8/12,8/12,0 (72) | Tıp **birebir**; Hukuk 29,9/19,2/21,8 (52); Psikoloji 28,0/12,2/11,5 (75) | Havuz farkı açıklanmalı | Bu bir "kötü yazar" bulgusu değil — yazıların yöntem anlatımı dürüst, kaynakları açık, vaat dili yok, `yks-2027-takvimi` belirsizliği örnek biçimde yönetiyor. Bulgu şu: **filtre cümlesi, rakamı yeniden üretmeye yetmiyor.** Çözüm ucuz, çünkü yazarlar sorguyu zaten koştu. > **[KARAR]:** Bir yazı, içindeki her DB rakamı **yazının kendi verdiği sorgu/filtre ile bağımsız koşturulduğunda aynı çıkmadıkça yayımlanmaz.** Yazar raporuna kullandığı **tam SQL**'i yazar; `rehber-editoru` dalga sonunda tek geçişte yeniden koşar ve tutmayan her rakamı ya düzeltir ya çıkarır. **(b) Onaylanan yeni konular (bir sonraki dalga, 4 yazı):** `ayni-bolum-farkli-universite-siralama-farki` (#3 — şablon değeri yüksek, #10'un girdisi), `hangi-bolumlerin-kontenjani-azaldi` (#5 — kanonik #1 artık yazıldı, bağımlılığı kalktı), `rehber-ogretmenler-icin-veri-kaynaklari` (#17 — dağıtım kanalı, bağlantı kazanma), `bolumumu-sevmedim-hangi-kapilar-var` (#11 — hub; 600 kelime sınırı, beş mevcut yazıyı birbirine bağlar, G4 ile birlikte iç link değerini ikiye katlar). **#2'nin (`netler`) yayımlanması için Bilal'in onayını istemiyorum — kararı ben veriyorum:** veri YÖK Atlas kaynaklı ve kamuya açık, bizim özel verimiz değil; risk gizlilik değil doğruluktur. Koşullar: (i) her rakamın yanında **yıl etiketi** (2026 net verisi yok — `netler` max(yıl)=2025 [D]), (ii) çerçeve "**son yerleşen kişinin** netleri" olmalı — planın "yerleşenlerin ortalaması" ifadesi yanlıştır ve kullanılamaz, (iii) 5 satır YÖK Atlas'tan gözle teyit. **(c) Hız: haftada 4 yazı.** Dalga başına en çok 5 paralel yazar; **bir dalga editör geçişinden ve rakam yeniden üretiminden geçmeden sonraki dalga başlamaz**. Dalganın en çok yarısı DB rakamına dayansın (doğrulama maliyeti dengelensin). Bu hızla 52 yazıya ~5 haftada varılır ve Bilal'in içerik borcu yazı başına ~2 dakikaya iner (yalnız iki listeyi okur: kaynak açılamadığı için çıkarılan iddialar + tutmayan rakamlar). **(d) "Yayımlanmaz" kriterim (kalite eşiği):** 1. Rakam, yazının kendi filtresiyle yeniden üretilemiyorsa. 2. Yöntem kutusu yoksa (hangi tablo, hangi yıl kolonu, hangi filtre, kaç satır + veri tarihi). 3. Açılamayan kaynağa dayanan cümle varsa — "muhtemelen/genelde" ile yumuşatılamaz, çıkarılır. 4. Vaat dili tek geçişte bile varsa ("yerleşirsin", "garanti", "kesin", "atanırsın"); istihdam/atama iddiası yasak. 5. Mevcut bir yazıyla aynı arama niyetini hedefliyor ve ayrım cümlesi ilk 200 kelimede yoksa. 6. Teknik: 3 zorunlu frontmatter alanı, 1 mermaid + `%% aria:`, ≥1 tablo, ölü iç link yok (`/il/*` sayfası yok; `/tercih-robotu` 301'e gidiyor). **(e) T33 — `/rehber` 52 yazıda kullanılamaz hâle gelir mi?** Kısmen; SEO raporu doğru teşhis koymuş ama yanlış yeri P0 ilan etmiş (§1 #15). **P0 olan yarısı makale altındaki "Diğer rehber yazıları"**, ve bu **bir sonraki turun işi değil, bu turun işi** (G4) — çünkü alan yazılar teslim edilirken eklenirse ikinci bir elden geçirme olmaz. `/rehber` index'inin küme başlıklarıyla gruplanması P1, sonraki tur. ### D · Gündüz verdiğim P1–P5 ile bu gecenin işleri çelişiyor mu? **Hayır, iki yerde kesişiyor ve ikisini de birleştirdim.** - **P1–P4 zaten dallarda uygulandı ve vardiya sırasında `main`'e merge edildi** (`faba6f4`, `001440a`, `d720e18`, `84fc88e`; 01:37–01:38) [D]. P1'in kabul kriterini düzeltilmiş grep'le doğruladım: geçiyor. **Push yok**; `main`, `origin/main`'in 18 commit önünde. Bant metni A/B seçeneği hazır (`4034f03`). - **P5 (tadımlık vaadi/hedefi) ile ürün yöneticisinin Ö5'i (tadımlığı yukarı taşı) ve Ö4'ü (boş harita placeholder'ı) aynı ekranı değiştiriyor.** Üçü tek amacın parçası: *ödeme öncesi tek gerçek önizleme ilk ekranda görünsün ve doğru yere göndersin.* **Birleştirildi → G1.** Aynı dosyaya iki el değmez. - Ürün yöneticisinin Ö4'ü, gündüz ertelediğim tasarımcı Ö4'üyle **aynı şey değil**: ertelenen, `/sonuc` sıralamasının tersine çevrilmesiydi (M boy, CLS/SSR etkili); bu, tek `return null` (kaldırma işi). Çelişki yok. **Sabah Bilal'in önüne kaç madde, hangi sırayla:** üç. (1) merge kuyruğunun build+push'u, (2) tek gerçek ödeme, (3) tek cümlelik veto hakkı. Yeni kod paketleri (G1–G5) gece/yarın yazılır ve **bir sonraki inceleme turuna** kalır; bu sabah onların incelemesini istemiyorum. --- ## 3. Onaylanan teknik paketler Her biri ayrı dal, tek amaç, push/merge yok. Satır numaraları `main @ 84fc88e`. Öncelik sırası: **G1 → G3 → G2 → G5 → G4**. Bilal'in tek inceleme aralığı varsa **G1 ve G3** alınır. ### G1 · `funnel/sonuc-ilk-ekran` — S (P5 + Ö4 + Ö5 birleşik) - **Amaç:** Ödeme öncesi tek gerçek önizleme ilk ekranda görünsün ve doğru yere göndersin. - **Kapsam:** (a) `sonuc/page.tsx:102-118` — `` ``'nun **öncesine** alınır. (b) `manuel-harita.tsx:69-79` — `liste.length === 0` iken bileşen `null` döner. (c) `tadimlik-satiri.tsx:111` — giriş callback'i `sonucHref()` yerine `/listem?uret=1` (üretim dönüşte kendiliğinden başlar). (d) `tadimlik-satiri.tsx:186` — "24 satırın tamamı" iddiası **çıkar** (maske 3 satır açıyor, `rapor-maske.ts:12`); yerine gelecek yeni cümle **ayrı `[Bilal]` commit'i**, ana commit yalnız yanlış iddiayı kaldırır. **Kapsam dışı:** maskenin kaç satır açtığı, `/sonuc` sıralamasının tersine çevrilmesi, `

` işi, tadımlığın başka yüzeylere taşınması. - **Kabul:** `/sonuc` sunucu HTML'inde tadımlık başlığının ilk geçiş konumu tablo başlığınınkinden **önce**; boş durumda "haritada belirir" metni HTML'de **yok**, listeye program eklenince harita yine görünür; girişten dönüşte üretim **ek tık olmadan** başlar; ekranda teslim edilmeyen bir sayı vaat edilmez; havuz boşsa tadımlık yine hiç render edilmez; `/meraklisina` şeması etkilenmez (sihirbaz adımları, havuz kuralları, 24'lük iskelet değişmiyor) ve bu rapora yazılır. ### G3 · `odeme/paket-vaadi` — S - **Amaç:** Paket sayfasındaki sözü kodla eşitlemek: "60 danışman sorusu" gerçekten 60 olsun. - **Kapsam:** `rapor-actions.ts` — `spendCredits` çağrısı **kaldırılmaz**, tutarı koşullanır: `amount: user.hasPaket ? 0 : RAPOR_KREDI` (liste `:118-124`, revizyon `:244-249`). İade dalları (`grantCredits`, `:172-176` ve revizyon karşılığı) **aynı koşulu alır**. Metinler tek kaynaktan doğru okunur (`paket-satinal.tsx:36-41`, `app/page.tsx:201`, `listem-govde.tsx` kilit satırı). **Kapsam dışı:** fiyat, kredi adedi, top-up, maske. - **Kabul:** Paketli kullanıcıda liste ve revizyon **kredi düşmez**; `credit_ledger`'da satır yine yazılır (delta 0) ve **aynı `requestId` ile ikinci üretim DUPLICATE döner** (idempotency korunuyor, backlog #1 delinmedi); üretim hata verirse paketliye **kredi iade edilmez**; paketsiz kullanıcıda davranış bit-bit aynı; `grep -rn "danışman sorusu" src/` sonuçlarının tamamı aynı sayıyı ve aynı koşulu söyler; `guvenlik-uyum` denetimi temiz. ### G2 · `odeme/kasa-olculur` — XS - **Amaç:** Ödeme hunisine payda. (Backlog #7 = ürün Ö1'in kod yarısı.) - **Kapsam:** `satin-al-form.tsx`'in üç hata dalına (`:49, :53` civarı) `odeme_hata {kod}` olayı; `OlayAdi` birliğine tek ad. **Kapsam dışı:** `odeme_tamamlandi` sunucu tarafı olayı, yeni sayfa görüntüleme enstrümanı. - **Kabul:** `grep -n "odeme_hata" src/features/odeme/components/satin-al-form.tsx` ≥1 ve ad `src/lib/analitik.ts`'te tanımlı; mevcut `odeme_baslatildi` davranışı değişmez; build + tip kontrolü temiz. **Yayın koşulu: Bilal'in test ödemesiyle aynı yayında çıkar.** ### G5 · `icerik/paket-erteleme-cumlesi` — XS - **Amaç:** Satın alma niyetiyle gelen kişiye "sonra al" dememek. - **Kapsam:** (a) `paket-satinal.tsx:141-143` — "Paketi sonra alırsın." cümlesi **çıkar**; birincil buton ve ilk iki cümle (21 Eyl kararı) **aynen kalır**. (b) `giris-karti.tsx:28-31, 52-65` — `/paket` callback'i için **üçüncü** metin dalı ("ödemeye devam"), mevcut funnel metni `/sonuc` ve `/listem?uret=1` için korunur. **Kapsam dışı:** birincil CTA metni ve hedefi (21 Eyl kararı — açılmıyor). - **Kabul:** `grep -n "Paketi sonra alırsın" src/` → 0; `/giris?callback=/paket`'te ekranda deneme kredisi vaadi birincil cümle değil; `/sonuc` ve `/listem?uret=1` callback'lerinde metin değişmemiş; build temiz. ### G4 · `icerik/rehber-ilgili-yazilar` — S - **Amaç:** 42 (yakında 52) yazıda "Diğer rehber yazıları" bloğunun hepsinde aynı 4 yeni yazıyı göstermesini bitirmek. - **Kapsam:** (a) `src/lib/rehber.ts` — **opsiyonel** `kume:` frontmatter alanı (yoksa `"genel"`; mevcut 42 dosyanın hiçbiri değiştirilmeden derlenmeli). (b) `rehber-makale.tsx:45-47` — ilgili yazılar önce aynı kümeden, yetmezse tarihten tamamlanır. (c) `src/app/rehber/page.tsx:13-17` — sayfa başlığı/açıklaması sezon-bağımsız olur ("Tercih Dönemi Yazıları" ifadesi kalkar). **Kapsam dışı:** `/rehber` index'inin küme başlıklarıyla gruplanması (sonraki tur), mevcut 42 yazıya küme etiketi dağıtılması (ayrı, mekanik editör işi), yazı başına CTA seçimi. - **Kabul:** Küme alanı olmayan yazılarla site derlenir ve `/rehber` bugünkü gibi çalışır; kümesi olan iki yazıdan her birinin "Diğer rehber yazıları" listesi diğerini içerir; hiçbir makalede liste boş kalmaz; `/rehber` başlığında yıl/sezon iddiası yok. ### Onaylanan rehber yazıları **Bu gece yazılan 10 — "editörden geçmek koşuluyla onaylı", yayın sırası:** `taban-siralamalari-alti-yilda-nasil-degisti` · `kac-net-ile-hangi-bolum` · `siralama-bandlari-hangi-kapilar-acilir` · `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` **Sonraki dalga — onaylı 4 konu:** `ayni-bolum-farkli-universite-siralama-farki` · `hangi-bolumlerin-kontenjani-azaldi` · `rehber-ogretmenler-icin-veri-kaynaklari` · `bolumumu-sevmedim-hangi-kapilar-var` **Kodsuz içerik işi (1):** `veliler-icin-tercih-rehberi.md` gövdesine veli diliyle kapanış paragrafı + doğru bağlantı (bugün yazının altındaki CTA veliden **kendi sıralamasını** istiyor). --- ## 4. Bilal'e bırakılan kararlar (kısa tutuldu) Kurucu "CEO benim yerime karar verebilir" dedi; aşağıdakiler gerçekten geri dönüşü zor ya da kurucu bilgisi gerektiren üç madde. Kalanını kendim karara bağladım. | Karar | Tavsiyem | Geri dönüş maliyeti | |---|---|---| | **Paket içeriği (G3):** paketliye liste + revizyon kredisiz mi? | **Evet, kredisiz** — vizyonun kararı bu (`vizyon.md:32-34`), anlatması kolay ("krediler yalnız sohbet için") ve ödeyen 0 kişi olduğu için bugün kimseyi mağdur etmiyor. **Vetolamazsan uygulanır.** | Bugün sıfır; ödeyen çıktıktan sonra orta (paketi daraltmak kötü görünür) | | **Satıcı kimliği** (unvan/adres/vergi no) sitede açılsın mı? | **Sezon açılmadan zorunlu, bu hafta değil.** Para alan sitede satıcının kim olduğunu söyleyen tek satır yok (grep = 0) ve fatura/makbuz kelimesi hiç geçmiyor. 21 Eylül'de ertelendi, bu turda yeni kanıt yok — açmıyorum, ama "2027 öncesi zorunlu" diye kayda geçiriyorum | Geri dönüşü zor (ticari kimlik açma) | | **Deneme maskesi 3 → kaç satır / 299 TL** | **Bu hafta dokunma.** Fiyatı gören kimse ödeme ekranına varamadı; hangi sayının doğru olduğunu söyleyecek veri yok | Orta — fiyat/değer algısı; geri alması müşteride kötü görünür | *(Bilal'e götürmediklerim ve nedenleri: ad kararı — maliyeti sıfır, bende; `netler` yayını — kamuya açık veri, risk doğruluk, koşullarıyla bende; `/paket` birincil CTA — 21 Eyl kararı, açılmıyor; taksit, paket adı, makbuz e-postası, ana sayfa kıyas ekseni — ödeme testi öncesi ödeme yoluna el değmez; marka tescili — önce engel kontrolü, sonra karar.)* --- ## 5. Reddedilenler / ertelenenler | Öneri | Sahibi | Hüküm ve gerekçe | |---|---|---| | `/paket` girişsiz birincil CTA'sı fiyat + satın alma fiili taşısın | Ürün Ö2(a) | **Reddedildi.** 21 Eyl'de Bilal'in onayladığı kararın geri alınması; gösterilen kanıt (24 Ağu kullanıcısı) **karardan önceki sürüme** ait. Yeni kanıt yok | | Sosyal kanıt şeridini `/paket`'e taşı | Marka Ö2(b) | **Reddedildi (bu tur).** Eşik 25, elimizde 3 liste — taşınsa da hiç çizilmez [D] | | Taksit açılması | Marka Ö3 | **Ertelendi.** Ödeme yolu bir kez uçtan uca çalıştığı doğrulanmadan iyzico isteğine parametre eklenmez; komisyon etkisi de **doğrulanmalı** | | Paket adının sezon-bağımsız olması ("Tercih Dönemi Paketi") | Marka H1 | **Ertelendi — ödeme testinden sonraki ilk iş.** Ad, iyzico sepetine giden etikettir; testten önce değiştirmek testin neyi ölçtüğünü bulandırır | | Ödeme sonrası makbuz e-postası | Marka Ö2(c)/H3 | **Ertelendi.** Satıcı kimliği gelmeden makbuz metni yazılamaz; ayrıca ödeme akışına test öncesi el değmez | | "Listeyi veline gönder" düğmesi + veli e-postası | Marka Ö1/Y1 | **Ertelendi (PRD, en geç Nisan 2027).** 3. kişi verisi + KVKK onay metni + yeni şablon = M boy; sezon dışı hacimde ölçülemez. Bu hafta yerine kodsuz içerik adımı atılıyor | | Veli sayfası ("Çocuğunuz ne aldı?") | Marka Y3 | **Ertelendi** — aynı gerekçe, aynı pencere | | Ana sayfa kıyas ekseninin MEB'in ücretsiz danışmanlığına çevrilmesi | Marka Y4 | **Ertelendi (sezon öncesi).** Tespit değerli [A] ama tablo 21 Eyl'de yeni kuruldu; iki günde iki kez değiştirmiyoruz | | İkinci alan (DGS/KPSS/LGS) açılması | Marka §1.3 | **Reddedildi**, adet tetiğine bağlandı (§A). LGS kalıcı olarak kapalı | | `/rehber` index'inin küme başlıklarıyla gruplanması | SEO T33 | **Ertelendi (sonraki tur).** P0 olan yarısı G4'te; index duvarı çirkin ama kullanılabilir | | `siralama-bandina-gore…` yazısının `/il/[slug]` bağımlısı kardeşi (#18) | SEO #18 | **Reddedildi (bu tur).** `programs.il` kirli: 91 farklı değer, KKTC/yurt dışı şehirler, 110 boş `il` satırı (T34). Temizlik olmadan yazı ölü link üretir | | Öğretmenlik branş yazısı (#4) | SEO #4 | **Ertelendi.** İstihdam/YMYL sınırına en yakın konu; ikinci editör okuması gerektiriyor, bu dalganın kapasitesi dolu | | #7, #8, #9, #10, #12, #13, #14, #15, #16, #20 | SEO | **Sıraya alındı.** Haftada 4 yazı hızı; sonraki dalgalarda | | `vakif-universitesi-burslu-indirimli-ucretli-farki` | Orkestratör dalga 2 | **Ertelendi.** 3.821 vakıf lisans programında isimde burs etiketi yok [D: SEO §1]; veri sorusu çözülmeden tablo yayımlanmaz | | Vakıf üniversitelerinin **adıyla** doluluk yayını | 21 Eyl SEO §3 #10 | **Ertelendi — ben de sormuyorum.** Bilal'in kuyruğunda bundan değerli üç madde var; konu sırası gelince açılır | | `/sonuc`'a `

`, `/sonuc` sıralamasının tersi, mobil alt çubuk, tutarlılık temizliği, eval seti | 22 Eyl gündüz §5 | **Ertelemede kalıyor.** Yeni kanıt gelmedi | --- ## 6. Diğer ajanlara açık sorular (sonraki tur) - **`rehber-editoru` (en yüksek öncelik):** 10 yazıyı tek geçişte al. Zorunlu çıktı: (a) her DB rakamının yazının kendi filtresiyle yeniden koşulmuş hâli ve tutmayanların listesi — başlangıç noktası §C'deki dört satır (`bilgisayar…` 56/54 → 57/55; `kktc…` "ÖSYM ile birebir aynı" iddiası ve 16 vs 23 üniversite; `siralama-bandlari…` 9.304 vs 9.482/271 vs 277/81 vs 84; `kac-net…` Hukuk ve Psikoloji satırları), (b) açılamayan kaynak yüzünden çıkarılan cümleler, (c) kanibalizasyon denetimi: `siralama-bandlari-hangi-kapilar-acilir` ↔ mevcut `kac-siralama-ile-hangi-bolume-girebilirim` ayrım cümlesi ilk 200 kelimede var mı. - **`seo-geo`:** (1) Planın #2 için yazdığı "yerleşenlerin ortalama netleri" çerçevesi **yanlış** (doğrusu: son yerleşen kişinin netleri) — plandaki cümleyi düzelt, aynı hata başka konulara kopyalanmasın. (2) `yeni-acilan-bolumler…` plan dışı çıktı ve iyi bir yazı; 20'lik planın önceliklendirmesini bu konuyu da içerecek şekilde güncelle. (3) T34 (il temizliği) olmadan #18 ve T7 yapılmıyor — `veri-muhendisi` ile birlikte tek soru: boş `il` değerli 110 satırın kaynağı ne? - **`cto`:** G1–G5 şartnameleri; özellikle G3'ün idempotency koşulu (§1 #5) ve G4'ün "kümesiz yazı da derlenir" geriye dönük uyumluluğu. Ayrıca: `/rehber` gruplaması için küme taksonomisi 5–6 kümeyi geçmemeli (öğrenci-karar / veri-analiz / 1. sınıf / veli-öğretmen / takvim-mevzuat). - **`analitik`:** Rybbit bağlanınca ilk üç sorgu sabit: (a) 21 Eyl sonrası `tadimlik_goruntulendi` ve `liste_uretim_hata` **adedi**, (b) P1–P4 yayınından sonra girişli oturumlarda `/listem` görüntüleme adedi (taban: 30g'de 7), (c) `liste_uretim_basladi` haftalık adedi ve `basladi − (olusturuldu + hata + kredi_bitti)` farkı. Ek iş: tek sayfalık "haftalık adet kartı" tanımı. - **`marka`:** (1) TÜRKPATENT'te "kolaytercih" ve yakın yazımlar tescilli mi — **ad kararından önce bilinmesi gereken tek gerçek engel**, ve bunu Bilal'e sormaya gerek yok, açık kayıt. (2) 4 sezon durumu (hazırlık / sonuç bekleme / tercih / ek yerleştirme) için tek metin şeması — altyapı `src/lib/sezon.ts`'te artık var, `BANT_METNI` kayıtlarını doldur. - **`urun-yoneticisi`:** G1–G5 backlog'a "onaylı"; §5 tablosu "aday"; backlog #7 G2 ile kapanıyor; yeni satır: "rakam yeniden üretim kapısı" (içerik süreç işi). Veli ödeme yolu PRD'si `aday`, hedef pencere Nisan 2027. - **`qa-muhendisi`:** (1) `main @ 84fc88e` üzerinde P1–P4'ün kabul kriterleri — özellikle + kapısını bitiren kullanıcı nereye çıkıyor ve navbar 375 px'te satır sarıyor mu. (2) Gündüzki hatalı grep kriterine dikkat: doğru ölçü `grep -rn "bitmeden yerini al" src/`. (3) G3 için tek senaryo: paketli kullanıcı aynı `requestId` ile iki kez üretim tetikleyemiyor. - **`guvenlik-uyum`:** G3'ün ledger'a delta 0 satırı yazmasının mutabakat sorgularını (haftalık iyzico mutabakatı, `docs/odeme/iyzico.md`) bozup bozmadığı; ve paketliye iade yapılmamasının bir açık bırakıp bırakmadığı. - **`yapay-zeka-muhendisi`:** G1 tadımlığı ilk ekrana çıkarınca havuz kapsamı kritikleşiyor — `tadimlik_havuzu`'nda kategori kaçağı (backlog #10: "Makine Resim ve Konstrüksiyonu" sanat-medya kategorisinde) G1 yayınından önce kapatılmalı mı, yoksa kaçak satır oranı ihmal edilebilir mi? Sayıyla cevap. --- ## 7. Bilal'den istenen (3 madde) 1. **Merge kuyruğunu bitir ve yayınla.** `main` şu an `origin/main`'in **18 commit** önünde (P1–P4 + sezon altyapısı); bant metni için `4034f03`'teki A/B seçeneğinden birini seç (tavsiyem: **A** — kısa, 375 px'te tek satıra sığıyor), çalışma ağacındaki `liste-uretici.tsx` + `uretim-basladi-olayi.tsx` işini aynı pakete al, push edilecek commit üzerinde temiz worktree'de `pnpm build` al — **~45 dk**. 2. **Canlıda tek bir gerçek uçtan uca ödeme yap** (`/paket → /odeme → /odeme/sonuc`, sonra iyzico panelinden iade) ve üç şeyi yaz: `hasPaket` açıldı mı, kilit çözüldü mü, Rybbit'te `/odeme/sonuc` görüntülemesi düştü mü. **Bu hafta alınacak diğer bütün ödeme kararları bunun sonucuna bağlı** — **~15 dk**. 3. **Tek cümlelik veto:** paketli kullanıcıdan liste ve revizyon kredisi alınmaması (G3) sana doğru geliyor mu? Sessizlik onay sayılır ve uygulanır — **~2 dk**. *(Listeden düşürdüklerim: satıcı kimliği bilgileri — sezon öncesine kaydedildi, bu hafta iş üretmiyor; vakıf doluluk yayını kararı — sırası gelmedi; Search Console rakamları — merge/push ve ödeme testi bu hafta daha çok söyler; marka tescili — önce ajan engel kontrolü yapsın.)* --- ## KARARLAR.md'ye eklenecek kayıtlar > Bu gece `KARARLAR.md`'ye **dokunulmadı** (Bilal'in commit'lenmemiş değişikliği var). Aşağıdaki bloklar dosyanın sonuna olduğu gibi eklenebilir. ``` ## 2026-09-22 — Ad kalıyor; ikinci alan adet tetiğine bağlandı - Karar: "KolayTercih" adı değişmiyor. Üniversite tercihinin dışına çıkmak, 2027 YKS sezonunda 100 tamamlanmış ödeme görülmesine bağlı; görülürse ilk alan DGS/KPSS (aynı veri şeması, boş kalan Ağustos–Eylül), LGS hiçbir koşulda açılmıyor. Marka tescili ve .com.tr kararı ayrı ve Bilal'de; önce TÜRKPATENT engel kontrolü yapılacak. - Yetki: [KARAR] (ad değişmediği için maliyeti sıfır) · [BİLAL] (tescil/alan adı, para) - Gerekçe: Ad hiçbir kapıyı kapatmıyor; kilit adda değil veride ve mevsimde. Tek ürünün cevaplamadığı soru "pazar var mı" değil "bu üründen para geçiyor mu" (30 günde tamamlanmış ödeme 0); ikinci alan bu soruyu cevaplamaz, ikiye katlar. Kod kanıtı: paket adı sezona kilitli (`src/lib/credits.ts:7`), footer ürünü reddedilmiş kategoriyle adlandırıyor (`src/components/site-footer.tsx:48`) — ikisi de addan bağımsız, ayrı işler. Dış pazar kaynakları marka ajanının açtığı sayfalardan (`03-marka-ve-odeme.md` §1.1–1.5), CEO tarafından bağımsız doğrulanmadı. - Yerine geçtiği karar: — ## 2026-09-22 — Sıfır ödemede sıra: önce kasa, sonra söz, sonra önizleme; fiyat ve maske açılmıyor - Karar: (1) Bilal canlıda tek bir uçtan uca ödeme yapar ve aynı yayında `odeme_hata {kod}` olayı eklenir (G2, backlog #7). (2) Paket vaadi kodla eşitlenir: paketli kullanıcıdan liste/revizyon kredisi alınmaz — `spendCredits` çağrısı kaldırılmaz, tutarı 0'lanır; iade dalı da koşullanır (G3). (3) `/sonuc` ilk ekranı: tadımlık tablonun üstüne çıkar, boş harita placeholder'ı kalkar, tadımlık CTA'sı `/listem?uret=1`'e gider ve "24 satırın tamamı" iddiası kalkar (G1; gündüzki P5 + ürün yöneticisinin Ö4/Ö5'i tek pakette). (4) "Paketi sonra alırsın." cümlesi kalkar ve `/giris`'e `/paket` callback'i için üçüncü metin dalı gelir (G5). Fiyat (299 TL), deneme maskesi (3 satır), taksit, ikinci paket ve paket adı bu hafta AÇILMIYOR. - Yetki: [KARAR] (G1, G2, G5 ve G3'ün uygulaması) · [BİLAL] (G3'ün paket içeriği kararı — veto edilmezse uygulanır; fiyat/maske) - Gerekçe: 30 günde paywall'a 2 kişi geldi, `odeme_baslatildi` 60+ iken `/odeme` görüntülemesi 0 (`04-sifir-odeme-teshisi.md` §1-2). Fiyat/maske kararı n=2 üzerine kurulur ve geri alınması müşteride kötü görünür. Paket "60 danışman sorusu" diyor, kodda en çok 51 kalıyor (`paket-satinal.tsx:36-41`, `credits.ts:7,14,17`, `rapor-actions.ts:118-124`) — ödeyen 0 kişi olduğu için düzeltmenin en ucuz anı bugün. G3'ün kritik kısıtı: `spendCredits`'in ledger'daki UNIQUE `refId`'si üretimin tek idempotency çapası; çağrı atlanırsa paketli kullanıcı aynı `requestId` ile üretimi tekrar tetikleyebilir. - Yerine geçtiği karar: 2026-09-22 — Sevk sorunu… (P5 maddesi G1'de birleştirildi) ## 2026-09-22 — Ödeyen veli, kullanan öğrenci; ama bu hafta akış değişmiyor - Karar: Ürünün ödeyicisi veli kabul edilir. Bu hafta yapılan tek adım kodsuzdur: `content/rehber/veliler-icin-tercih-rehberi.md` gövdesine veliye hitap eden kapanış paragrafı ve doğru bağlantı eklenir. "Listeyi veline gönder" düğmesi + veli e-postası, veli sayfası ve ödeme akışında veli yolu PRD'ye alınır; hedef pencere en geç Nisan 2027. - Yetki: [KARAR] (erteleme + içerik adımı) · [BİLAL] (veli ödeme yolu, 2027 öncesi) - Gerekçe: `docs/urun/vizyon.md:36` veliyi ödeyici sayıyor ama kodda "veli" iki yerde ve ikisi de aynı özellik satırı (`src/app/page.tsx:197`, `paket-satinal.tsx:36`); veliye verilen tek söz olan PDF tamamen ödemenin arkasında (`rapor-yazdir.tsx:28`). Veli e-postası üçüncü kişi verisidir (KVKK onay metni + yeni şablon = M boy) ve sezon dışı hacimde ölçülemez. Ayrıca bütün rehber yazılarının altına aynı öğrenci CTA'sı basılıyor (`rehber-makale.tsx:112-116`), yani veli yazısı bugün veliden kendi sıralamasını istiyor. - Yerine geçtiği karar: — ## 2026-09-22 — İçerik hattı: haftada 4 yazı, rakam yeniden üretim kapısı, ilgili yazılar düzeltmesi - Karar: (1) Hız haftada 4 yazı; dalga başına en çok 5 paralel yazar; bir dalga editör geçişinden geçmeden sonraki dalga başlamaz; dalganın en çok yarısı DB rakamına dayanır. (2) YAYIMLANMAZ kriteri: rakam yazının kendi filtresiyle yeniden üretilemiyorsa; yöntem kutusu yoksa; açılamayan kaynağa dayanan cümle varsa; vaat/istihdam dili varsa; kanibalizasyon ayrım cümlesi ilk 200 kelimede yoksa; teknik asgari (3 frontmatter alanı, mermaid + `%% aria:`, ≥1 tablo, ölü iç link yok) sağlanmıyorsa. Yazar raporuna tam SQL'ini yazar, editör dalga sonunda yeniden koşar. (3) Bu gecenin 10 yazısı "editörden geçmek koşuluyla" onaylı; hiçbiri editör turu öncesi yayına girmez. (4) Sonraki dalganın 4 konusu: `ayni-bolum-farkli-universite-siralama-farki`, `hangi-bolumlerin-kontenjani-azaldi`, `rehber-ogretmenler-icin-veri-kaynaklari`, `bolumumu-sevmedim-hangi-kapilar-var`. (5) `netler` (program bazlı net) verisi yayımlanır — koşul: yıl etiketi zorunlu (2026 net verisi yok), çerçeve "son yerleşen kişinin netleri" (planın "yerleşenlerin ortalaması" ifadesi yanlıştır), 5 satır YÖK Atlas'tan gözle teyit. (6) `/il/*` bağımlı yazı (#18) ve vakıf burs etiketi kırılımına dayanan yazılar veri temizliği çıkana kadar yazılmaz. - Yetki: [KARAR] - Gerekçe: Kurucunun bu vardiya için tek ana çıktısı yazı çoğaltmak ve bu, ~95 ziyaret/haftalık hacimde ölçülebilir getirisi olan tek büyüme kaldıracı (AI gösteriminde ilk 10'un 7'si rehber yazısı, `docs/geo/geo-raporu.md` §8.1.1). Kapı gerekli: bu gece yazılan üç yazıda rakamlar kendi belirttikleri yöntemle yeniden üretilemedi — `bilgisayar-mi-yazilim-muhendisligi-mi.md:7,66` "56 üniversitenin 54'ü" (yeniden koşum: 57/55), `kktc-universiteleri-okunur-mu.md:81,212` "ÖSYM ile birebir aynı" (bizim DB: 12.912/7.849 ve 4.637/3.537), `siralama-bandlari-hangi-kapilar-acilir.md:7` 9.304/271/81 (yeniden koşum: 9.482/277/84). Aynı yazıların program/kontenjan tabloları ve SEO planının bütün omurga rakamları birebir tuttu — sorun yöntem cümlesinin rakamı yeniden üretmeye yetmemesi. - Yerine geçtiği karar: 2026-09-22 — Sevk sorunu… ("bu tur yeni rehber yazısı onaylanmadı" satırı; kurucu brief'i 22 Eyl gece bunun üstüne geçti) ## 2026-09-22 — `/rehber` ölçek borcunun P0 yarısı bu turda kapanır - Karar: `kume:` opsiyonel frontmatter alanı eklenir, makale altındaki "Diğer rehber yazıları" önce aynı kümeden seçilir ve `/rehber` sayfa başlığı sezon-bağımsız olur (G4, dal `icerik/rehber-ilgili-yazilar`). `/rehber` index'inin küme başlıklarıyla gruplanması ve mevcut 42 yazıya küme etiketi dağıtılması sonraki tura bırakıldı. - Yetki: [KARAR] - Gerekçe: SEO T33 doğru teşhis koydu ama yanlış yeri P0 ilan etti: `/rehber` düz bir duvar olsa da kullanılabilir; asıl kırılan yer `rehber-makale.tsx:45-47` — `getAllRehberler().slice(0,4)` tarihe göre sıralı olduğu için 42 (yakında 52) yazının HEPSİ aynı 4 yeni yazıya link veriyor, iç link grafiği çöküyor. Alan, yazılar teslim edilirken eklenirse ikinci elden geçirme olmaz. - Yerine geçtiği karar: — ## 2026-09-22 — `/paket` girişsiz CTA kararı açılmıyor; yalnız erteleyen cümle kalkıyor - Karar: `/paket` girişsiz ziyaretçinin birincil butonu ("Giriş yap — ilk 3 tercihini ücretsiz gör") 21 Eylül kararı gereği AYNEN kalır; yalnız altındaki "Paketi sonra alırsın." cümlesi kaldırılır ve `/giris`, `/paket` callback'i için üçüncü bir metin dalı alır (G5). - Yetki: [KARAR] - Gerekçe: Ürün yöneticisinin Ö2(a) önerisi bir günlük kararın geri alınması anlamına geliyor; gerekçe olarak gösterilen 24 Ağustos kullanıcısı o karardan ÖNCEKİ sürümü gördü (`git show 95bc87e`), yani yeni kanıt yok (PROTOKOL: verilmiş karar yeni kanıt olmadan açılmaz). "Paketi sonra alırsın." ise kararın metni değil, satın almayı aktif olarak erteleten bir alt satır (`paket-satinal.tsx:141-143`). - Yerine geçtiği karar: — ## 2026-09-22 — P1–P4 merge edildi; kabul kriteri düzeltmesi - Karar: P1–P4 vardiya sırasında `main`'e alındı (faba6f4, 001440a, d720e18, 84fc88e — 22 Eyl 01:38); push edilmedi, `main` `origin/main`'in 18 commit önünde. P1'in gündüz yazılan kabul kriteri hatalıydı ve düzeltildi: doğru ölçü `grep -rn "bitmeden yerini al" src/` (cümle JSX'te satır sonuna bölündüğü için "Tercih dönemi bitmeden" araması hiçbir zaman eşleşmiyordu). Düzeltilmiş ölçüyle P1 geçiyor (main=2 → dal=0). P1 dalının kapsamı `src/lib/sezon.ts` (tek kaynak sezon takvimi + `BANT_METNI`) ile aşıldı; markanın "4 sezon için tek metin şeması" isteğinin altyapısı olduğu için onaylandı, tek amaçlı paket kuralının bu kez esnetildiği kayda geçiriliyor. - Yetki: [KARAR] (kriter düzeltmesi, kapsam onayı) · [BİLAL] (build + push; bant metni A/B seçimi — commit 4034f03) - Gerekçe: `git log`/`git grep` doğrulaması, 22 Eylül 2026 gece vardiyası. - Yerine geçtiği karar: 2026-09-22 — Sevk sorunu… (P1 kabul kriteri) ```