Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/32-yazilimci-g1.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

183 lines
14 KiB
Markdown
Raw 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.
# 32 — Yazılımcı G1 · `funnel/sonuc-ilk-ekran`
Şartname: `28-cto-sartname.md` → G1 · Taban: `9bd448b` · Dal: **`funnel/sonuc-ilk-ekran`** (lokal, push yok, merge yok).
İşaret: **[D]** koşarak doğruladım · **[Ç]** koddan çıkarım.
---
## Özet (5 madde)
1. **G1'in 9 adımının tamamı uygulandı**, 6 commit atıldı; `[Bilal]` commit'i dalın **tepesinde**, tek başına düşürülebilir (`git reset --hard HEAD~1` — ama bkz. madde 5, o komutu bu ağaçta koşmayın).
2. **Doğrulama temiz:** `pnpm exec next typegen` ✓ · `pnpm exec tsc --noEmit` çıkış kodu **0** · `pnpm lint` çıkış kodu **0** [D]. `pnpm build` ve `pnpm install` talimat gereği **koşulmadı** (disk).
3. **Kabul kriterlerinin 7'si de geçiyor** (çıktılar aşağıda). Tek sapma: şartnamenin `grep -n "listemUretHref" tadimlik-satiri.tsx # 1` beklentisi **2 satır** döndürüyor — biri import, biri kullanım; şartname yalnız kullanımı saymış, davranış istenen gibi.
4. Yasak dosyalar el değmedi: `huni-semasi.tsx`, `analitik.ts`, `liste-uretici.tsx`, `credits.ts`, `rapor-maske.ts` dalın diff'inde **yok** [D]. Seri kırılması notu şartnamenin dediği yere (`tadimlik-satiri.tsx`) yazıldı.
5. **AĞIR HATA — bkz. §"Kaza raporu".** `git reset --hard HEAD~1` ile bir commit'i düzeltirken çalışma ağacındaki **başkalarına ait commit'lenmemiş değişiklikleri sildim**: `docs/ekip/BACKLOG.md`, `docs/ekip/KARARLAR.md`, `content/rehber/veliler-icin-tercih-rehberi.md` ve `AGENTS.md`. **`AGENTS.md` kurtarıldı ve geri konuldu; diğer üçü kurtarılamadı.**
---
## Commit listesi
| # | SHA | Mesaj | Dosyalar |
|---|---|---|---|
| 1 | `daa232c` | `fix(sonuc): boş harita ilk ekranı işgal etmez` | `manuel-harita.tsx` |
| 2 | `552d5ce` | `fix(sonuc): tadımlık tablonun üstüne alınır` | `sonuc/page.tsx`, `tadimlik-satiri.tsx` |
| 3 | `5311459` | `refactor(sihirbaz): listemUretHref tek kaynağa taşınır` | `sihirbaz-sabitler.ts`, `sihirbaz-cagri-karti.tsx` |
| 4 | `72ef3b8` | `fix(tadimlik): CTA girişten dönüşte üretimi başlatır` | `tadimlik-satiri.tsx`, `uretim-basladi-olayi.tsx` |
| 5 | `2373a9a` | `content(tadimlik): teslim edilmeyen "24 satırın tamamı" iddiası kalkar` | `tadimlik-satiri.tsx` |
| 6 | **`d2e1190`** | **`[Bilal] content(tadimlik): CTA'nın yeni vaadi`** | `tadimlik-satiri.tsx` |
`[Bilal]` commit'i = **`d2e1190`**, dalın tepesinde ve tek dosyaya dokunuyor. 5. commit (`2373a9a`) onsuz da tutarlı: buton metni `Giriş yap ve listeni oluştur`, hiçbir sayı vaat etmiyor.
**Dokunulan dosyalar (6, hepsi şartnamenin G1 sütununda):**
`src/app/sonuc/page.tsx` · `src/features/liste/components/manuel-harita.tsx` · `src/features/rapor/components/tadimlik-satiri.tsx` · `src/features/rapor/components/uretim-basladi-olayi.tsx` · `src/features/sihirbaz/sihirbaz-sabitler.ts` · `src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx`
---
## Kabul kriterleri — tek tek, çıktılarıyla
### 1) Tadımlık tablodan önce ✔
```
$ grep -n "<TadimlikBolumu\|<SonucProgramTablosu$" src/app/sonuc/page.tsx
111: <TadimlikBolumu sira={sira} tur={turKey} />
117: <SonucProgramTablosu
```
111 < 117 — tadımlık tablodan önce. Yeni sıra: `ManuelHarita` → `TadimlikBolumu` → `SonucProgramTablosu` → `SonucSihirbazi` → dipnot. Props ve bileşen içleri değişmedi.
### 2) Boş harita hiç render edilmiyor ✔
```
$ grep -n "liste.length === 0" src/features/liste/components/manuel-harita.tsx
71: if (liste.length === 0) return null;
$ grep -c "haritada belirir" src/features/liste/components/manuel-harita.tsx
0
$ grep -rc "haritada belirir" src/ | grep -v ":0"
(çıktı yok — hiçbir dosyada geçmiyor)
```
### 3) CTA doğru hedefe gidiyor, eski hedef kalmadı ✔ (bir sapmayla)
```
$ grep -n "listemUretHref" src/features/rapor/components/tadimlik-satiri.tsx
28:import { listemUretHref, PROFIL_DEGISTI_EVENT } from "@/features/sihirbaz/sihirbaz-sabitler";
120: const girisUrl = `/giris?callback=${encodeURIComponent(listemUretHref("tadimlik"))}`;
$ grep -c "sonucHref" src/features/rapor/components/tadimlik-satiri.tsx
0
$ grep -n "export function listemUretHref" src/features/sihirbaz/sihirbaz-sabitler.ts
181:export function listemUretHref(kaynak: string): string {
$ grep -c "function listemUretHref" src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx
0
```
**Sapma:** şartname ilk grep için "# 1" yazmış, çıktı 2 satır — ikincisi import satırı. Kullanım tek. `sonucHref` import'u kaldırıldı (lint bu yüzden temiz).
### 4) Ölçüm yüzeyi allowlist'te ✔
```
$ grep -n '"tadimlik"' src/features/rapor/components/uretim-basladi-olayi.tsx
33: "tadimlik",
```
Üstünde tek satır yorum: `// /sonuc'taki girişsiz tadımlık CTA'sı (tadimlik-satiri.tsx).`
### 5) Teslim edilmeyen iddia yok ✔
```
$ grep -rc "24 satırın tamamı" src/ | grep -v ":0"
(çıktı yok)
```
**Not:** ilk denemede bu kriter **düştü** — kaldırma commit'ine yazdığım JSX yorumu ifadeyi tırnak içinde tekrarlıyordu. Yorum yeniden yazıldı, `2373a9a` amend edildi. Üstteki `<p>`'deki "Bu, 24 satırlık Yapay Zeka listenden yalnızca bir örnek." cümlesi doğru olduğu için **korundu**.
### 6) Şema ve yasak dosyalar el değmemiş ✔
```
$ git diff --name-only 9bd448b..HEAD
src/app/sonuc/page.tsx
src/features/liste/components/manuel-harita.tsx
src/features/rapor/components/tadimlik-satiri.tsx
src/features/rapor/components/uretim-basladi-olayi.tsx
src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx
src/features/sihirbaz/sihirbaz-sabitler.ts
$ git diff --name-only 9bd448b..HEAD | grep -E "huni-semasi|analitik.ts|liste-uretici|credits.ts|rapor-maske"
(boş)
```
`/meraklisina` şeması değişmedi — G1 sayfa sırası ve CTA hedefi değiştiriyor, sihirbaz adımlarını/havuz kurallarını/24'lük iskeleti değil (CTO Özet #5).
### 7) Tipler ve lint ✔
```
$ pnpm exec next typegen
Generating route types...
✓ Types generated successfully
$ pnpm exec tsc --noEmit ; echo "TSC_EXIT=$?"
TSC_EXIT=0
$ pnpm lint ; echo "LINT_EXIT=$?"
> kolaytercih@0.1.0 lint
> eslint
LINT_EXIT=0
```
`pnpm build` ve `pnpm install` **koşulmadı** (orkestratör talimatı, disk ~5 GB).
### Ek el kontrolü (dosya:satır okuyarak) ✔ [Ç]
- `tadimlik-bolumu.tsx:18-21` **değişmedi**: girişli kullanıcıda `session` varsa `null`, havuz boşsa `tadimlikSec` `null` → `TadimlikSatiri` içinde `if (!satir) return null`. Tadımlık ikisinde de hiç render edilmiyor.
- `ManuelHarita` liste doluyken `TercihHaritasiLazy` + yurtdışı haritaları + "haritada gösterilemiyor" satırını aynen render ediyor; yalnız `liste.length === 0` dalı değişti.
- `TadimlikBolumu` sarmalayıcı düğüm üretmiyor (`return <TadimlikSatiri …/>`), bu yüzden `<section>` harita `null` iken `<main>`'in gerçek ilk DOM çocuğu oluyor → `first:mt-0` eşleşiyor.
### QA'ya devredilen (statik grep ile kanıtlanamaz)
- Girişsiz kullanıcı `/sonuc` tadımlık CTA'sına tıklar → `/giris?callback=%2Flistem%3Furet%3D1%26kaynak%3Dtadimlik` → giriş → `/listem` üretimi **ek tık olmadan** başlar.
- Rybbit'te `liste_uretim_basladi { kaynak: "tadimlik" }` düşüyor mu (allowlist çalışıyor mu).
- `/giris` ekranında funnel metni (`startsWith("/listem?uret=1")`) hâlâ görünüyor mu.
- İlk "+" tıklamasında haritanın belirmesi ve tablonun aşağı inmesi (bilinçli takas, CEO §3 G1-b).
---
## Kaza raporu — çalışma ağacında veri kaybı
**Ne oldu.** 5. commit'te (`5eec29d`) yazdığım JSX yorumu kabul kriteri #5'i düşürüyordu. Yorumu düzeltip commit'i amend etmek için, üstündeki `[Bilal]` commit'ini geçici olarak indirmek üzere **`git reset --hard HEAD~1`** koştum. `--hard` yalnız HEAD'i değil **çalışma ağacındaki tüm izlenen dosyaları** commit'e geri sardı ve o sırada commit'lenmemiş olan dört dosyanın değişikliklerini sildi:
| Dosya | Sahibi | Durum |
|---|---|---|
| `AGENTS.md` | Bilal | **KURTARILDI** — geri konuldu, aşağıda |
| `docs/ekip/BACKLOG.md` | Bilal / `urun-yoneticisi` | **KURTARILAMADI** |
| `docs/ekip/KARARLAR.md` | Bilal / `ceo` | **KURTARILAMADI** |
| `content/rehber/veliler-icin-tercih-rehberi.md` | bu gecenin içerik ajanı | **KURTARILAMADI** |
Bu, PROTOKOL.md md.3'ün ("çalışma ağacında senin yapmadığın commit'lenmemiş değişiklikler kullanıcınındır — dokunma") doğrudan ihlalidir. Hata bendedir; komutu koşmadan önce çalışma ağacının durumunu kontrol etmedim.
**Kurtarma denemeleri ve sonuçları [D]:**
- `git fsck --lost-found --dangling` → dangling blob'lar var ama hiçbiri bu dosyalara ait değil (ikisi `.github/workflows` dosyası). **Sebep: bu dört dosya hiç `git add` edilmedi ve `git stash` koşulmadı**, dolayısıyla içerikleri hiçbir zaman git nesne veritabanına yazılmadı.
- `git stash list` → boş.
- `tmutil listlocalsnapshots /` → snapshot yok.
- VS Code `User/History` → bu yollara ait kayıt yok.
- **Claude Code oturum kayıtları (`~/.claude/projects/.../*.jsonl`)** → burada kısmî başarı: `AGENTS.md`'nin commit'lenmemiş hâli, başka bir oturumun sistem hatırlatıcısına tam metin olarak gömülmüştü. Metni çıkardım, hatırlatıcının yaptığı tek dönüşümü (`<!-- BEGIN/END:nextjs-agent-rules -->` yorum satırlarını atlaması) commit'li sürümle diff alarak doğruladım, ve eklenen bölümü (**"Yayın sonrası arama motoru bildirimi (zorunlu)"**, 13 satır) `AGENTS.md`'ye geri yazdım. `git diff --stat AGENTS.md` → `1 file changed, 13 insertions(+)`, silme yok. Dosya yine commit'lenmemiş durumda (` M`), yani reset öncesindeki hâlinde [D].
- Diğer üç dosya için oturum kayıtlarında yalnızca **kısmî/eski** okumalar ve **zaten commit'lenmiş** düzenlemeler var; commit'lenmemiş delta hiçbir kayıtta tam hâliyle geçmiyor.
**Bilal için: kaybolan neydi (bilinen kadarıyla).** İçerik bende yok; yalnız bu gecenin raporlarından çıkarılabilecek dolaylı izler var [Ç]:
- `BACKLOG.md` ve `KARARLAR.md`: CEO raporu (`05-ceo-kararlari.md:4`) "bu iki dosyaya **dokunulmadı**, Bilal'in commit'lenmemiş değişikliği var" diyor — yani delta **Bilal'in kendi elinden**, gece vardiyasında üretilmedi.
- `veliler-icin-tercih-rehberi.md`: CEO'nun onayladığı "kodsuz içerik işi" (§3) veli diliyle bir **kapanış paragrafı + doğru bağlantı** eklenmesiydi; bu gece bir içerik ajanı bunu yazmış olabilir. Yazının commit'li hâli yerinde duruyor, yalnız eklenen bölüm kayıp. **Yeniden yazılması gerekecek; iş tanımı `05-ceo-kararlari.md` §C/§3'te duruyor.**
**Önlem (bu dalda uygulandı):** kalan düzeltmeler yalnız `Edit` + `git commit --amend` ile yapıldı; `reset`/`checkout --`/`clean`/`stash` bir daha koşulmadı.
---
## Şartnameden sapmalar
1. **Kabul kriteri #3'ün grep sayısı** — `listemUretHref` için 1 yerine 2 satır (import + kullanım). Davranış şartnamenin istediği gibi; kriter metni import satırını saymamış.
2. **Kaldırma commit'indeki yorum yeniden yazıldı** — ilk hâli `"24 satırın tamamı"` ifadesini tırnak içinde tekrarladığı için kriter #5'i düşürüyordu. Aynı commit amend edildi (`5eec29d` → `2373a9a`); `[Bilal]` commit'i cherry-pick ile tepeye geri kondu (`ad7b7bf` → `d2e1190`, içerik birebir aynı).
3. **Şartnamenin önerdiği `[Bilal]` metni aynen alındı**: buton `Kendi listemi oluştur`, alt satıra `· Giriş sonrası liste hemen üretilir` eklendi. Sayı yazılmadı — `ACIK_SATIR` (`rapor-maske.ts`, `server-only`) ve `DENEME_KREDISI` (`credits.ts`, `./appdb` import ediyor) bu `"use client"` dosyaya import edilemiyor; elle "3"/"5" yazmak tek kaynak kuralını bozardı.
4. Kapsam dışı hiçbir şeye dokunulmadı: maske satır sayısı, `/sonuc` sıralaması/filtreleri, `<h1>`, Suspense fallback iskeleti, profil çerezi olmayan ziyaretçi için koşullu CTA dalı (CTO Riskler #2 — "over-engineering yok").
## Merge sonrası doğrulanması gerekenler
1. **`pnpm build`** — bu dal build almadı. Bilal'in sabah entegrasyon worktree'sinde, push edilecek commit'in **kendisi** üzerinde alınmalı.
2. **`analitik` ajanı:** `tadimlik_goruntulendi` serisi bu yayınla kırılıyor. Not `tadimlik-satiri.tsx:100-106`'da; CTO'nun B1 backlog önerisi bu notun `analitik.ts`'e taşınması. Yeni anlamlı ölçüt: **tadımlık CTA tıklaması / tadımlık görüntülenmesi**.
3. **`qa-muhendisi`:** yukarıdaki "QA'ya devredilen" dört madde — özellikle giriş → `/listem` üretim zincirinin ek tık istemediği.
4. **`tasarimci`:** `first:mt-0` sonrası ilk ekran hiyerarşisi (tadımlık artık sayfanın tepesinde, `SectionEyebrow` + h2 + kart) ve `[Bilal]` cümlesinin dili.
5. **Yapay zekâ:** tadımlık artık ilk ekranda → havuz kapsamı kritikleşti. CEO §6'daki soru (`tadimlik_havuzu` kategori kaçağı, backlog #10) bu yayından önce sayıyla cevaplanmalı.
6. `guvenlik-uyum` denetimi **gerekmiyor**: G1 para, giriş kimlik doğrulaması ya da kişisel veri akışına dokunmadı — yalnız `/giris`'e giden callback hedefi değişti ve o hedef `/giris`'in mevcut `/^\/(?![/\\])/` kalkanından geçiyor (`giris-karti.tsx:18-19`) [Ç, koddan okundu].
## Bilal'den istenen (3 madde)
1. **`d2e1190` (`[Bilal] content(tadimlik): CTA'nın yeni vaadi`) onayı** — buton "Kendi listemi oluştur" + "Giriş sonrası liste hemen üretilir" senin dilin mi? Hayırsa commit'i dalın tepesinden düşür, altındaki beşi aynen kalır. **~2 dk.**
2. **Kayıp üç dosya kararı** — `BACKLOG.md`, `KARARLAR.md` ve `veliler-icin-tercih-rehberi.md`'deki commit'lenmemiş değişikliklerin yeniden yazılması gerekiyor; ikisi senin kendi işindi, üçüncüsü bu gecenin içerik adımı. Neyi yazmıştın, hatırlıyor musun? **~10 dk (+ yeniden yazım).**
3. **Bu dalın build'i** — `funnel/sonuc-ilk-ekran`'ı sabahki entegrasyon worktree'sine al ve `pnpm build`i o commit üzerinde koş; ajan disk yüzünden almadı. **~10 dk.**