Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/31-guvenlik-satici-kimligi.md
bilalgursen 2b350d0c5d content(rehber): gece vardiyasının 14 yeni yazısı + 2 düzeltme, ekip raporları ve kurallar
14 yeni rehber yazısı (hepsi editör denetiminden geçti, 46 yazıda 829 iç link
tarandı, 0 kırık hedef; 180+ DB rakamı yazıların kendi filtreleriyle yeniden
koşuldu):

  taban-siralamalari-alti-yilda-nasil-degisti · kac-net-ile-hangi-bolum ·
  siralama-bandlari-hangi-kapilar-acilir · ayni-bolum-farkli-universite-siralama-farki ·
  hangi-bolumlerin-kontenjani-azaldi · 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 ·
  rehber-ogretmenler-icin-veri-kaynaklari · bolumumu-sevmedim-hangi-kapilar-var

İki canlı yazı düzeltildi:
- veliler-icin-tercih-rehberi: veli diliyle kapanış; altındaki "sıralamanı gir"
  kutusu artık veliye ölü uç değil
- bos-kontenjanlar-ne-anlatiyor: "birkaç yüz kişilik fark" aslında ~9 bin
  (ÖSYM 265.356 ↔ bizim 256.532); payda açıklaması tersti — ek kontenjan
  paydaya girseydi oran düşerdi. guncelleme alanı eklendi (sitemap lastmod).

Kurallar (AGENTS.md):
- Yayın sonrası arama motoru bildirimi: URL denetimi yalnız canlıda 200 dönen
  adrese; kota sayacı; mülk/hesap notu; sitemap grep kuralı
- Yıkıcı git komutları yasak: reset/checkout --/restore/clean/stash
- Tarayıcı açma: tasarımcı ve UX gerekli gördüğünde açabilir (yetenek için
  .claude/agents/tasarimci.md'ye tarayıcı araçları eklendi)

docs/gece-vardiyasi/2026-09-22/ — 34 rapor: CEO kararları ve kapanış turu,
marka/ödeme analizi, sıfır ödeme teşhisi, SEO konu planı, veri kalitesi,
editör denetimi, CTO şartnamesi, yazılımcı ve güvenlik raporları, SABAH-OZETI.

docs/ekip/YAYIN-KUYRUGU.md — Search Console bildirim kuyruğu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 23:25:34 +03:00

39 KiB
Raw Blame History

31 — Güvenlik & uyum: satıcı kimliği (A8), G3'ün delta-0 ledger satırı, iki kısa uyum kontrolü

Rol: guvenlik-uyum · Gece vardiyası, 22 Eylül 2026 · Okuyucu: CTO (şartname eki) → CEO → sabah Bilal Yöntem: yalnız okuma. Kod okundu, hiçbir kod/içerik dosyasına dokunulmadı; bu rapor dışında dosya oluşturulmadı. Mevzuat kaynakları resmigazete.gov.tr'den tam metin olarak indirildi ve okundu — aşağıda madde madde alıntılı. İşaretler: [D] doğrulandı (dosya:satır / mevzuat metni) · [Ç] koddan çıkarım · doğrulanmalı Hukuki değerlendirme taslaktır: avukat/mali müşavir teyidi gerekir. Metin değişikliği her zaman [BİLAL].


Özet (5 madde)

  1. KRİTİK — Bu vardiyada yapılan işin bir kısmı çalışma ağacından silindi ve hiçbir commit'te yok. Oturumumun başında git status dört dosyayı M gösteriyordu (AGENTS.md, docs/ekip/KARARLAR.md, docs/ekip/BACKLOG.md, content/rehber/veliler-icin-tercih-rehberi.md); rapor yazarken aynı dosyalar temiz, içerikleri HEAD'e dönmüş. git reflog'da HEAD@{2}: reset: moving to HEAD~1 var [D] ve o resetin ardından hiçbir commit bu dosyalara dokunmuyor [D]. git fsck --lost-found içindeki dangling blob'ların hiçbirinde kayıp içerik yok [D] — yani git'ten geri alınamaz. Somut kayıp: KARARLAR.md'deki iki adet 22 Eylül karar kaydı, AGENTS.md'ye eklenen Search Console bölümü, veli yazısının yeni kapanışı + karşılaştırma tablosu, BACKLOG güncellemesi. İki karar kaydının tam metni bu raporun §5 ekinde duruyor (oturumumun ilk okumasından); diğerleri yeniden yazılmalı. Bu, CEO'nun aynı gece koyduğu C2 kuralının ve PROTOKOL md.3'ün ihlalidir.
  2. A8 için yeni sayfa GEREKMİYOR — mevzuat zaten yeri söylüyor: "iletişim" başlığı. Yürürlükteki yönetmelik (RG 29.12.2022/32058, MADDE 5/1) satıcı kimliğini "kendine ait elektronik ticaret ortamının ana sayfasında doğrudan ulaşılabilecek şekilde 'iletişim' başlığı altında" istiyor [D]. Bizde /iletisim sayfası var, başlığı zaten "İletişim" ve footer'dan her sayfada linkli (src/components/site-footer.tsx:151-156, ana sayfada src/app/page.tsx:659) [D]. Yani tek iş: mevcut /iletisim sayfasına bir blok eklemek. Kurucunun "sade" talimatına birebir uyuyor; /hakkinda benzeri yeni yüzey açmaya gerek yok.
  3. Bilal'in dolduracağı alan 5 — ama CEO'nun listesindeki alanlar tam olarak bunlar değil. CEO "unvan, adres, vergi dairesi/no, MERSİS" demişti; yönetmelik vergi dairesi adını istemiyor, buna karşılık telefon numarası ve KEP adresini zorunlu tutuyor [D]. Ayıklanmış 5 alan: ① ticaret unvanı veya ad-soyad, ② merkez (iş yeri) adresi, ③ MERSİS no (tacir) ya da vergi kimlik no (esnaf) — tek alan, ④ telefon numarası, ⑤ KEP adresi. E-posta zaten var (destek@kolaytercih.com). Kopyalanmaya hazır metin §1.4'te, şahıs/şirket iki varyantıyla.
  4. G3'ün delta-0 satırı muhasebeyi de idempotency'yi de bozmuyor; tek gerçek risk iade dalı — ve orada sızıntı garanti. listeRevize zaten hasPaket kapısının arkasında (rapor-actions.ts:256) olduğu için G3'ten sonra her başarısız revizyon istisnasız 3 bedava kredi yazar; revisionCount yalnız başarıda arttığı için MAX_REVIZYON tavanı, requestId her denemede tazelendiği için de UNIQUE kısıtı bu döngüyü durdurmaz [D]. Karar ve tek paragraflık gerekçe §2'de.
  5. Aynı mevzuat taramasında, satıcı kimliğinin yanında üç zorunluluk daha eksik çıktı (hepsi grep = 0): "işlem rehberi" başlığı (Yön. m.7), sipariş teyidi bildirimi (Yön. m.9 — ödeme sonrası alıcıya e-posta/SMS zorunlu, bu T5'i "tetik"ten "yükümlülük"e taşır), ve ön bilgilendirmede cayma istisnası + tüketici hakem heyeti cümlesi (Mesafeli Sözleşmeler Yön. m.5/1-h ve -k). Ayrıca ETBİS kaydı faaliyete başlamadan önce zorunlu (Tebliğ m.5/1-a) [D]. Bunlar Bilal'e yeni soru üretmiyor — §1.5'te kime düştüğü yazılı.

0 · Kritik bulgu: çalışma ağacında veri kaybı (bu gece, benim oturumum sırasında)

Kanıt

Zaman Gözlem Kaynak
Oturum başı M AGENTS.md, M content/rehber/veliler-icin-tercih-rehberi.md, M docs/ekip/BACKLOG.md, M docs/ekip/KARARLAR.md Görev metnindeki gitStatus anlık görüntüsü
Oturum başı + ~2 dk tail -n 150 docs/ekip/KARARLAR.md → dosyada iki adet 22 Eylül kaydı vardı Bu oturumun ilk okuma çıktısı [D]
Rapor yazarken grep -c "^## 2026-09-22" docs/ekip/KARARLAR.md = 0; git status --porcelain -uno = boş [D]
— git reflog: HEAD@{2}: reset: moving to HEAD~1 [D]
— Reset sonrası commit'lerin hiçbiri bu 4 dosyaya dokunmuyor (git show --stat × 8 commit) [D]
— git fsck --lost-found: 9 dangling nesne; AGENTS.md adayları 29 satır ve Search Console içermiyor, KARARLAR adayları 21 Eylül'de bitiyor [D]

Okuma [Ç]: aynı çalışma ağacında çalışan kod ajanı git reset --hard HEAD~1 (veya eşdeğeri) koştu. Untracked dosyalar (yeni rehber yazıları, docs/gece-vardiyasi/) sağ kaldı; izlenen dosyalardaki commit'lenmemiş değişiklikler yandı. Bu, kod ajanının kendi işini değil, başkasının işini sildi.

Ne kaybedildi, ne kurtarılabilir

Dosya Kaybolan iş Kurtarma
docs/ekip/KARARLAR.md 2 adet 22 Eylül karar kaydı (sevk sırası P1–P5; /sonuc önizlemesi ve yeniden tasarımların ertelenmesi) Tam metin §5'te — kopyala-yapıştır
AGENTS.md Search Console bölümü (kota sayacı + sitemap kuralı) docs/gece-vardiyasi/2026-09-22/25-seo-duzeltme.md §2 kuralın gerekçesini ve iki ayağını anlatıyor; metin oradan yeniden yazılabilir
content/rehber/veliler-icin-tercih-rehberi.md Veli dilli kapanış + karşılaştırma tablosu (grep "birlikte doldurmanız" = 0, tabloya ait `^ ` satırı = 0)
docs/ekip/BACKLOG.md 22 Eylül güncellemesi urun-yoneticisi'nin backlog senkronu turunda (D-13) yeniden üretilir

Öneri (yeni Bilal maddesi değil; süreç maddesi)

  • Şimdi: §5'teki iki karar kaydı KARARLAR.md'ye geri yapıştırılsın (sahibi ceo/orkestratör).
  • Bu gece: C2 kuralına tek cümle eklensin → "Kod ajanı git reset --hard, git checkout -- <yol>, git clean, git stash kullanamaz; dal değiştirmesi gerekiyorsa önce git status -uno boş olmalıdır." Mevcut C2 "dokunma" diyor ama dokunmadan da silinebileceğini söylemiyor; bu gece tam olarak o oldu.
  • Kalıcı: gece vardiyasında docs/ ve content/ yazan ajanlar işlerini commit'siz bırakmasın; en azından git stash create değil, kendi dalında lokal commit. (Untracked dosyalar bu geceki resetten sağ çıktı — kayıp yalnız izlenen dosyalarda oldu.)

1 · Görev 1 — Satıcı kimliği (A8)

1.1 Mevzuat: neyi kim zorunlu tutuyor (resmî metinden)

Kaynak A — Elektronik Ticaret Aracı Hizmet Sağlayıcı ve Elektronik Ticaret Hizmet Sağlayıcılar Hakkında Yönetmelik, Ticaret Bakanlığı, RG 29.12.2022 / 32058 [D — tam metin indirildi]. Not: 2015 tarihli eski yönetmelik bu metnin MADDE 34 ile yürürlükten kaldırılmıştır [D]; internette dolaşan "2015 yönetmeliği" özetleri artık geçersiz.

MADDE 5- (1) ETHS, kendine ait elektronik ticaret ortamının ana sayfasında doğrudan ulaşılabilecek şekilde "iletişim" başlığı altında aşağıdaki bilgileri eksiksiz olarak bulundurur: a) Tacir için ticaret unvanı, MERSİS numarası ve merkez adresi; esnaf ve sanatkâr için adı ve soyadı, vergi kimlik numarası ve merkez adresi. b) KEP adresi, elektronik posta adresi, telefon numarası ve varsa işletme adı ile tescilli markası. c) Mensubu olduğu meslek odası, meslekle ilgili davranış kuralları ve bunlara elektronik olarak ne şekilde ulaşılabileceğine ilişkin bilgiler.

ETHS tanımı (m.4/h): "…kendine ait elektronik ticaret ortamında mal veya hizmetlerinin teminine yönelik sözleşme yapan ya da sipariş alan hizmet sağlayıcı" → KolayTercih birebir bu [D]. Kapsam dışı sayılanlar listesi (m.2/2) bankalar, sigorta, şans oyunları vb.; bizi kapsam dışına çıkaran bir istisna yok [D].

Kaynak B — Mesafeli Sözleşmeler Yönetmeliği, RG 27.11.2014 / 29188, MADDE 5 (ön bilgilendirme) [D — tam metin indirildi]. Sözleşme kurulmadan önce tamamı verilmek zorunda olanlardan bizde eksik olanlar:

Bent Zorunlu bilgi Bizde
a Mal/hizmetin temel nitelikleri var (/kosullar "Hizmetin kapsamı", /paket)
b Satıcı/sağlayıcının adı veya unvanı, varsa MERSİS numarası YOK (grep = 0)
c Açık adres, telefon numarası ve benzeri iletişim bilgileri kısmen — yalnız e-posta (src/app/iletisim/page.tsx:26-33)
ç Şikâyet için farklı iletişim bilgisi varsa yok (gerek de yok, aynı adres)
d Tüm vergiler dâhil toplam fiyat fiyat var, "KDV dâhil" ibaresi yok (grep kdv = 0)
f Ödeme/ifa bilgileri var
g Cayma hakkının şartları, süresi, usulü var (/kosullar#iade)
ğ Cayma bildiriminin yapılacağı açık adres/e-posta e-posta var, adres yok
h m.15 uyarınca cayma hakkının kullanılamadığı hâllerde bu bilgi YOK
k Tüketici Hakem Heyeti / Tüketici Mahkemesine başvurabileceği bilgisi YOK

m.15/1 ilgili bentleri [D]: "ğ) Elektronik ortamda anında ifa edilen hizmetler veya tüketiciye anında teslim edilen gayrimaddi mallara ilişkin sözleşmeler" ve "h) Cayma hakkı süresi sona ermeden önce, tüketicinin onayı ile ifasına başlanan hizmetlere ilişkin sözleşmeler". Yani hukuken cayma hakkı vermek zorunda değiliz; /kosullar'daki 14 günlük koşulsuz iade mevzuatın üstünde, gönüllü bir taahhüt — iyi, korunmalı. Ama "kanunen cayma hakkın yok, buna rağmen biz 14 gün veriyoruz" cümlesinin yazılması m.5/1-h gereği zorunlu.

Kaynak C — Elektronik Ticaret Bilgi Sistemi ve Bildirim Yükümlülükleri Hakkında Tebliğ, RG 11.08.2017 / 30151, MADDE 5/1 [D]:

"(1) Aşağıda belirtilen gerçek veya tüzel kişiler faaliyete başlamadan önce ETBİS'e kayıt olur: a) Kendilerine ait elektronik ticaret ortamında faaliyet gösteren hizmet sağlayıcılar. …" — kayıt için girilen bilgi: "Gerçek veya tüzel kişi tacirler için MERSİS numarası ve vergi kimlik numarası, esnaf ve sanatkârlar için T.C. kimlik numarası ve vergi kimlik numarası" + alan adı.

→ KolayTercih ödeme alıyor ve ETBİS kaydı gerektiren tarife birebir uyuyor. Tebliğin sonraki değişiklikleri doğrulanmalı (2017 metni okundu; 2022–2023 e-ticaret paketinden sonra güncellenmiş olabilir). Sitede gösterilmesi gereken bir "ETBİS rozeti/bandı" yükümlülüğü bu metinde yok — uydurmuyorum, aramada çıkmadı [D].

1.2 Şahıs mı şirket mi — hangi alan değişir

Mevzuat "şahıs/şirket" değil tacir / esnaf-sanatkâr ayrımı yapıyor. Pratik karşılığı:

Durum ①Kim ②Adres ③Numara ④Telefon ⑤KEP Meslek odası (m.5/1-c)
Şahıs işletmesi — esnaf ve sanatkâr (esnaf odasına kayıtlı) Ad ve soyad İş yeri (merkez) adresi Vergi kimlik numarası zorunlu zorunlu Esnaf ve sanatkârlar odası adı
Şahıs işletmesi — tacir (ticaret siciline kayıtlı) Ticaret unvanı (ör. "Bilal Gürşen — KolayTercih") Ticaret siciline tescilli merkez adresi MERSİS numarası zorunlu zorunlu Ticaret odası adı
Limited / anonim şirket Ticaret unvanı (…Ltd. Şti.) Tescilli merkez adresi MERSİS numarası zorunlu zorunlu Ticaret odası adı
Hiç kaydı olmayan gerçek kişi — — — — — —

Son satır hakkında uyarı: 2022 yönetmeliğinin m.5/1'inde — 2015'teki hâlinin aksine — kendi sitesinde satış yapan "tacir veya esnaf olmayan" hizmet sağlayıcı için bir fıkra yok [D]; süreklilik arz eden, kazanç amaçlı satış zaten ticari faaliyet sayıldığı için vergi mükellefiyeti doğurur. Yani "hiçbir kaydı olmayan gerçek kişi olarak satmaya devam etmek" mevzuatın öngördüğü bir seçenek değil. Mali müşavir teyidi gerekir — bu cümle hukuki görüş değil, metinden okunan bir boşluk tespitidir.

Pratik sonuç: üç geçerli durumda da alan sayısı 5 ve yalnız ①/③ değişiyor. Bu yüzden aşağıdaki taslak tek metin; Bilal hangi satırı yazacağını TODO-BILAL notundan seçiyor.

1.3 Nereye konacak — yeni sayfa gerekmiyor

Ne Nereye Neden
Satıcı kimliği bloğu (5 alan) src/app/iletisim/page.tsx — mevcut <h1>İletişim</h1>'in altına, e-posta butonunun altına, "Kart bilgini asla e-postayla paylaşma" notunun üstüne Yönetmelik m.5/1 bilgileri "iletişim" başlığı altında istiyor; sayfa zaten bu adı taşıyor ve SiteFooter sayesinde ana sayfa dâhil 12 sayfada doğrudan linkli (site-footer.tsx:151-156, page.tsx:659) [D]. Yeni sayfa açmak hem gereksiz hem de mevzuatın istediği başlıktan uzaklaştırır
/kosullar'a 3 cümle src/app/kosullar/page.tsx — "Ücretlendirme" bölümünün sonuna 1 cümle, "İade ve cayma" bölümünün başına 2 cümle Mesafeli Sözleşmeler Yön. m.5/1-b, -d, -h, -k boşlukları. Yeni bölüm bile değil, mevcut <section>'ların içine cümle
Footer değişiklik gerekmiyor "İletişim" linki zaten her sayfada, Yasal sayfalar nav'ında (site-footer.tsx:151-156) [D]
Gizlilik src/app/gizlilik/page.tsx — "Hangi verileri işliyoruz?" bölümünün başına 1 cümle KVKK aydınlatmasında veri sorumlusunun kimliği bulunmak zorundadır; bugün gizlilik metni de veri sorumlusunu adlandırmıyor [D]. Aynı 5 alandan besleniyor, ek bilgi istemiyor

1.4 Kopyalanmaya hazır metin

Yazılımcıya not: bunlar düz metintir. /iletisim ve /kosullar sayfalarındaki mevcut <section> + <h2 className="font-heading text-lg font-bold text-slate-900"> desenini kullan; yeni bileşen, yeni badge, yeni kart tasarlama. Tarih satırı /kosullar'daki "Son güncelleme" satırıyla aynı biçimde.

(A) /iletisim — yeni bölüm: "Satıcı bilgileri"

Satıcı bilgileri

Unvan: TODO-BILAL: Ticaret unvanın (ör. "Bilal Gürşen — KolayTercih"); şirket değil de esnaf/sanatkâr olarak kayıtlıysan ad ve soyadın
Adres: TODO-BILAL: İş yeri (merkez) adresin — mahalle/cadde/no, ilçe, il, posta kodu
TODO-BILAL: Tacirsen "MERSİS No: ……" satırı; esnaf ve sanatkârsan "Vergi Kimlik No: ……" satırı (yalnız biri yazılır)
Telefon: TODO-BILAL: Alıcının sana ulaşabileceği telefon numarası
KEP adresi: TODO-BILAL: Tebligata elverişli KEP adresin (PTT'den alınır)
E-posta: destek@kolaytercih.com

Bu sayfadaki bilgiler, 29/12/2022 tarihli ve 32058 sayılı Resmî Gazete'de yayımlanan
Elektronik Ticaret Aracı Hizmet Sağlayıcı ve Elektronik Ticaret Hizmet Sağlayıcılar
Hakkında Yönetmelik uyarınca yayımlanmaktadır.

Alan sayısı: 5. (E-posta zaten kodda, mevzuat atfı sabit.) Ayıklananlar ve gerekçeleri: vergi dairesi adı → yönetmelik VKN istiyor, daire adını istemiyor, piyasa alışkanlığı; işletme adı / tescilli marka → "varsa" (m.5/1-b), tescil yoksa yazılmaz, marka ajanının A9 raporu sonuçlanınca bakılır; meslek odası → kayıt olunan odaya göre tek satır, Bilal ③'ü yazarken aynı belgeden okuyacağı için ayrı soru sayılmadı; yazılırsa "Meslek odası: …" satırı aynı bloğun sonuna eklenir.

(B) /kosullar → "Ücretlendirme" bölümünün sonuna eklenecek cümle

Satıcı bilgileri (unvan, adres, vergi/MERSİS numarası ve iletişim) iletişim sayfasında
yer alır. Paket fiyatı, tüm vergiler dâhil toplam bedeldir.

("iletişim sayfasında" ifadesi /iletisim'e link olacak — /kosullar'daki mevcut <Link className="text-primary underline"> deseniyle.)

(C) /kosullar → "İade ve cayma" bölümünün başına eklenecek iki cümle

Paket, elektronik ortamda anında ifa edilen bir hizmettir; Mesafeli Sözleşmeler
Yönetmeliği'nin 15 inci maddesi uyarınca bu tür sözleşmelerde kanunen cayma hakkı
bulunmaz. Buna rağmen aşağıdaki koşullarda 14 günlük koşulsuz iade hakkını kendi
irademizle tanıyoruz.

(D) /kosullar → en sona eklenecek yeni bölüm (tek cümle)

Uyuşmazlık hâlinde

Satın alımından doğan uyuşmazlıklarda, parasal sınırlara göre yerleşim yerindeki
Tüketici Hakem Heyetine veya Tüketici Mahkemesine başvurabilirsin.

(E) /gizlilik → "Hangi verileri işliyoruz?" paragrafının başına eklenecek cümle

Bu metindeki işlemler bakımından veri sorumlusu, iletişim sayfasında unvanı ve adresi
yayımlanan KolayTercih satıcısıdır.

Böylece Bilal'in doldurduğu 5 alan tek yerde duruyor; diğer üç sayfa ona atıf yapıyor. Bilgi değişirse tek dosya güncelleniyor (yönetmelik m.5/5: değişiklikler değişikliğin olduğu gün güncellenir — tek kaynak bunu da kolaylaştırıyor).

1.5 Aynı taramada çıkan, Bilal'e soru üretmeyen zorunluluklar

Ne Mevzuat Bugün Kime
"İşlem rehberi" başlığı — sözleşmenin kurulması için teknik adımlar, sözleşmenin saklanıp saklanmayacağı, hata düzeltme araçları, varsa alternatif uyuşmazlık çözümü Yön. m.7/1, ana sayfadan doğrudan ulaşılabilir "işlem rehberi" başlığı altında [D] grep işlem rehberi = 0 cto → yazilimci. /kosullar'a üçüncü bir bölüm olarak yazılabilir, yeni sayfa gerekmez; içerik hazır: sıralama → sihirbaz → giriş → paket → iyzico
Sipariş teyidi — "siparişi aldığını, ortam üzerinden ve ayrıca e-posta, SMS veya telefondan en az biriyle gecikmeksizin alıcıya bildirir" Yön. m.9/1 [D] /odeme/sonuc ekranı var ama alıcıya e-posta yok (src/lib/eposta.ts yalnız magic-link + kredi hatırlatma) [D] T5'in sınıfı değişiyor: "test ödemesi başarılı olursa" tetiği değil, mevcut yükümlülük. T5 zaten satıcı kimliği satırlarıyla aynı commit'e bağlıydı → sırası doğru, adı düzeltilmeli
Sözleşme şartlarının alıcıya kalıcı biçimde verilmesi (basılabilir/saklanabilir) Yön. m.8/1-d [D] Yok Aynı e-posta ile kapanır (paket adı + tutar + tarih + /kosullar özeti)
ETBİS kaydı Tebliğ m.5/1-a: faaliyete başlamadan önce [D] Durum bilinmiyor — koddan görülemez Bilal'in tek maddesiyle aynı zincir (kayıt olmadan ③ numarası zaten yazılamaz). Ayrı madde açılmadı

2 · Görev 2 — G3'ün delta-0 ledger satırı

Değerlendirme (tek paragraf). Tutarı 0 olan ledger satırı ne mutabakatı ne bakiyeyi bozar: bakiye hiçbir yerde defterden toplanmıyor, tek kaynağı user.credit_balance kolonu (src/lib/credits.ts:56-72; grep -rn delta src scripts → defteri toplayan tek bir okuyucu yok) [D]; haftalık iyzico mutabakat sorgusu ise yalnız reason IN ('purchase','topup') ve ref_id = orders.id üzerinden çalışıyor (docs/odeme/iyzico.md:82-88) [D] — report_generate satırının refId'si istemcinin ürettiği requestId olduğu için bu sorguya hiç girmez, yani 0 TL'lik hareket iyzico tarafında görünmez bile. Idempotency de yerinde kalır: UNIQUE indeks ledger_reason_ref (reason, ref_id) üzerindedir, delta üzerinde değil (src/lib/appdb/schema.ts:131) [D]; amount = 0 iken de satır aynı refId ile yazıldığından ikinci çağrı yine DUPLICATE döner ve rapor-actions.ts:168-205'teki "iade edilmiş / mevcut rapor / hâlâ uçuşta" üçlü dalı aynen çalışır; spendCredits'in WHERE creditBalance >= 0 koşulu da paketli kullanıcı kredisi sıfırken geçer, yani INSUFFICIENT yanlış alarmı olmaz [Ç — bakiyenin negatife düşebildiği tek yol yok; tüm harcama yolları gte ile korunuyor]. Sorun tek yerde: iade dalı koşullanmazsa grantCredits({ delta: RAPOR_KREDI, reason: "refund" }) paketliye gerçek 3 kredi basar (rapor-actions.ts:212-218 ve :339-345), ve listeRevize zaten hasPaket kapısının arkasında olduğu için (:256) G3'ten sonra her başarısız revizyon istisnasız bedava 3 kredi demektir; revisionCount yalnız başarılı üretimde arttığından (:344-352) MAX_REVIZYON=2 tavanı döngüyü durdurmaz, requestId her denemede tazelendiğinden UNIQUE de durdurmaz — ve G3'ten sonra krediler yalnız sohbete gideceği için bu doğrudan "başkasının parasıyla LLM çağırma" bütçesine dönüşür. Başarısızlık ayrıca tamamen şansa bağlı değil: revizyon geri bildirimi serbest metin ve prompt'a giriyor, model iki denemede de dilim sayılarını tutturamazsa RaporUretimHatasi fırlıyor (src/lib/ai/rapor.ts:338-345) [Ç — kullanıcı yönlendirmeli başarısızlık OLASI, sağlayıcı kaynaklı başarısızlık ise DOĞRULANDI biçimde aynı dala düşüyor].

KARAR: "şu koşulla sorun yok." Koşul üç satır:

  1. İade dalı aynı koşula bağlanır: delta: hasPaket ? 0 : RAPOR_KREDI (her iki grantCredits çağrısı — rapor-actions.ts:212-218, :339-345). Çağrı yine kaldırılmaz; refund satırı refId ile yazılmaya devam etsin ki :168-180 ve :298-312'deki "önceki deneme iade edilmişti" dalı çalışmaya devam etsin.
  2. Dönüş değerindeki bakiye de koşullanır: kredi: user.creditBalance - RAPOR_KREDI (:243 ve :363) → - (hasPaket ? 0 : RAPOR_KREDI). Yoksa paketlinin bakiyesi ekranda 3 eksik görünür; kullanıcı "kredim yandı" diye destek yazar. (Sızıntı değil, görüntü hatası — ama G3'ün tüm vaadi "kredin yanmıyor" olduğu için tam da yanlış yerde bir hata.)
  3. hasPaket değeri tek yerden, zaten okunmuş user nesnesinden alınsın (listeOlusturKilitli'ye user geliyor, listeRevize'de user.hasPaket kapısı var) — ikinci bir DB okuması eklenmesin; aksi hâlde harcama ile iade farklı hasPaket görebilir.

Ek not (kapsam dışı, kayda geçsin): G3 sonrası paketli kullanıcı için krediBittiIsaretle hiç tetiklenmez (INSUFFICIENT dönmez) — bu doğru davranış, kredi hatırlatma e-postası paketliye gitmemeli. /api/soru tarafı (sohbet, 1 kredi) G3'ten etkilenmiyor ve etkilenmemeli [D].


3 · Görev 3 — İki kısa uyum kontrolü

(a) Veli yazısının kapanışı. KVKK ve ticari ileti açısından hiçbir şey değişmiyor: metin yeni bir veri alanı toplamıyor, yeni form/izin kutusu eklemiyor, e-posta adresi istemiyor; altındaki CtaSiraForm zaten var olan bileşen ve sıralama girişi gizlilik metninde hâlihazırda beyan edilmiş bir veri kategorisi (src/app/gizlilik/page.tsx:39-46) [D]. — Ama: §0'da anlatıldığı üzere bu değişiklik şu an çalışma ağacında yok; grep "birlikte doldurmanız" = 0, tablo satırı = 0 [D]. Uyum açısından temiz, ama iş kayıp.

(b) Search Console kuralının Bilal'in Google oturumunu kullanması. İki ayrı soru:

  • KVKK/veri: Search Console'da kişisel veri yok (URL'ler, toplulaştırılmış sorgu/gösterim verisi). Kullanıcı verisi dışarı çıkmıyor. Uyum sorunu yok.
  • Güvenlik: sorun var, ama düşündüğümüz yerde değil. Ajanın kullandığı oturum Bilal'in kişisel Google hesabı; aynı tarayıcı oturumundan Gmail, Drive ve Google hesabı ayarları da erişilebilir durumda. PROTOKOL md.5 açıkça "Kullanıcının açık oturumlarına (Gmail vb.) girme" diyor [D] — yani kural, korumayı ajanın kendini tutmasına bırakıyor; teknik bir sınır yok. Bir yanlış sekme, bir prompt enjeksiyonu (SC arayüzünde değil ama aynı profilde açılan herhangi bir sayfada) ya da bir "yardımcı olayım" refleksi kapsamı e-posta kutusuna taşır. Önem: orta. Öneri (tek satır, yeni Bilal maddesi değil — zaten E3'ün içinde): CEO'nun C4'teki çözümü "birinci hesabı mülke tam yetkili ekle" — bu hesap değiştirme sürtünmesini çözüyor ama yetki genişliği sorununu çözmüyor. Aynı 2 dakikada yapılabilecek daha iyisi: mülke ajanın kullanacağı, Gmail'i olmayan ayrı bir Google hesabı "tam yetkili kullanıcı" olarak eklensin; ajan yalnız o profille çalışsın. Bilal'in kişisel hesabı mülkün sahibi olarak kalır.
  • Ayrıca: kuralın kendisi şu an AGENTS.md'de yok (§0). Yani bu gece "kapandı" sayılan C4 maddesinin üçte ikisi kayıp.

4 · Bulgu tablosu

Önem: kritik = para/veri kaybı ya da hemen istismar edilebilir · yüksek = mevzuat ihlali / gelir sızıntısı · orta/düşük = düzeltilmeli, acil değil. Kesinlik: DOĞRULANDI = dosya:satır ya da mevzuat metniyle gösterildi · OLASI = koddan çıkarım, koşturarak denenmedi.

# Dosya:satır / kaynak Sorun Somut istismar / ihlal senaryosu Önem Düzeltme Kesinlik
B1 git reflog HEAD@{2} · docs/ekip/KARARLAR.md · AGENTS.md · content/rehber/veliler-icin-tercih-rehberi.md Aynı çalışma ağacındaki kod ajanı reset ile commit'lenmemiş değişiklikleri sildi; hiçbir commit'te ve dangling nesnede yok Gece vardiyasında üretilen karar kayıtları, kural metni ve bir yazının yeniden yazımı kayboldu; kayıp fark edilmeden sabah özeti "kapandı" diyecekti kritik §5'teki iki karar kaydı geri yapıştırılsın; C2'ye "reset/checkout/clean/stash yasak" cümlesi eklensin; docs/+content/ ajanları lokal commit atsın DOĞRULANDI
B2 src/features/rapor/rapor-actions.ts:212-218 ve :339-345 (G3 sonrası) İade dalı hasPaket koşuluna bağlanmazsa, harcaması 0 olan paketliye 3 gerçek kredi yazılır Paketli kullanıcı revizyon isteğini modelin iki denemede de doğrulayamayacağı biçimde yazar → RaporUretimHatasi → +3 kredi; revisionCount başarısızlıkta artmadığı ve requestId her denemede tazelendiği için döngü sınırsız; krediler sohbete gidince başkasının parasıyla LLM çağrılır yüksek delta: hasPaket ? 0 : RAPOR_KREDI (çağrı kaldırılmaz) DOĞRULANDI (kod) / OLASI (kullanıcı yönlendirmeli başarısızlık oranı)
B3 rapor-actions.ts:243 ve :363 Dönen kredi alanı koşulsuz - RAPOR_KREDI Paketli kullanıcı liste üretince ekranda bakiyesini 3 eksik görür; G3'ün tüm vaadi "kredin yanmıyor" olduğu için tam ters mesaj + destek yükü orta - (hasPaket ? 0 : RAPOR_KREDI) DOĞRULANDI
B4 src/app/iletisim/page.tsx (tamamı) · grep mersis|vergi kimlik|ticaret unvan|KEP = 0 Satıcı kimliği sitenin hiçbir yerinde yok Yön. (RG 32058) m.5/1 ihlali: ödeme alan bir ETHS, "iletişim" başlığı altında unvan/adres/numara/telefon/KEP bulundurmak zorunda. Aynı eksik Mesafeli Sözleşmeler Yön. m.5/1-b ve -c'yi de ihlal ediyor → tüketici şikâyetinde ön bilgilendirme yapılmamış sayılır yüksek §1.4 (A) + (B) DOĞRULANDI
B5 src/lib/eposta.ts (yalnız 2 şablon) · src/lib/odeme.ts:78-82 Alıcıya sipariş teyidi gönderilmiyor Yön. m.9/1: sipariş alındığı, ortam üzerinden ve ayrıca e-posta/SMS/telefondan bildirilmek zorunda. Bugün alıcı ödediğine dair elinde tek bir kayıt olmadan kalıyor; itiraz/chargeback'te satıcı tarafında delil de yok yüksek T5 e-postası (satıcı kimliği satırları + tutar + tarih + /kosullar özeti — m.8/1-d'yi de kapatır) DOĞRULANDI
B6 src/app/kosullar/page.tsx:61-83 Cayma hakkının kanunen bulunmadığı bilgisi yok Mesafeli Sözleşmeler Yön. m.5/1-h ihlali. Ters yönde de zararlı: 14 günlük gönüllü iadeyi "kanuni hak" sanan kullanıcı, kapsam dışı bir talepte reddedilince haksızlığa uğradığını düşünür orta §1.4 (C) DOĞRULANDI
B7 src/app/kosullar/page.tsx (tamamı) Tüketici hakem heyeti / mahkeme başvuru bilgisi yok Mesafeli Sözleşmeler Yön. m.5/1-k ihlali orta §1.4 (D) DOĞRULANDI
B8 grep işlem rehberi = 0 "İşlem rehberi" başlığı yok Yön. m.7/1 ihlali: teknik adımlar, sözleşmenin saklanıp saklanmayacağı, hata düzeltme araçları ana sayfadan ulaşılabilir olmalı orta /kosullar'a üçüncü bölüm (yeni sayfa değil) DOĞRULANDI
B9 grep kdv|vergiler dahil = 0 · paket-satinal.tsx:67,167 Fiyatın vergiler dâhil olduğu yazmıyor Mesafeli Sözleşmeler Yön. m.5/1-d: toplam fiyat tüm vergiler dâhil bildirilmeli düşük §1.4 (B)'deki ikinci cümle DOĞRULANDI
B10 src/app/gizlilik/page.tsx:35-47 Aydınlatma metninde veri sorumlusunun kimliği yok KVKK aydınlatma yükümlülüğü, veri sorumlusunun kimliğinin bildirilmesini içerir; ayrıca veri silme talebinin kime yapılacağı da belirsiz kalıyor orta §1.4 (E) DOĞRULANDI
B11 ETBİS Tebliği m.5/1-a · koddan görülemez ETBİS kaydının varlığı bilinmiyor Kendine ait e-ticaret ortamında faaliyete başlamadan önce kayıt zorunlu; kayıtsız satış idari yaptırım riski yüksek Bilal'in tek maddesiyle aynı zincir (kayıt olmadan MERSİS/VKN satırı zaten yazılamaz) DOĞRULANDI (yükümlülük) / bilinmiyor (bizim durumumuz)
B12 PROTOKOL md.5 · 24-ceo-kapanis.md §C4 Search Console işi Bilal'in kişisel Google oturumundan yürüyor Ajan, mülke erişmek için açılan oturumdan Gmail/Drive'a da erişebilir durumda; teknik sınır yok, yalnız kural var orta Mülke Gmail'i olmayan ayrı bir hesap "tam yetkili" eklensin; ajan yalnız o profille çalışsın DOĞRULANDI (yapılandırma)

5 · Metin × kod uyumsuzlukları

Metin ne diyor Kod / gerçek ne Nerede
/kosullar: "Tercih Dönemi Paketi tek seferlik bir satın almadır" Paket etiketi A2 ile "KolayTercih Paketi" (ya da marka'nın önerdiği "Tercih Listesi Paketi") olacak; /kosullar metni eski adı yazmaya devam ediyor src/app/kosullar/page.tsx:50-57 × src/lib/credits.ts:7 + 24-ceo-kapanis.md A2 · A2 commit'ine /kosullar de dâhil edilmeli
/kosullar: "14 gün içinde koşulsuz iade talep edebilirsin" — kanuni hak gibi okunuyor Kanunen cayma hakkı yok (Mesafeli Söz. Yön. m.15/1-ğ,h); bu gönüllü bir taahhüt B6
/gizlilik: "sana hizmetle ilgili e-posta (giriş bağlantısı, ödeme bilgilendirmesi) göndermek" Ödeme bilgilendirmesi e-postası yok; src/lib/eposta.ts yalnız magic-link ve kredi hatırlatma taşıyor B5. Metin var olmayan bir gönderimi beyan ediyor — T5 yapılınca uyum kendiliğinden kurulur
/iletisim: "Ödeme, iade, hesap silme ya da başka bir konuda" Hesap silme yolu var (e-posta), ama talebin muhatabı kim olduğu (veri sorumlusu) hiçbir yerde yazmıyor B10
/kosullar üstündeki kod yorumu: "MVP taslağıdır; yayına almadan önce hukuki gözden geçirme gerekir" Hukukçu tutulmayacağı karara bağlandı (KARARLAR 2026-09-21). Yorum, var olmayan bir kapıya işaret ediyor src/app/kosullar/page.tsx:15. Metin düzeltilirken yorum da güncellenmeli: "içeride sürdürülür; son revizyon: …"
24-ceo-kapanis.md T5: makbuz e-postası tetiğe bağlı ("test ödemesi başarılı olursa") Yön. m.9/1 bunu yürürlükteki yükümlülük kılıyor; tetik değil B5

Ek · Kaybolan KARARLAR.md kayıtlarının tam metni (§0 kurtarma)

Bu iki blok, oturumumun ilk okumasında docs/ekip/KARARLAR.md'nin sonunda duruyordu ve şu an dosyada yok. Olduğu gibi dosyanın sonuna geri yapıştırılabilir. Sahibi ceo; ben dosyaya yazmadım.

## 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ç `<h1>` 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: —

Kaynakça (hepsi bu turda açılıp okundu)

Kaynak Adres Not
Elektronik Ticaret Aracı Hizmet Sağlayıcı ve Elektronik Ticaret Hizmet Sağlayıcılar Hakkında Yönetmelik resmigazete.gov.tr/eskiler/2022/12/20221229-5.htm (RG 29.12.2022/32058) m.2, m.4/h, m.5, m.7, m.8, m.9, m.34 okundu
Mesafeli Sözleşmeler Yönetmeliği resmigazete.gov.tr/eskiler/2014/11/20141127-6.htm (RG 27.11.2014/29188) m.5, m.15 okundu. Sonraki değişiklikleri kontrol edilmedi → doğrulanmalı
Elektronik Ticaret Bilgi Sistemi ve Bildirim Yükümlülükleri Hakkında Tebliğ resmigazete.gov.tr/eskiler/2017/08/20170811-7.htm (RG 11.08.2017/30151) m.5, m.6 okundu. 2022–23 e-ticaret paketinden sonraki hâli → doğrulanmalı
Elektronik Ticaretin Düzenlenmesi Hakkında Kanun (6563) mevzuat.gov.tr — MevzuatNo=6563 Yönetmeliğin dayanağı; künye doğrulandı, madde metni gömülü fontu çözülemediği için alıntılanmadı

Yapılmayanlar (sınır gereği): canlıya istek/tarama/ödeme denemesi yok; secret değeri okunmadı; pnpm audit koşturulmadı (disk kuralı: pnpm install/build yasak, lockfile'sız audit anlamsız) — bağımsız bir bağımlılık turunda yapılmalı.


Bilal'den istenen (1 madde — CEO'nun indirdiği tek madde; artırılmadı)

  1. Satıcı kimliği: 5 satır. /iletisim sayfasına girecek beş alanı yaz — ① ticaret unvanın (ya da esnaf/sanatkâr kaydındaysan ad-soyad), ② iş yeri merkez adresin, ③ MERSİS numaran (tacirsen) ya da vergi kimlik numaran (esnafsan), ④ telefon numaran, ⑤ KEP adresin. Metin docs/gece-vardiyasi/2026-09-22/31-guvenlik-satici-kimligi.md §1.4'te hazır, TODO-BILAL yerlerine yapıştırılacak. Vergi dairesi adı listeden çıktı (mevzuat istemiyor), yerine telefon ve KEP girdi. ~5 dk. — Bu bilgileri üretemiyorsan (kayıt henüz yoksa) tek cevap yeter: "esnaf/tacir/şirket değilim"; o zaman sıradaki iş mali müşavirle 1 görüşme olur, sayfa bekler.

Ek 2 · §0'a düzeltme (rapor yazıldıktan sonra, aynı tur içinde)

Raporu kapattıktan sonraki kontrolde durum kısmen değişti — kayıp tamamen değil, kısmen onarıldı:

Dosya §0'daki durum Şu anki durum (son kontrol)
AGENTS.md Search Console bölümü kayıp Geri geldi — paralel çalışan ajan bölümü yeniden yazdı (git diff AGENTS.md = +13 satır, "Yayın sonrası arama motoru bildirimi (zorunlu)"). Not: yeni metinde CEO'nun C4'teki curl | grep -c <slug> sitemap kuralı yok; 25-seo-duzeltme.md §2'deki iki ayaklı kural da yok — yerine "canlıda 200 dönen adres" kuralı var. Bu iki kural aynı şey değil, eksik olan ayak yeniden yazılmalı
docs/ekip/KARARLAR.md 2 adet 22 Eylül kaydı kayıp Hâlâ kayıp (grep "^## 2026-09-22" = 0). §5'teki metin geri yapıştırılmalı
docs/ekip/BACKLOG.md 22 Eylül güncellemesi kayıp Hâlâ kayıp (HEAD ile fark yok)
content/rehber/veliler-icin-tercih-rehberi.md Veli kapanışı + tablo kayıp Hâlâ kayıp (grep "birlikte doldurmanız" = 0, tablo satırı = 0)

B1 bulgusunun önemi düşmüyor: kaybın kendisi gerçekleşti, üç dosyada hâlâ duruyor ve onarım şans eseri (başka bir ajanın aynı işi tekrar yapması) oldu. §0'daki iki süreç önerisi aynen geçerli.