# Karar günlüğü Yalnızca sona eklenir. Sahibi `ceo` ajanı (ve Bilal). Verilmiş karar silinmez; değişecekse yeni kayıtla, gerekçesiyle değiştirilir ve eskisine atıf yapılır. Kurallar: `docs/ekip/PROTOKOL.md`. Kayıt biçimi: ``` ## YYYY-AA-GG — - Karar: … - Yetki: [KARAR] | [BİLAL] (Bilal onayladı / bekliyor) - Gerekçe: … (kanıt: rapor/dosya:satır) - Yerine geçtiği karar: — | ``` ## 2026-09-21 — Onay dalı (`entegrasyon/kararlar-0921`) canlıya çıkar - Karar: + anında ekleme, YÖK logosu→tarihli satır, Armut fiyat kıyası (1.000–3.000 TL), "İş bulma kolaylığı" çipi, tadımlık olasılık dili ve Lenis'in kaldırılması yayına alınır; öncesinde bağımsız kod denetimi koşulur. Deploy tarihi buraya not edilir (Rybbit'te `program_eklendi` serisi o günden itibaren "gerçek ekleme"dir). - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: 82 kapı açılışının 77'si eklemeden döndü (gece vardiyası 2026-09-21, `01-analitik-bulgular`, `11-ceo-kararlari-tur2` #12–13). - Yerine geçtiği karar: — ## 2026-09-21 — "Garanti" dilim etiketi "Güvenli" olur - Karar: Yalnız görünen etiket değişir; iç anahtar `garanti` kalır. "Güvenli · Güvenli" tekrarını önlemek için risk etiketi yalnız dilim varsayılanından farklıysa gösterilir. Dal: `entegrasyon/guvenli-etiket`. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: "Garanti vermiyoruz" ana vaadiyle çelişen tek kelime (`05-ceo-kararlari` #2, `11-ceo-kararlari-tur2` #2, envanter `10-marka-seo-tur2` §A). - Yerine geçtiği karar: — ## 2026-09-21 — Döngü 2 kodları bağımsız denetimden geçer - Karar: Yayından önce `kod-denetcisi` koşulur; kapsam onay dalı + p5 + commit'lenmemiş ödeme değişikliği. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: `SABAH-OZETI` §7 — döngü 2 dalları denetlenmemişti. - Yerine geçtiği karar: — ## 2026-09-21 — Ödeme butonu değişikliği tamamlanır - Karar: `baslatOdeme`'nin `redirect()` fırlatmak yerine hedef döndürmesi + `SatinAlForm`'un client'ta yönlendirmesi tamamlanıp denetimden sonra commit'lenir. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Geri dönen kullanıcıda butonun tıklamaya sağır kalması (`docs/odeme/iyzico.md`, `odeme-actions.ts` yorumu). - Yerine geçtiği karar: — ## 2026-09-21 — `/hakkinda` ve satıcı kimliği şimdilik ertelendi - Karar: Şimdilik yapılmıyor; sezon öncesi yeniden gündeme alınır. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Bilal'in önceliği değil (`05-ceo-kararlari` #5). Not: ödeme alındığı için satıcı bilgisi zorunluluğu riski açık kalıyor. - Yerine geçtiği karar: — ## 2026-09-21 — Hukukçu tutulmayacak; hukuki konular içeride çözülür - Karar: Ekim hukuki gözden geçirmesi iptal. Gizlilik/koşullar metni, kredi hatırlatma e-postasının ticari ileti sınıfı ve session replay konularını ekip (`guvenlik-uyum`) + Bilal kendisi kapatır. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Bilal'in kararı (`05-ceo-kararlari` #10, `11-ceo-kararlari-tur2` #16). - Yerine geçtiği karar: — ## 2026-09-21 — Katalog başlık paketi (P7) ve e-posta paketi (P4) yayına alınır - Karar: `gece/p7-katalog` ve `gece/p4-eposta` denetimden geçerse onay dalına eklenir. Yanıt adresi `destek@kolaytercih.com` (koddaki varsayılan; ayrı secret gerekmez). - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Derin katalog sayfalarında kopya başlık; giriş e-postasına yanıtların bounce olması (`SABAH-OZETI` §2, `04-mail-testi`). - Yerine geçtiği karar: — ## 2026-09-21 — Şema fontu ücretsiz alternatifle değiştirildi - Karar: Sweet Cucumber Mocktail (yalnız kişisel kullanım) → Patrick Hand (SIL OFL). Commit 0400aa5. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Site ticari; lisans satın alınmayacak (`el-cizimi-sema.tsx` eski yorumu). - Yerine geçtiği karar: — ## 2026-09-21 — 2026 yerleştirme verisi çekilir - Karar: `veri-muhendisi` 2026 verisini resmî kaynaktan çeker; canlı DB'ye yazmadan önce kopya üzerinde kalite kontrolü yapılır. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Veri raporu, karne ve 2027 içerikleri buna bağlı (`05-ceo-kararlari` #11, `docs/geo/geo-raporu.md` T8). - Yerine geçtiği karar: — ## 2026-09-21 — Yayın kaydı: onay paketi canlıya gönderildi (8f4669e) - Karar: `main` a834f5f → 8f4669e push edildi (21 Eylül 2026). İçerik: + anında ekleme, tadımlık olasılık dili, YÖK logosu→tarihli satır, Armut kıyası, Güvenli etiketi, P4 e-posta, P7 katalog başlıkları, Patrick Hand şema fontu, ödeme butonu + çift paket koruması, denetim düzeltmeleri. **Rybbit notu:** `program_eklendi` bu tarihten önce "+ tıklaması", sonrası "gerçek ekleme"; `cta_form_goruntulendi` artık `/bolum` sayfalarında da atılır. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: İki bağımsız kod denetimi + ödeme güvenlik denetimi "yayına alınabilir"; build push edilen commit üzerinde temiz worktree'de geçti. - Yerine geçtiği karar: — ## 2026-09-21 — Açık kalanlar (denetimlerden; karar bekliyor) - Karar: (1) Ödemede `paid` damgası ile kredi yazımı ayrı transaction — araya kesinti girerse para çekilir kredi yazılmaz; sıra çevrilmeli. (2) Çift paket ödemesi olursa politika: otomatik iade mi, kredi mi. (3) `baslatOdeme`'de hız sınırı / eski `pending` sipariş temizliği. (4) iyzico'ya giden alıcı IP'sinin güvenilir başlıktan alınması (devops teyidi). (5) 2026 verisi: `refresh.ts`/`detay.ts` yaması + okuyan taraftaki yıl sabitleri + kodu değişen programların çift satırı — tek iş. (6) Prod'da `pnpm tadimlik --force` (prompt değişti). - Yetki: [BİLAL] (bekliyor) - Gerekçe: `guvenlik-uyum` ödeme denetimi B1–B4, `veri-muhendisi` 2026 keşfi, `kod-denetcisi` bulgu 6 (21 Eylül 2026 gündüz oturumu). - Yerine geçtiği karar: — ## 2026-09-21 — Ödemede önce kredi sonra `paid`; çift paket ödemesi iade edilir - Karar: (1) `odemeyiSonuclandir` krediyi yazıp sonra `paid` damgalar; deftersiz eski `paid` siparişler ilk ziyarette onarılır. (2) Zaten paketli kullanıcıdan gelen ikinci paket ödemesine kredi yazılmaz, tutar iade edilir; iade iyzico panelinden ELLE yapılır (destek@ kutusuna "İade gerekli" e-postası + senkron log + `/odeme/sonuc` iade kartı + `/kosullar#iade` paragrafı, "en geç 14 gün"). Haftalık mutabakat sorgusu `docs/odeme/iyzico.md`'de. Yayın: 024a2a4 (21 Eylül 2026). - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: `guvenlik-uyum` B1–B2 ve ikinci denetim (#1–#6); test sırasında drizzle'ın UNIQUE hatasını sarması yüzünden idempotent no-op'un hiç çalışmadığı bulundu ve düzeltildi. - Yerine geçtiği karar: 2026-09-21 — Açık kalanlar, madde (1) ve (2) ## 2026-09-21 — 2026 verisi tek iş olarak yüklenir (CTO şartnamesi) - Karar: P-0 sözleşme (`src/lib/veri-yillari.ts`, 38e02e0) → P-A betikler+DB (`veri-muhendisi`, dal `veri/2026`) → P-B okuyan taraf ∥ P-C metin+şema (`yazilimci`). Çift satır, sorgu koşuluyla değil DB inşasında `programs_arsiv`'e taşınarak çözülür. Rapor promptu son 4 yılı göndermeye devam eder. Kontenjan kırılımı 2026 kolonları eklenmez. Rehber yazılarındaki 2025 atıfları ayrı iş. - Yetki: [BİLAL] (iş onaylandı) · iki alt karar bekliyor: "son 6 yıl (2021–2026)" metni; kılavuzda olmayan ~2.800 eski satırın siteden kalkması (en çok 22 bölüm adı + 1 üniversite sayfası kapanır) - Gerekçe: `cto` şartnamesi, 21 Eylül 2026 gündüz oturumu; `veri-muhendisi` keşfi. - Yerine geçtiği karar: 2026-09-21 — Açık kalanlar, madde (5) ## 2026-09-21 — "Son 6 yıl (2021–2026)"; kılavuzda olmayan eski program kayıtları siteden kalkar - Karar: (1) Veri penceresi kaymaz, uzar: site "son 6 yıl (2021–2026)" der. (2) Son kılavuzda yer almayan ~2.800 eski program satırı DB inşasında `programs_arsiv`'e taşınır; aday havuzuna yalnız son kılavuzdaki programlar girer (meraklısına şeması aynı işte güncellenir). En çok 22 bölüm adı + 1 üniversite sayfası kapanır; kapanan slug listesi `seo-geo`'ya gider (404 mü yönlendirme mi). - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: `cto` şartnamesi madde 3–4; kayıtlı rapor/tadımlık `siraGecmisi` dizileri 2021'e demirli, pencere kayarsa eski kayıtlar yanlış yıla okunur; eski kod satırları öğrenciye tercih edilemeyecek program önerebiliyor. - Yerine geçtiği karar: 2026-09-21 — 2026 verisi tek iş olarak yüklenir (bekleyen iki alt karar) ## 2026-09-21 — Arşivleme gerçek sayılarla yeniden onaylandı; 2026 verisi denetimden sonra canlıya çıkar - Karar: Son kılavuzda olmayan 3.706 program satırı (tahmin 2.800'dü) `programs_arsiv`'e taşınır; 25 `/bolum` + 2 `/universite` sayfası kapanır (liste: veri-muhendisi P-A raporu; büyükleri spor-yoneticiligi 113, radyo-ve-televizyon-programciligi 70, uygulamali-ingilizce-cevirmenlik 47, spor-yonetimi 35; üniversiteler izmir-kavram-meslek-yuksekokulu, kibris-ilim-universitesi). `veri/2026-entegrasyon` dalı kod denetimi temiz çıkınca ve build push edilecek commit'te doğrulanınca `main`'e alınıp push edilir. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: Öğrenci kılavuzda olmayan programı tercih edemez; P-A kalite raporu (2025 ve öncesi değerler 0 fark, sira2026/sira2025 oranı %99,12 makul aralıkta). - Yerine geçtiği karar: 2026-09-21 — "Son 6 yıl (2021–2026)"; kılavuzda olmayan eski program kayıtları… (sayılar güncellendi) ## 2026-09-21 — Yayın kaydı: 2026 yerleştirme verisi canlıda (d275e4d, 49683fa) - Karar: `veri/2026-entegrasyon` 21 Eylül 2026 18:51'de `main`'e alındı (d275e4d), ardından 49683fa (kayıtlı manuel liste tabanlarının yeni veri yılına tazelenmesi + 4 rehber yazısında yıl metinleri) ile birlikte push edildi. Sitedeki taban sıraları, risk hesabı ve liste önerileri bu tarihten itibaren 2026 verisiyle çalışır; 3.706 eski program satırı arşivde. Geri dönüş noktası: `024a2a4` (2025 verili son sürüm). **Not:** merge ve push, asıl oturum kullanım sınırındayken başka bir oturumdan yapıldı; o oturumun denetimi 49683fa'daki bulguyu üretti. Asıl oturumdaki bağımsız `kod-denetcisi` turu yarıda kesildiği için YAYIN SONRASI denetim olarak `origin/main @ 49683fa` üzerinde sürdürülüyor. - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: git geçmişi (d275e4d, 49683fa); Bilal'in aynı günkü yayın onayı. - Yerine geçtiği karar: — ## 2026-09-21 — Yayın sonrası denetim: canlıda kalabilir; düzeltme paketi hazır (75fc12d, push bekliyor) - Karar: `kod-denetcisi` `origin/main @ 49683fa` için "canlıda kalabilir, geri alma gerekmez" dedi (kritik 0, yüksek 2, orta 2, düşük 2). Hazırlanan paket `fix/2026-yayin-sonrasi @ 75fc12d` (typegen+tsc+lint+build temiz): (B1) tadımlık örneği tabanı/geçmişi canlı DB'den okur, arşivlenmiş program örnek gösterilmez; (B3) `sunucuylaBirlestir` riskleri her zaman yeniler; (B2) kılavuz kodu başka programa devredilmiş 30 satırın kimliği onarıldı (29 devir + 1 ad değişimi; eski kimlikler `programs_arsiv`'e kopyalandı, `refresh` artık kimlik uyuşmazlığında yazmadan duruyor, `veri-kalite`'de kimlik kontrolü). 3 `/bolum` sayfası daha kapanır (taki-tasarimi, islam-bilimleri, endustri-yonetimi-muhendisligi — yalnız yanlış etiketli satırlardan oluşuyordu). B4 (8.631 satırda burs/dil ekli ad) UYGULANMADI: `kategoriBul` ham isme regex uyguladığı için ek metni sihirbaz kategorisine sızıyor; önce `kategoriBul` baz ada geçirilmeli, sonra `refresh --isim-esitle`. - Yetki: [BİLAL] (push onayı bekliyor) · ayrıca bekleyen: kapanan 27+3 sayfa için yönlendirme kararı; B4 için tek satırlık kategori düzeltmesi; prod'da `pnpm tadimlik --force` - Gerekçe: yayın sonrası `kod-denetcisi` raporu (B1–B6) ve `veri-muhendisi` kimlik onarımı raporu, 21 Eylül 2026. - Yerine geçtiği karar: — ## 2026-09-21 — Gece oturumu: tadımlık canlıya yüklendi; ödeme formu 17:00'den beri çalışıyor; beş karar - Karar: (1) Canlı `tadimlik_havuzu` 0 satırdı; dış modele gidilmeden elle yazılmış 522 satır (375 tekil gerekçe; risk notu ve trend koddan) konteynere node yükleyiciyle yüklendi — deploy tohumu yalnız ilk kurulumda kopyaladığı için tadımlık deploy'la taşınmaz. Prod'da `pnpm tadimlik --force` maddesi böylece kapandı; tadımlık için LLM koşusu varsayılan yol değildir. (2) Prod `orders`: 7 Ağu–12 Eyl arası ~100 siparişin hiçbiri iyzico token'ı alamamış (form hiç açılmamış); 24 Ağu ve 12 Eyl'deki iki gerçek kullanıcı bu yüzden kayboldu. 21 Eyl 17:00 diliminde 7/7 sipariş token aldı → `fix(odeme)` (8f4669e, 024a2a4) tuttu; uçtan uca tamamlanmış ödeme henüz yok, Bilal tarayıcıdan bir kez deneyecek. (3) `fix/2026-yayin-sonrasi @ 75fc12d` push edilir. (4) Kapanan 27+3 katalog sayfası benzer sayfaya kalıcı yönlendirilir (soft 404 yerine). (5) Ana sayfa karşılaştırma tablosu yeniden kurulur (ücretsiz robotların artık yapay zekâ sunduğu kabul edilir). (6) `/paket` girişsiz CTA "ilk 3 tercihini ücretsiz gör" olur. Açık: vakıf üniversitelerinin adıyla doluluk oranı yayımı (yazı sırası gelince). - Yetki: [BİLAL] (Bilal onayladı) - Gerekçe: `docs/ekip-raporlari/2026-09-21/` 01 (QA), 03 (analitik §4), 04 (marka §7 #1–#2), 05 (SEO T1); prod `orders` ve `tadimlik_havuzu` sorguları (21 Eyl 2026 gece, Bilal sunucuda koştu). - Yerine geçtiği karar: 2026-09-21 — Yayın sonrası denetim… (bekleyen push onayı, yönlendirme kararı ve `tadimlik --force` maddeleri) ## 2026-09-22 — Sevk sorunu: sıra "önce çelişkiyi kaldır, sonra ölü ucu bağla", yeniden tasarım ertelendi - Karar: 22 Eyl gündüz oturumunda dört ajanın (analitik/tasarım/marka/yapay zekâ) tek soruya verdiği dört farklı "en yüksek etkili iş" önerisi şu sıraya kondu ve bu hafta **5 iş** onaylandı: **P1** sezon çelişkisi (`icerik/sezon-celiskisi`), **P2** `liste_uretim_basladi` olayı (`olcum/liste-uretim-basladi`), **P3** + ölü ucu (`funnel/arti-olu-ucu`), **P4** girişli kullanıcıya kalıcı `/listem` girişi + giriş callback'i (`funnel/listem-girisi`), **P5** tadımlık CTA'sının yanlış vaadi ve hedefi (`icerik/tadimlik-vaat`). Hepsi S; P2 önce merge edilir ve P3/P4 ile **aynı yayında** çıkar (payda olmadan huni değişikliği okunamaz). Sezon dışı olduğu için A/B yok, oran yok: kabul ölçüsü **adet** (haftalık olay sayısı). - Yetki: [KARAR] (P2, P3, P4; P1 ve P5'in yanlış/çelişkili cümleyi kaldıran kısmı) · [BİLAL] (P1'de bandın yeni sezon metni, P5'te tadımlık CTA'sının yeni cümlesi — ayrı `[Bilal]` commit'i olarak hazırlanır) - Gerekçe: Dört iddia da koddan doğrulandı — navbar'da `/listem` linki yok ve giriş callback'i `"/"` (`src/components/site-header.tsx:8-38`, `src/features/kullanici/components/user-nav.tsx:45-64`, `src/features/kullanici/components/giris-karti.tsx:18-19`); + kapısı sihirbazın 3 adımını doldurtup `profilTamamlandi`'nın `null` dalında bırakıyor (`src/features/liste/components/program-ekle-butonu.tsx:82`, `liste-cekmecesi.tsx:293`, `use-tercih-profili.ts:346`, toast `tercih-profili-kapisi.tsx:238`) ve bu, 30g'deki en büyük sıra kaynağı (14/28 olay, `01-ai-listesi-hunisi` §1d); üst bant bugün "Tercih dönemi sona erdi" (`src/components/site-top-banner.tsx:7-8,64`) derken aynı sayfada CTA "Tercih dönemi bitmeden yerini al" diyor (`src/features/pazarlama/components/hero-focus-button.tsx:45,65` — her iki dalda da); tadımlık CTA'sı "24 satırın tamamı için giriş yap" diyor ama maske 3 satır açıyor ve callback `/sonuc`'a düşüyor (`tadimlik-satiri.tsx:111,186`, `src/lib/rapor-maske.ts:12`). - Yerine geçtiği karar: — ## 2026-09-22 — `/sonuc`'ta LLM'siz 24 satırlık önizleme ve diğer yeniden tasarımlar bu hafta yapılmaz - Karar: Yapay zekâ mühendisinin "senin 24'lük iskeletin" önizlemesi (0 LLM, `04-uretim-engelleri` §3), tasarımcının Ö2 (mobil katalog satırı), Ö4 (`/sonuc` sıralamasının tersine çevrilmesi) ve markanın H2/H3 (hero alt başlığı, katalog CTA metni) işleri **ertelendi**; sıradaki turda önce CTO şartnamesi yazılır. Ertelemeyen tek istisna `/sonuc` H1'i (`src/app/sonuc/page.tsx:98-102` arasında bugün hiç `

` yok) — gelecek turun ilk işidir. Deneme maskesinin gevşetilmesi (3→8 satır) gelir modeli kararıdır, Bilal'e bırakıldı. - Yetki: [KARAR] (erteleme) · [BİLAL] (maske/gelir kararı) - Gerekçe: Sezon 10 Ağu 2026'da kapandı; hız ~95 ziyaret/hafta ve haftada ~0,5 liste (`01-ai-listesi-hunisi` §5.1). Bu hacimde hiçbir oran makul sürede okunamıyor (`§5.2`: en iyi aday bile ~6 hafta, `/listem`→liste ~36 hafta) ve A/B her kolu 47 ziyaret/haftaya düşürür. Bu hafta onaylanan 5 iş "ölçülemeyecek deney" değil, koddan kesin gösterilmiş **kusur ve çelişki** düzeltmesidir. Kurucunun inceleme kapasitesi günde 1–2 saat (`docs/urun/vizyon.md`); onaylanan iş = inceleme borcu. - Yerine geçtiği karar: —