Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/33-backlog-senkron.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

270 lines
35 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 33 — Backlog senkronu (ürün yöneticisi, 22 Eylül 2026 gece vardiyası)
> Rol: `urun-yoneticisi` · CEO ajan sırasında 13. (son) madde — `24-ceo-kapanis.md` §D/13.
> **`docs/ekip/BACKLOG.md`'ye dokunulmadı** (Bilal'in commit'lenmemiş dosyası). Aşağıdaki §5 kopyala-yapıştır hazır.
> Yazılan tek dosya: bu rapor. `src/` yalnız **okundu** (`funnel/sonuc-ilk-ekran` dalında kod ajanı çalışıyor). `KARARLAR.md`, `content/rehber/`, `data/` değiştirilmedi. `pnpm install`/`build` koşulmadı (disk).
> İşaret: **[D]** bu gece kendim koştum (sorgu/komut) · **[K]** koddan çıkarım (dosya:satır) · **[R]** başka ajanın raporundan devralındı.
---
## 1. Özet (5 madde)
1. **Backlog'un omurgası değişti.** CEO'nun 9 KAPANIR / 5 KALICI RET / 13 TETİK tablosu (`24-ceo-kapanis.md` §A) tek listeye indirildi: **aktif 26 satır + tetikli 15 satır**. Yeni süreç icat edilmedi — mevcut Durum sütununa tek bir değer eklendi: **`tetikli — <tetik>; izleyen: <rol>`**.
2. **Mevcut 13 maddenin 3'ü kapandı** (#2 KYK yazısı yazıldı ve canlıda; #3'ün "bu hafta" üç yazısı dosyada, kalanı T10 dalga takvimine taşındı; #4 mobil alt çubuk **kalıcı ret** R3), 4'ünün kapsamı büyüdü/karara bağlandı (#6 P0, #7 G2, #9 üç katına çıktı, #13 A2 ile birleşti), 6'sı olduğu gibi duruyor.
3. **Yeni ve en öncelikli bulgu: ödenmiş ekranda iki farklı nüfus yan yana yazılıyor.** `/listem` tablosunun tooltip'i "X kontenjan, Y yerleşen" diyor; `kontenjan` yalnız **genel** kontenjan, `yerlesen` **dört kotanın toplamı**. Liste havuzuna benzeyen kümede **18.602 satırın 11.964'ünde (%64,3)** bu cümle `Y > X` çıkıyor — matematiksel olarak imkânsız bir ifade (ör. "14500 kontenjan, 15226 yerleşen") [D].
4. **"boş kaldı" rozeti kalır, tooltip düzelir.** Rozetin yanlış pozitifi **yapı gereği imkânsız**, yanlış negatifi 2025 verisinde **0 satır** [D]. Yani en küçük doğru çözüm **tek ternary**: tooltip'ten "yerleşen" çıkar. Doğru payda 2025 için kurulabiliyor (denedim: aşan satır 14.025 → **0**), **2026 için kurulamaz** — kolon eksikliği değil, **API artık kırılımı yayımlamıyor** (`scripts/detay.ts:22`) [K]. Veri hattı seçeneği bu yüzden eleniyor, yerine tek satır **tetik** kondu.
5. **Bilal'e yeni madde eklenmedi.** CEO'nun 1 maddelik `[BİLAL]` listesi (satıcı kimliği) aynen duruyor; bu gecenin marka/veri/editör raporlarının Bilal'e sorduğu 6 soruyu **CEO karar masasına** taşıdım (§7), Bilal'in sabah kuyruğuna değil.
---
## 2. Görev 1a — Mevcut 13 maddenin durum güncellemesi
| # | Eski durum | Bu gece ne oldu | Yeni durum |
|---|---|---|---|
| 1 | dalda | CTO şartnamesi G3'e kısıt yazdı: `spendCredits` **kaldırılmaz**, tutarı koşullanır; yoksa `uniqueIndex("ledger_reason_ref")` (`src/lib/appdb/schema.ts:133`) çapası düşer ve #1 yeniden açılır [R: `28-cto-sartname.md`:198] | **dalda** (değişmedi) — G3'ün kabul kriterine "aynı `requestId` ile ikinci üretim `DUPLICATE`" maddesi eklendi |
| 2 | aday | Yazı yazıldı ve canlıda: `content/rehber/kyk-burs-mu-kredi-mi.md` [D: `ls content/rehber`], Search Console kuyruğunda [R: `YAYIN-KUYRUGU.md`] | **KAPANDI** — satır silinir |
| 3 | aday | Üç "bu hafta" yazısının üçü de dosyada: `bos-kontenjanlar-ne-anlatiyor`, `en-cok-ogrenci-alan-devlet-universiteleri`, `en-secici-devlet-universiteleri` [D]. Kalan konular T10 dalga takvimine girdi (24 Eyl / 1 Eki / 8 Eki / 15 Eki, 14 konu) [R: `25-seo-duzeltme.md` §3] | **KAPANDI** — yerine tek satır: "İçerik dalga takvimi" (#20) |
| 4 | aday | **Kalıcı ret R3**: 95 ziyaret/hafta, mevcut CTA'lar zaten ekranda, kalıcı çubuk ekran alanı yiyor [R: §A/R3] | **reddedildi** — §6'daki "bir daha açılmaz" listesine |
| 5 | aday | Bu gece dokunulmadı | **aday** (değişmedi) |
| 6 | aday | SEO **P1 → P0**: kuyruk günlük kotayı aşıyor (11 bekleyen adres, kota ~10-13) ve dalga takvimi haftada 4 yazı üretecek [R: `25-seo-duzeltme.md` §4/T39] | **hazır** — CEO onayı bekliyor |
| 7 | aday | G2 kapsıyor; CTO kapsamı büyüttü: sunucu bugün yalnız serbest metin `error` dönüyor, `odeme-actions.ts`'e `kod` alanı gerekiyor [R: `28-cto-sartname.md` İtiraz 1] | **onaylı** — dal `odeme/kasa-ve-metin`; yayın koşulu: Bilal'in test ödemesiyle aynı yayın |
| 8 | aday | Değişmedi (Bilal'in YÖK Excel + URAP ön koşulu duruyor) | **aday** (değişmedi) |
| 9 | aday | Kapsam **üç katına çıktı**: 100 satır yanlış `unitur` + 1.291 TR dışı `il` + 110 boş `il` + 26 yanlış şehir; kök neden bulundu (`refresh.ts:665-690` UPDATE yolunda `il/fakulte/isim` tazelenmiyor). Ters yönde yeni sızıntı: sihirbazın "Vakıf" kovasına **1.256 KKTC/yurt dışı satırı** giriyor (`src/lib/db.ts:77-83`) [R: `26-veri-kalitesi.md` §1, K2–K6] | **hazır** — kabul kriteri komutla ölçülebilir; düzeltme betiği onayı §7'de |
| 10 | aday | CEO `yapay-zeka-muhendisi`'ne "kaçak oranı sayıyla" diye sordu, **cevap gelmedi** (rapor yok). G1 tadımlığı ilk ekrana taşıdığı için madde kritikleşti | **aday → sıradaki 5'te 2. sıra** (gerekçe §8) |
| 11 | aday | Bu gece dokunulmadı | **aday** (değişmedi) |
| 12 | aday (Bilal'e bağlı) | Bilal'in test ödemesi CEO §E/2'de duruyor; QA senaryoları o oturuma bağlı | **tetikli — Bilal'in test ödemesi oturumu; izleyen: `qa-muhendisi`** |
| 13 | aday (Bilal kararı) | Paket adı işi A2 ile birleşti; marka raporu 3 metin düzeltmesi daha çıkardı (`page.tsx:136` SSS süre iddiası, `site-footer.tsx:49` "YKS Tercih Robotu 2026", `odeme-actions.ts:74` marka öneki) [R: `27-marka-tescil-ve-paket-adi.md` CEO karar listesi] | **birleşti → #16 (A2)** + kalan metin düzeltmeleri #17 |
---
## 3. Görev 1b — TETİK maddelerinin backlog'a taşıma biçimi (basit tut)
**Tek değişiklik:** Durum sütununun değer kümesine `tetikli` eklendi.
```
aday → hazır → onaylı → dalda → merge / reddedildi
└── tetikli — <ölçülebilir tetik>; izleyen: <rol>
```
Kurallar (üç satır, yeni süreç yok):
1. `tetikli` satır **aday değildir**: sıralamaya girmez, haftalık seçimde okunmaz, tetik gerçekleşene kadar kimsenin kuyruğunda yer tutmaz.
2. Tetik **ölçülebilir olay ya da tarih** olmak zorunda ("hacim artınca" geçersiz). İzleyen rol satırda yazılı; tetik gerçekleştiğinde o rol satırı `aday`a çevirir ve gerekçesini raporuna yazar.
3. Tetikli satır **hiçbir zaman sessizce ölmez**: tetiği gerçekleşmeyen satır, sezon kapanışında CEO tarafından ya yeni tetiğe bağlanır ya da "bir daha açılmaz" listesine geçer.
---
## 4. Görev 2 — Doluluk göstergesi üründe yanlış (yeni madde, en öncelikli)
### 4.1 Kanıt zinciri (hepsi bu gece koşuldu/okundu)
**Şema tarafı** [R: `26-veri-kalitesi.md` K13/K14, benim doğrulamamla]:
```sql
-- Payda yalnız genel kontenjan
SELECT COUNT(*), SUM(kontenjan2025 <> gk2025) FROM programs
WHERE kontenjan2025 IS NOT NULL AND gk2025 IS NOT NULL; -- 19857 | 0 [D]
-- Pay dört kotanın toplamı (scripts/refresh.ts:211-217), sapan satır yok
SELECT COUNT(*) FROM programs WHERE yerlesen2025 IS NOT NULL AND gkY2025 IS NOT NULL
AND yerlesen2025 <> (COALESCE(gkY2025,0)+COALESCE(obkY2025,0)+COALESCE(sgyY2025,0)+COALESCE(dprmY2025,0)); -- 0 [D]
```
**Ürün tarafı** — `src/features/liste/components/program-tablosu.tsx:358-373` [K]:
```tsx
title={
p.kontenjanSon != null && p.yerlesenSon != null
? `${p.kontenjanSon} kontenjan, ${p.yerlesenSon} yerleşen` // ← iki farklı nüfus
: undefined
}
…
{p.yerlesenSon != null && p.yerlesenSon < p.kontenjanSon ? (
<span …>boş kaldı</span>
) : null}
```
**Kaç kullanıcıyı etkiliyor** — liste havuzunun filtresine (`EFEKTIF_SIRA IS NOT NULL`, `src/lib/db.ts:145`) benzeyen küme [D]:
| Ölçü | Sayı |
|---|---|
| Havuz benzeri küme (kontenjan+yerleşen dolu) | 18.602 |
| Tooltip'in `yerleşen > kontenjan` dediği satır | **11.964 (%64,3)** |
| "boş kaldı" rozeti çizilen satır | 351 (%1,9) |
Örnek satır [D]: `ANADOLU ÜNİVERSİTESİ · İlahiyat · kontenjan=14500 yerlesen=15226` → tooltip: **"14500 kontenjan, 15226 yerleşen"**.
**Rozet aslında yanlış değil — bu düzeltilmiş bir tespittir.** Görev metnindeki "boş kalan program dolu görünüyor" hipotezini test ettim, veri **desteklemiyor**:
- *Yanlış pozitif imkânsız (ispat):* rozet `yerleşen < kontenjan` iken çizilir; `gkY ≤ yerleşen < gk` demektir, yani genel kontenjan gerçekten boş kalmıştır.
- *Yanlış negatif (2025'te ölçülebiliyor):* `yerlesen2025 >= kontenjan2025 AND gkY2025 < gk2025` → **0 satır** [D]. Yani "genel kontenjanı dolmadığı hâlde rozeti alamayan" tek bir program bile çıkmadı.
**Geriye tek gerçek hata kalıyor: tooltip.** Ödenmiş ekranda, ürünün vizyonda verdiği sözün ("Her tercih için gerekçe: … kontenjan değişimi, doluluk", `docs/urun/vizyon.md:24`) tam ortasında duran, kendi içinde çelişen bir cümle.
### 4.2 Doğru payda yeniden kurulabilir mi?
| Yıl | Kurulabilir mi | Kanıt |
|---|---|---|
| **2025** | **Evet, denedim ve çalışıyor.** `gk+obk+sgy+dprm` paydasıyla aşan satır **14.025 → 0**; devlet lisans doluluğu **%98,9** (bugünkü hatalı paydayla %100'ün üstü) [D] | `SELECT COUNT(*) … WHERE yerlesen2025 > (gk2025+obk2025+sgy2025+dprm2025)` → 0 |
| **2026** | **Hayır — ve bu bir şema eksiği değil, kaynak eksiği** | `scripts/refresh.ts:100-122` API tipinde yalnız `kontenjan` (genel) + **yerleşen** kırılımı (`gkY/sgyY/dprmY/obkY`) var; kota **kontenjan** alanları yok. `scripts/detay.ts:22` bunu açıkça yazıyor: *"Eylül 2026: API `gkY1/obk1/…` alanlarını yayımlamıyor → bu adım durur"* [K] |
**Sonuç: "veri hattına kolon ekle" seçeneği bugün eleniyor.** Kolonu eklesek de dolduracak veri yok; 2025 kırılımı DB'de Ağustos 2026 çekiminden kalma. Bu yüzden düzeltme **ürün dili** tarafında yapılır, veri tarafına **tek satır tetik** konur.
### 4.3 Üç seçenek ve önerim
| Seçenek | Maliyet | Hüküm |
|---|---|---|
| (a) Rozeti kaldır | XS | **Hayır.** Rozet ispatlı doğru (§4.1) ve 351 satırda gerçek bilgi veriyor — doğru bilgiyi silmek kullanıcı lehine değil |
| (b) **Tooltip'i tek nüfusa indir** | **XS — tek ternary** | **Önerim.** Yanlış cümlenin tamamını kaldırır, doğru bilgiyi korur, kurucunun "sade" talimatına uyar |
| (c) Veri hattına kolon ekle | M+ | **Bugün imkânsız** (§4.2). Tetiğe bağlanır |
**Yetki: `[KARAR]`.** Fiyat, paket içeriği, marka terimi ya da hukuki metin değil — yanlış bilginin kaldırılması. `[BİLAL]` değil; CEO onayıyla uygulanır.
**Kabul kriteri (tarayıcı gerektirmez, komutla doğrulanır):**
```sh
# 1) Tooltip'te iki nüfus yan yana kalmamış
grep -n "yerleşen" src/features/liste/components/program-tablosu.tsx # → 0 satır
# 2) Rozet duruyor ve koşulu değişmemiş
grep -n "boş kaldı" src/features/liste/components/program-tablosu.tsx # → 1 satır
grep -n "yerlesenSon < p.kontenjanSon" src/features/liste/components/program-tablosu.tsx # → 1 satır
# 3) Veri değişmedi (dil değişti) — regresyon kontrolü
sqlite3 -readonly data/yokatlas.db "SELECT COUNT(*) FROM programs WHERE yerlesen2026>kontenjan2026" # → 11964
```
Ek kabul maddesi: tooltip tek nüfus söyler (ör. *"2026 genel kontenjanı: 14.500 kişi"*); **`/meraklisina` şeması aynı commit'te güncellenir** — bu iş sihirbaz/listeleme davranışını değiştirmiyor, dolayısıyla beklenen sonuç "şemada değişiklik gerekmedi" ve bu **commit mesajına yazılır**.
**Kapsam dışı (bilerek):** prompt havuzundaki `yerlesen<yıl>` alanı (`src/lib/rapor-havuzu.ts:184-185`) ve `src/lib/ai/rapor.ts:77`'deki "kontenjan/yerleşen hareketini gözet" cümlesi — model bugün bu iki uyumsuz nüfusu birlikte görüyor. Dokunmak prompt değişikliğidir, **T12 (eval seti) tetiğini açar**; ayrı satır olarak tetikliye yazıldı (#T15).
---
## 5. Kopyala-yapıştır hazır backlog (Bilal sabah kendi işler)
> Aşağıdaki blok `docs/ekip/BACKLOG.md`'nin **tablo gövdesinin tamamının** yerine geçer. Başlık/açıklama satırları aynı kalır, yalnız Durum akışına `tetikli` eklenir.
### 5.1 Durum satırının yeni hâli
```md
Durum: `aday` → `hazır` (kabul kriteri yazıldı) → `onaylı` (CEO/Bilal) → `dalda` (`gece/<konu>`) → `merge` / `reddedildi`.
Ayrıca `tetikli — <ölçülebilir tetik>; izleyen: <rol>`: sırada yer tutmaz, tetik gerçekleşince izleyen rol `aday`a çevirir.
```
### 5.2 Aktif satırlar
| # | İş | Neden (kanıt) | Kabul kriteri | Büyüklük | Durum | Kaynak |
|---|---|---|---|---|---|---|
| 1 | Liste üretiminde çifte kredi harcama açıklarını kapat | `listeOlustur`'da "üretim sürüyor" kilidi yok; tekrar `HATA` koduyla dönüyor, istemci `requestId`'yi sıfırlıyor | Eşzamanlı ikinci üretim kredi düşmez; tekrar cevabı `SURUYOR` koduyla döner; **G3 sonrası da aynı `requestId` ile ikinci üretim `DUPLICATE` döner** (`schema.ts:133` çapası korunur); `guvenlik-uyum` denetimi temiz | S | dalda | yazılımcı raporu (ea3310a) · `28-cto-sartname.md`:198 |
| 5 | Bilinmeyen/yanlış slug'larda gerçek 404 | `notFound()` Suspense içinde; `cacheComponents` altında kabuk 200 gidiyor, Next yalnız `noindex` ekliyor | `/bolum/olmayan-slug` ve `/universite/olmayan-slug` HTTP 404; varlık denetimi her istekte SQLite sorgusu yapmaz | M | aday | `05-seo-plan.md` T1 |
| 6 | IndexNow anahtarı + `git diff` ile otomatik bildirim + doğrulama meta etiketleri | Kuyruk günlük kotayı aşıyor: 11 bekleyen adres, kota ~10-13, dalga takvimi haftada 4 yazı üretiyor → elle bildirim darboğaz | Anahtar dosyası yayında; `git diff --name-only`'dan slug türeten tek komut Bing/Yandex/Naver/Seznam'a gönderir; `metadata.verification` dolu | S | hazır (SEO P0 önerdi, CEO onayı bekliyor) | `25-seo-duzeltme.md` §4/T39 |
| 7 | `odeme_hata {kod}` olayı + sunucu tarafı hata kodu | ~100 siparişin hiçbiri iyzico token'ı alamadı, hiçbir ölçüm göstermedi; sunucu bugün yalnız serbest metin `error` dönüyor → hata sınıflandırılamıyor | `grep -n "odeme_hata" src/features/odeme/components/satin-al-form.tsx` ≥1 ve ad `analitik.ts`'te tanımlı; `odeme-actions.ts` `kod` alanı döner; `odeme_baslatildi` davranışı değişmez | S | onaylı — dal `odeme/kasa-ve-metin`; yayın Bilal'in test ödemesiyle aynı yayında | `05-ceo-kararlari.md` G2 · `28-cto-sartname.md` İtiraz 1 |
| 8 | Üniversite sayfalarını zenginleştirme — ilk sürüm 8 alan | Sayfa yalnız programlardan türeyen 6 sayıyı gösteriyor; OpenAlex prototipi 201/229 eşledi | `uni_kimlik` + `uni_gosterge` tabloları; her kutuda kaynak/dönem dipnotu; eksik değer "—" | L (~22 saat) | aday (Bilal'in Excel/URAP ön koşulu) | `06-uni-veri.md` §4 |
| 9 | Veri kalitesi: `unitur` + `il` temizliği (kapsam 3× büyüdü) | 100 satır yanlış `DEVLET`; 1.291 TR dışı `il`; 110 boş `il`; 26 yanlış şehir. Kök neden: `refresh.ts:665-690` UPDATE yolunda `il/fakulte/isim` tazelenmiyor. Sihirbazın devlet/vakıf filtresi (`db.ts:77-83`) bundan etkileniyor | `SELECT COUNT(DISTINCT il) FROM programs WHERE unitur IN ('DEVLET','VAKIF','VAKIF MYO')` = **81** ve `COUNT(*) WHERE il IS NULL` = **15**; `unitur='DEVLET'` KKTC/yurt dışı satırı = 0; geri alma tek `cp` | S | hazır (betik onayı CEO'da) | `26-veri-kalitesi.md` §3.6 |
| 10 | Tadımlıkta kategori kaçağı: `kategoriBul` ham isme regex uyguluyor | Sanat/medya seçen öğrenciye "Makine Resim ve Konstrüksiyonu" gösteriliyor; **G1 tadımlığı ilk ekrana taşıyor**, kaçak artık ilk izlenim | `kategoriBul`/`kategoriEslesir` baz ada bakar; etkilenen tadımlık satırları elle yeniden seçilir; `refresh --isim-esitle`; kaçak satır sayısı raporda | S | aday (CEO'nun `yapay-zeka-muhendisi`'ne sorduğu oran cevabı gelmedi) | 21 Eyl gece gözlemi · `05-ceo-kararlari.md` §6 |
| 11 | Navbar 5 dk "girişli" gösterirken sunucu oturumu yok | `cookieCache` (`src/lib/auth.ts`, maxAge 5 dk): oturum düşünce korumalı sayfa giriş ekranına atıyor | Oturum düştüğünde navbar en geç bir gezinmede "Giriş yap"a döner ya da korumalı sayfa dönüşünde tutarlı mesaj | S | aday | `01-e2e-test.md` H3 |
| **14** | **`/listem` tablosunda doluluk dili: tooltip iki farklı nüfusu yan yana koyuyor** | `program-tablosu.tsx:358-364` → `"${kontenjanSon} kontenjan, ${yerlesenSon} yerleşen"`. `kontenjan` = yalnız genel kontenjan (`kontenjan2025<>gk2025` → 0/19.857), `yerlesen` = 4 kotanın toplamı (`refresh.ts:211-217`). Havuz benzeri kümede **11.964/18.602 satırda (%64,3)** cümle "yerleşen > kontenjan" diyor; ödenmiş ekran | `grep -n "yerleşen" src/features/liste/components/program-tablosu.tsx` → 0; `grep -n "boş kaldı" …` → 1 (rozet ve koşulu **korunur**, ispatlı doğru); tooltip tek nüfus söyler; `sqlite3 … "SELECT COUNT(*) … yerlesen2026>kontenjan2026"` → 11964 (veri değişmedi); `/meraklisina` şeması aynı commit'te gözden geçirilir (davranış değişmiyor → "değişiklik gerekmedi" commit mesajında) | XS | hazır — **`[KARAR]`**, sıradaki işlerin 1.'si | bu rapor §4 · `26-veri-kalitesi.md` K13/K14 · `20-editor-denetimi.md` EK |
| **15** | `/rehber` index'i küme başlıklarıyla gruplanır (A1 = G4'ün genişletilmiş yarısı) | 42 yazı (yakında 52) tek duvar hâlinde; SEO dalga 2 (1 Eki) öncesi merge edilmezse dizin kullanılamaz hâle gelir | 42 yazı en çok 6 küme başlığı altında; kümesiz yazı "Genel"e düşer ve build kırılmaz; `/rehber` başlığında yıl/sezon iddiası yok | S | onaylı — dal `icerik/rehber-kumeleri` | `24-ceo-kapanis.md` A1 · `25-seo-duzeltme.md` §3 |
| **16** | Paket adı sezon-bağımsız olur + sepet metnindeki marka tekrarı | `credits.ts:7` "Tercih Dönemi Paketi" sezon kokuyor; `odeme-actions.ts:74` etikete `KolayTercih — ` öneki ekliyor → "KolayTercih — KolayTercih Paketi" çıkar; "Tercih Dönemi" ibaresi ayrıca başkasının başvurusuna konu (2020/119085) | `grep -rn "Tercih Dönemi Paketi" src/` = 0; iyzico sepet adında marka iki kez geçmez; **merge Bilal'in test ödemesinden sonra** | S | onaylı — dal `odeme/paket-adi`; **ad seçimi CEO'da** (§7/1) | `24-ceo-kapanis.md` A2 · `27-marka-tescil-ve-paket-adi.md` §2.4 (eski #13) |
| **17** | Kalan marka metin düzeltmeleri (SSS süre iddiası + footer kategori iddiası) | `page.tsx:136` "Tercih dönemi boyunca geçerli" — `/kosullar`'da böyle bir süre sınırı yok; `site-footer.tsx:49` "YKS Tercih Robotu 2026" `vizyon.md:22`'nin reddettiği kategori, ayrıca "tercih robotu" ES EĞİTİM adına 2000/08210 ile tescilli | `grep -rn "Tercih dönemi boyunca" src/` = 0; footer kategori iddiası yerine ne yaptığımızı söyleyen ifade; garanti/olasılık dili yok | XS | hazır (CEO tek satır onayı) | `27-marka-tescil-ve-paket-adi.md` CEO listesi #5–#6 |
| **18** | `/sonuc` sayfasına `<h1>` | Sayfada hiç `<h1>` yok — erişilebilirlik ve SEO borcu | `/sonuc` sunucu HTML'inde tam 1 adet `<h1>` | XS | onaylı — dal `a11y/sonuc-h1` | `24-ceo-kapanis.md` A3 |
| **19** | Satıcı kimliği sayfası — placeholder'lı taslak | Para alan sitede satıcının kim olduğunu söyleyen tek satır yok (`grep` = 0); "fatura/makbuz" kelimesi hiç geçmiyor | Sayfa var, footer'dan linki var, 5 alan `TODO-BILAL` işaretli; Bilal bilgileri yazınca tek commit'le yayına hazır | S | onaylı — `guvenlik-uyum`, dal `uyum/satici-kimligi` | `24-ceo-kapanis.md` A8 |
| **20** | İçerik dalga takvimi: 14 konu, 4 dalga (24 Eyl / 1 Eki / 8 Eki / 15 Eki) | Haftada 4 yazı hızı; #7 çıkmadan #8 yazılamaz, #18 A4 merge edilmeden hiç yazılamaz | Bir dalga, editörün o dalganın **tüm** yazılarını onayladığı gün kapanır; kapanmadan sonraki dalga başlamaz; dalga başına en çok 4 yazar | M (süren) | onaylı | `25-seo-duzeltme.md` §3 (eski #3'ün yerine) |
| **21** | Güncellenen her yazıya `guncelleme: <ISO tarih>` frontmatter kuralı | `sitemap.ts:47` `lastModified` değerini `y.guncelleme ?? y.tarih`'ten alıyor → alan yoksa Google güncellemeyi görmez; `veliler-icin-tercih-rehberi` bu gece değişti, alan kontrol edilmedi | Değişen her yazıda alan var; kural `AGENTS.md`'nin içerik bölümünde; `grep -L "guncelleme:"` ile değişen dosya listesi boş | XS | hazır | `25-seo-duzeltme.md` §4/T40 |
| **22** | Mevcut 28 yazıdaki `/tercih-robotu` linki (301'e giden ölü CTA) | 42 yazıda 682 link tarandı, 0 kırık hedef; tek sorun `/tercih-robotu` 301 — 32 geçişin 4'ü düzeltildi, **28'i duruyor** | `grep -rn "/tercih-robotu" content/rehber/` = 0; yalnız `href` değişir, içerik değişmez; tek commit | XS | hazır (`[KARAR]` — yalnız href; metindeki "tercih robotu" **ifadesi** `[BİLAL]`, §7/6) | `20-editor-denetimi.md` §5 |
| **23** | `veri-kalite.ts`'e 2 ZORUNLU + 1 BİLGİ kontrolü | Üç kir bu gece elle bulundu; bugün `scripts/veri-kalite.ts:145-150` yalnız bilgi satırı basıyor, çıkış kodunu etkilemiyor. **Not:** veri mühendisinin "`yerlesen>kontenjan` ZORUNLU olsun" önerisini değiştirdim — bugün satırların %55'i bu koşulu ihlal ediyor, zorunlu yapılırsa her koşu kırılır | ZORUNLU: (a) aynı baz kurum adında iki `unitur`, (b) TR dışı `il` × TR `unitur` çelişkisi → çıkış kodu ≠ 0; BİLGİ: `yerlesen>kontenjan` **oranı** basılır ve 0'a düştüğü gün T14 tetiği açılır | S | hazır | `26-veri-kalitesi.md` §5–§6 (ürün düzeltmesiyle) |
| **24** | `refresh.ts --yer-esitle`: `il`/`fakulte` UPDATE yolunda da tazelensin | Kök neden #9'un tekrarını üretiyor: bu alanlar yalnız INSERT'te yazılıyor, aynı kir 2027'de yeniden birikir | Bayrak önce listeler, sonra yazar; koşudan sonra #9'un iki kabul sorgusu hâlâ tutar; `--yil`/`--db` kilidi korunur | M | aday | `26-veri-kalitesi.md` §6 |
| **25** | `refresh --isim-esitle` koşusu (vakıf burs etiketi) | A5 cevabı: kırılım **var**, etiket `birimAdi` içinde geliyor (`refresh.ts:37-39`). 2026'da yeni açılan vakıf satırlarının %93,7'si etiketli, eskilerin yalnız %14,2'si — fark bayrağın varsayılan kapalı olmasından | Koşu sonrası vakıf lisansta etiketsiz satır oranı düşer ve sayı raporlanır; #10'un kategori eşlemesi aynı koşuda yeniden sayılır | M | hazır (T11 kararı §7/4) | `26-veri-kalitesi.md` §4 |
| **26** | CTO artıkları: tadımlık ölçüm notu + eşiği (B1+B5) | G1 `tadimlik_goruntulendi` serisini kırıyor (olay ~2.200 px aşağıdaydı, ilk ekrana çıkıyor); not bu gece `tadimlik-satiri.tsx` yorumunda kaldı çünkü G2 `analitik.ts`'te bitişik satıra dokunuyor. Ayrıca "görüntülendi" artık ziyaretle eşitleneceği için huni değeri düşecek | Not `analitik.ts`'in `OlayAdi` yorumunda (`program_eklendi` geleneği); anlamlı ölçüt "tadımlık CTA tıklaması / görüntülenmesi" oranı olarak tanımlı | XS | aday | `28-cto-sartname.md` B1, B5 |
| **27** | Kredi-bitti hatırlatma e-postası paketliyi de tarıyor | `kredi-hatirlatma.ts:29-38` `hasPaket` ayırmıyor; metin "listenin tamamını açmak istersen" diyor (`eposta.ts:188`) — paketliye yanlış. G3 öncesinde de var olan hata | Sorguda `hasPaket = false` koşulu ya da ayrı metin dalı; paketliye giden e-postada "listenin tamamını açmak" ifadesi geçmez | S | aday | `28-cto-sartname.md` B3 |
| **28** | `ACIK_SATIR` sabiti client-safe modüle ayrılsın | `rapor-maske.ts` `server-only`; istemci metinleri sayıyı tek kaynaktan okuyamıyor, `liste-uretici.tsx:274` "3 kredi"yi elle yazıyor → maske değişirse metin sessizce yanlışlanır | Sabit tek modülden okunur; `grep -rn "3 kredi" src/` elle yazılmış sayı döndürmez; maske sayısı değişince tüm metinler değişir | S | aday | `28-cto-sartname.md` B4 |
| **29** | `liste-uretici.tsx:263-285` ölü `hasPaket` dalı | G3 sonrası paketli hiç `KREDI` kodu almayacağı için "+30 kredi yükle" dalı ölü koda dönüşür; zararsız ama tutarsız. Bilal'in dosyası olduğu için bu gece dokunulmadı | Dal kaldırılır ya da yorumla "erişilemez" işaretlenir; paketsiz akış bit-bit aynı | XS | aday (Bilal'in dosyası — kendi commit'inden sonra) | `28-cto-sartname.md` B2 |
### 5.3 Tetikli satırlar (sırada yer tutmaz)
| # | İş | Tetik | İzleyen | Kaynak |
|---|---|---|---|---|
| 12 | QA'nın koşamadığı girişli senaryolar (liste üretimi ×2, 5 soru, ödeme, 390 px) | Bilal'in canlı test ödemesi oturumu (CEO §E/2) | `qa-muhendisi` | `01-e2e-test.md` |
| T1 | İkinci alan (DGS/KPSS) | 2027 YKS sezonunda **100 tamamlanmış ödeme** | `ceo` | §A/T1 |
| T2 | Sosyal kanıt şeridinin `/paket`'e taşınması | Üretilen toplam liste sayısı **25** | `urun-yoneticisi` | §A/T2 |
| T3 | Taksit (3 ve 6, tek seferde) | **10 tamamlanmış ödeme** | `guvenlik-uyum` + `yazilimci` | §A/T3 |
| T4 | Fiyat / maske / `/paket` CTA metninin yeniden değerlendirilmesi | `/odeme` sayfasını **30 kişi** görür **veya** 10 tamamlanmış ödeme | `ceo` | §A/T4, R5 |
| T5 | Makbuz / "ödeme alındı" e-postası | Bilal'in test ödemesi başarıyla tamamlandığı gün (satıcı kimliği satırlarıyla tek commit) | `yazilimci` | §A/T5 |
| T6 | "Listeyi veline gönder" + veli e-postası (KVKK onay metniyle) | **1 Nisan 2027** veya 10 tamamlanmış ödeme | `urun-yoneticisi` (PRD) | §A/T6 · bu rapor §6 |
| T7 | Ana sayfa kıyas ekseninin MEB'in ücretsiz danışmanlığına çevrilmesi | **29 Eylül 2026** | `marka` | §A/T7 |
| T8 | `/il/[slug]` bağımlı yazı (#18) ve il kırılımlı içerikler | #9'un temizliği merge edildiği gün | `seo-geo` | §A/T8 |
| T9 | Öğretmenlik branş yazısı | **24 Eylül dalgası**; atama/istihdam iddiası yok, ikinci okuma editörde | `rehber-yazari` | §A/T9 |
| T11 | Vakıf burs kırılımlı yazı | A5 cevabı **geldi ve "kırılım var"** → CEO tek satırıyla 24 Eyl dalgasına girer (§7/4) | `ceo` | §A/T11 · `26-veri-kalitesi.md` §4 |
| T12 | LLM eval seti | Prompt ya da model değişikliği yapılacak **ilk gün** | `yapay-zeka-muhendisi` | §A/T12 |
| T13 | Satıcı kimliği bilgilerinin yayına girmesi | Bilal 5 alanı doldurduğu gün (#19 taslağı hazır bekler) | `guvenlik-uyum` | §A/T13 |
| **T14** | **Doğru doluluk paydasının kurulması** (`kontenjanToplam<yıl>` kolonu + gerçek doluluk göstergesi) | YÖK Atlas API'si kota **kontenjan** kırılımını (`obk/sgy/dprm`) yeniden yayımladığı gün — göstergesi: #23'ün BİLGİ kontrolünde `yerlesen>kontenjan` oranının 0'a düşmesi | `veri-muhendisi` | bu rapor §4.2 · `detay.ts:22` |
| **T15** | Prompt havuzundan `yerlesen<yıl>` alanının çıkarılması / yeniden tanımlanması | T12 ile aynı gün (ilk prompt değişikliği) — model bugün `rapor-havuzu.ts:184-185` ile iki uyumsuz nüfusu birlikte görüyor, `ai/rapor.ts:77` "kontenjan/yerleşen hareketini gözet" diyor | `yapay-zeka-muhendisi` | bu rapor §4.3 |
| **T16** | Marka tescil başvurusu + `kolaytercih.com.tr` alınması | Satıcı kimliği maddesi (CEO §E/3) kapandığı gün — `[BİLAL]`, sırası ondan sonra; engel kontrolü **bitti: görünür engel yok** | `marka` | `27-marka-tescil-ve-paket-adi.md` §1 |
---
## 6. Bir daha açılmaz (backlog'a konmaz)
> Bu liste **kanıt gelmeden** yeniden önerilemez. Yeniden açılması için gereken şey tartışma değil, satırda yazan veridir.
| Ne | Neden kapalı | Yeniden açılma yolu |
|---|---|---|
| **LGS alanı** | MEB'in ücretsiz, resmî, yapay zekâ destekli LGS robotu var; ücretli ürünün rekabet edeceği yer değil | Yok — kalıcı |
| **Ayrı `/veli` sayfası** | Tek veli okuru yokken ikinci giriş yüzeyi bakımı; kanonik veli yüzeyi `veliler-icin-tercih-rehberi.md` + küme CTA'sı | Yok — kalıcı. Veliye dokunma işi T6'da (düğme + e-posta), **sayfa olarak değil** |
| **Mobil yapışkan alt çubuk** | 95 ziyaret/hafta; mevcut CTA'lar zaten ekranda; ekran alanı yiyen over-engineering | Yok — kalıcı (eski backlog #4) |
| **`/paket` girişsiz birincil CTA'sının fiyat + satın alma fiiline çevrilmesi** | 21 Eyl'de Bilal onayladı; kanıt olarak gösterilen kullanıcı karardan **önceki** sürümü gördü | T4 tetiği (payda oluşunca) |
| **Deneme maskesinin 3'ten büyütülmesi / 299 TL'nin indirilmesi** | Fiyatı gören hiç kimse ödeme ekranına varamadı; bilinmeyen sayının yerine başka bilinmeyen sayı koymak veri üretmez | T4 tetiği |
| *(Bu gece kapananlar — yeniden yazma)* | KYK burs/kredi yazısı (yayında) · SEO'nun "bu hafta" üç yazısı (dosyada) · `netler` çerçevesi düzeltmesi (A6, plan 9 yerde düzeltildi) · TÜRKPATENT engel kontrolü (A9: engel yok) · Search Console kök nedeni (C4 kuralları yazıldı) | — |
---
## 7. Karar bekleyenler (hepsi CEO masasında — Bilal'in kuyruğuna eklenmedi)
| # | Karar | Kimin | Tavsiyem |
|---|---|---|---|
| 1 | **Paket adı:** "KolayTercih Paketi" (CEO A2) mı, "Tercih Listesi Paketi" (marka önerisi) mi; `odeme-actions.ts:74` öneki kalsın mı | `ceo` | **"Tercih Listesi Paketi"** — sezondan bağımsız *ve* ne alındığını söylüyor; önek kalır, marka tekrarı olmaz |
| 2 | **Tooltip düzeltmesi (#14)** onayı ve sıraya alınması | `ceo` `[KARAR]` | **Evet, ilk sıraya** — ödenmiş ekranda kendi içinde çelişen cümle; XS |
| 3 | **Veri düzeltme betiği (§3.6)** onayı: 100 `unitur` + 320 `il` satırı | `ceo` | **Evet** — sıralama/kontenjan verisine dokunmuyor, geri alma tek `cp`; T8 ve #18 buna bağlı. (Veri mühendisi Bilal'e sormuştu; geri alınabilir olduğu için CEO'da) |
| 4 | **T11:** A5 cevabı "kırılım var" çıktı → vakıf burs kırılımlı yazı 24 Eyl dalgasına girsin mi | `ceo` (tek satır) | **Girsin**, ama önce #25 (`--isim-esitle`) koşulsun; etiketsiz %80 satırla yazı yanlış tablo üretir |
| 5 | **Sihirbazın "Vakıf (burslu olursa)" kovası** KKTC/yurt dışı 1.256 satırı (havuzun %13,4'ü) kapsasın mı — bugün kapsıyor ve kullanıcıya söylenmiyor | `ceo` (ürün davranışı) | **Kapsamasın ya da açıkça yazılsın.** Bu iş sihirbaz davranışını değiştirir → kabul kriterine **"`/meraklisina` şeması aynı commit'te güncellenir"** maddesi zorunlu |
| 6 | **"Tercih robotu" ifadesi** 42 yazıda topluca değişsin mi (href düzeltmesi #22 zaten `[KARAR]`) | `[BİLAL]` — marka terimi | Sırası satıcı kimliğinden **sonra**; bu hafta sorulmuyor |
| 7 | **Devlet doluluk rakamı bu sezon yayımlanmasın** kuralı kayda geçsin mi (editör iki yazıda zaten uyguladı) | `ceo` | **Geçsin** — kural: doluluk oranı yalnız KKTC/vakıf için; devlet satırlarında "kontenjanı dolan program payı" kullanılır |
---
## 8. Sıradaki 5 iş (23–29 Eylül penceresi) ve gerekçesi
Ölçüt sırası: (1) sözü bozan yanlış bilgi → (2) sezon takvimi → (3) ölçülebilir huni etkisi → (4) kurucu zamanı. **Bu gecenin kod sırası (G1 → G3 → G4 → G2+G5 → A2) değişmiyor**; aşağıdaki liste onun *ardından* gelen penceredir.
| Sıra | İş | Gerekçe | Ölçüt |
|---|---|---|---|
| 1 | **#14 doluluk tooltip'i** | Ödenmiş ekranda, %64,3 satırda kendi içinde çelişen cümle. XS, tek ternary, geri dönüşü sıfır | (1) yanlış bilgi |
| 2 | **#10 tadımlık kategori kaçağı** | G1 tadımlığı `/sonuc`'un ilk ekranına taşıyor; sanat/medya seçen öğrenciye makine programı göstermek artık **ilk izlenim**. Ödeme öncesi tek gerçek önizlemenin doğruluğu | (1) yanlış bilgi + (3) huni |
| 3 | **#15 `/rehber` küme başlıkları (A1)** | SEO dalga 2 **1 Ekim**'de 4 yazı daha ekliyor; A1 merge edilmezse dizin duvara dönüyor. Takvim penceresi sabit | (2) sezon/takvim |
| 4 | **#6 IndexNow (T39)** | Kuyruk günlük kotayı aşıyor (11 bekleyen, kota ~10-13) ve haftada 4 yazı geliyor; elle bildirim kurucu zamanı yakan darboğaz | (2) takvim + (4) kurucu zamanı |
| 5 | **#9 `il`/`unitur` temizliği** | T7 tetiği **29 Eylül**; #18 yazısı bu temizliğe kilitli; ayrıca sihirbazın devlet/vakıf filtresi bugün 100 satırı yanlış tarafa koyuyor | (2) takvim + (1) yanlış bilgi |
Listeye **girmeyenler ve nedeni:** #5 (gerçek 404) — M boy, takvim baskısı yok; #8 (üniversite zenginleştirme) — Bilal'in ön koşulu; #27/#28/#29 — XS/S ama kullanıcıya bugün görünmüyor; T-satırları — tetikleri açılmadı.
---
## 9. Görev 3 — Kullanıcı yolculuğu notu: ödeyici veli (tek paragraf)
Ödeyen kişi veliyse, 2027 tercih dönemine kadar ürünün veliye **üç anda** dokunması gerekir ve bugün üçünün de karşılığı eksik: **(a) Kilit anı** — öğrenci maskeli listeyi gördüğü ekranda (`listem-govde.tsx:288,369`) veliye gidecek tek bir yol olmalı ("listeyi veline gönder"); bugün **yok**, o ekrandaki tek çıkış `/paket?kaynak=kilit` ve orada duran kişi kartı olmayan 18 yaşındaki öğrenci. **(b) Ödeme anı** — veli ödeyebilmek için bugün öğrencinin hesabına giriyor (`odeme-actions.ts:37-40`, oturum öğrenciye bağlı), ve karşısında satıcının kim olduğunu söyleyen tek satır, makbuz ya da fatura kelimesi yok; bu anın parçaları **hazırlanıyor ama eksik** (#19 satıcı kimliği taslağı onaylı, T5 makbuz e-postası tetikli, T3 taksit tetikli). **(c) Teslim anı** — velinin listeyi okuyabilmesi; burada vaat ("Veliyle paylaşılabilir PDF rapor", `page.tsx:197`) teknik olarak **karşılanıyor** (`yazdir-butonu.tsx` tarayıcı yazdırması) ama veliye hitap eden tek cümle içermiyor, yani en ucuz iyileştirme burada: rapor çıktısının başına veliye yazılmış iki satırlık özet. Üçünün de kalıcı çözümü T6'ya (1 Nisan 2027 ya da 10 ödeme) bağlı; ayrı `/veli` sayfası **kalıcı olarak reddedildi** (R2) ve bu notun hiçbir maddesi onu geri getirmiyor — istenen üç **an**, bir sayfa değil.
---
## 10. Backlog'da ne değişti (sayıyla)
- **Kapanan:** 3 satır (#2, #3, #4 — biri kalıcı ret).
- **Birleşen:** 2 satır (#13 → #16; eski #7 → G2 kapsamıyla güncellendi).
- **Kapsamı büyüyen:** 2 satır (#9 üç kat, #6 P1→P0).
- **Eklenen:** 16 aktif satır (#14–#29) + 16 tetikli satır (12, T1–T16).
- **Backlog dışına çıkan:** 5 kalıcı ret + bu gece kapanan 5 iş (§6).
- Toplam: **10 → 26 aktif**, **0 → 16 tetikli**. Aktif sayı arttı ama "aday" sayısı azaldı: satırların 11'i `onaylı`/`hazır`/`dalda`, yani kabul kriteri yazılı.
---
## Bilal'den istenen
**Yok — yeni madde eklemedim.** CEO'nun `24-ceo-kapanis.md` §E'deki 3 maddesi (disk + içerik yayını · canlı uçtan uca ödeme · satıcı kimliği 5 satır + Search Console erişimi) aynen geçerli, tek `[BİLAL]` karar maddesi hâlâ satıcı kimliği bilgileri. Bu gecenin marka/veri/editör raporlarının Bilal'e sorduğu 6 soruyu §7'de CEO masasına taşıdım; ikisi (marka başvurusu, "tercih robotu" ifadesi) `[BİLAL]` olarak **T16'da sıraya alındı**, bu hafta sorulmuyor.
**Tek istisna — sıfır iş yükü:** sabah `BACKLOG.md`'yi işlerken §5'teki blok doğrudan yapıştırılabilir; başlık ve açıklama satırlarından yalnız "Durum:" satırı değişiyor (§5.1).