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>
178 lines
12 KiB
Markdown
178 lines
12 KiB
Markdown
# 37 — Yazılımcı: navbar taşması + G1 harita/metin düzeltmesi
|
||
|
||
Tarih: 22 Eylül 2026 · Rol: `yazilimci` · Şartname: `36-tasarimci-g1-ve-navbar.md`
|
||
İşaret: **[D]** koşarak doğruladım · **[Ç]** koddan çıkarım
|
||
|
||
---
|
||
|
||
## Özet (5 madde)
|
||
|
||
1. **İki dal, sırayla, ayrı ayrı commit'lendi.** `duzeltme/navbar-tasmasi` (1 commit, `main`'den) ve `funnel/sonuc-ilk-ekran` (mevcut dala 2 commit eklendi, geçmiş yeniden yazılmadı). Push/merge yok, `main`'e commit yok.
|
||
2. **Navbar:** tasarımcının Alternatif 1'i uygulandı — iki etiket span'inden hem `xl` hem `sm` görünürlük sınıfları kaldırıldı. `aria-label`'ların ikisi de zaten yerindeydi, doğrulandı; erişilebilirlik değişmedi. Alternatif 2'ye (`Nasıl çalışır?`) dokunulmadı.
|
||
3. **G1 (a):** `<ManuelHarita />` tablonun altına alındı (silinmedi, geri getirilmedi). Yeni sıra: **tadımlık → tablo → harita → sihirbaz → dipnot.** Sıraya bağlı stiller yeni sıraya göre denetlendi; harita ilk çocuk olmaktan çıktığı için kendi `mt-16` boşluğunu almak zorunda kaldı (bkz. §Sapmalar 1).
|
||
4. **G1 (b):** `tadimlik-satiri.tsx` paragrafına "ilk üçü hemen açılır" eklendi; ayrı `[Bilal]` commit'i, dalın tepesinde. İki `[Bilal]` commit'inin de tek tek düşürülebilir olduğu ters yama denemesiyle doğrulandı [D].
|
||
5. **Doğrulama iki dalda da temiz:** `next typegen` ✓ · `tsc --noEmit` → **0** · `pnpm lint` → **0** [D]. `pnpm install`/`pnpm build` talimat gereği koşulmadı; tarayıcı/dev sunucusu açılmadı.
|
||
|
||
**Bana ait olmayan 19 commit'lenmemiş dosyaya dokunulmadı** — hiçbiri stage'lenmedi, `git add -A`/`.` kullanılmadı, dosyalar yol vererek eklendi. Yasaklı komutların (`reset`, `checkout --`, `restore`, `clean`, `stash`) hiçbiri koşulmadı; ters yama denemeleri bile `git apply --check` ile ağaca dokunmadan yapıldı.
|
||
|
||
---
|
||
|
||
# DAL 1 — `duzeltme/navbar-tasmasi`
|
||
|
||
Taban: `main` `9bd448b`. **1 commit.**
|
||
|
||
| SHA | Mesaj |
|
||
|---|---|
|
||
| `9abfdf4` | `fix(navbar): pill etiketleri her genişlikte gizli — çakışma kapanır` |
|
||
|
||
**Dokunulan dosyalar (2):**
|
||
`src/features/kullanici/components/user-nav.tsx` · `src/features/liste/components/listem-butonu.tsx`
|
||
|
||
## Ne değişti
|
||
|
||
- `user-nav.tsx:59` → `className="hidden sm:inline lg:hidden xl:inline"` **→ `className="hidden"`** (span korundu, metin DOM'da ama `display:none`).
|
||
- `listem-butonu.tsx:39` → aynı değişiklik.
|
||
- Her iki yerdeki eski yorum ("lg–xl arasında metin gizli") artık yanlış olacağından yeniden yazıldı; kök neden (konteyner 1152'de kilitli, `xl` yeni yer açmıyor, sağ kümenin bütçesi ~304 px) kodun yanına not düşüldü.
|
||
- **Kapsam dışı bırakılan:** `user-nav.tsx:73`'teki kredi etiketi (`hidden md:inline lg:hidden`) — şartname yalnız iki etiket span'ini sayıyor, dokunulmadı.
|
||
|
||
## Kabul kriterleri
|
||
|
||
| Kriter | Durum | Nasıl doğrulandı |
|
||
|---|---|---|
|
||
| `grep -n "xl:inline\|sm:inline"` iki dosyada 0 sonuç | ✔ | `GREP_EXIT=1` (eşleşme yok) [D] |
|
||
| `aria-label` her iki dosyada var | ✔ | `user-nav.tsx:52` `aria-label="Yapay Zeka Listem"` · `listem-butonu.tsx:33` `aria-label={\`Kendi listem — ${liste.length}/${MANUEL_LISTE_MAX} program\`}` [D] |
|
||
| Alternatif 2 uygulanmadı | ✔ | `katalog-arama.tsx` dalın diff'inde yok [D] |
|
||
| Tasarımcının hesabı (375 → 284,5/351 · 768 → 555,8/736 · 1280+ pozitif) | ✔ [Ç] | Kod değişikliği tasarımcının hesapladığı girdiyi birebir üretiyor; piksel ölçümü onun raporundan, ben ölçmedim |
|
||
|
||
> **Not — grep kriterini kirleten tuzak:** ilk yazdığım yorum gerekçeyi anlatırken `xl:inline` dizesini literal geçiriyordu ve kabul kriteri grep'i 1 sonuç dönüyordu. Yorum, anlamı koruyarak dizeyi içermeyecek biçimde yeniden yazıldı. Kriter artık gerçekten 0.
|
||
|
||
## Doğrulama çıktıları
|
||
|
||
```
|
||
$ 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
|
||
```
|
||
|
||
---
|
||
|
||
# DAL 2 — `funnel/sonuc-ilk-ekran`
|
||
|
||
Mevcut dalın tepesine (`d2e1190`) **2 commit eklendi**; geçmiş yeniden yazılmadı, hiçbir commit amend/rebase edilmedi.
|
||
|
||
| # | SHA | Mesaj | Dosyalar |
|
||
|---|---|---|---|
|
||
| 7 | `e912665` | `fix(sonuc): harita tablonun altına alınır — hidrasyon kayması kapanır` | `sonuc/page.tsx`, `manuel-harita.tsx`, `tadimlik-satiri.tsx` |
|
||
| 8 | **`e3519a5`** | **`[Bilal] content(tadimlik): paragraf maskenin gerçeğini söyler`** | `tadimlik-satiri.tsx` |
|
||
|
||
**Dalın `[Bilal]` commit'leri: `d2e1190` (6.) ve `e3519a5` (8., tepe).**
|
||
|
||
Dalın `main`'den toplam diff'i hâlâ aynı 6 dosya; yeni dosya eklenmedi.
|
||
|
||
## (a) `e912665` — harita tablonun altına
|
||
|
||
Yeni sıra `src/app/sonuc/page.tsx` içinde:
|
||
|
||
```
|
||
118 <TadimlikBolumu sira={sira} tur={turKey} />
|
||
124 <SonucProgramTablosu … />
|
||
131 <ManuelHarita />
|
||
135 <SonucSihirbazi … />
|
||
```
|
||
|
||
Gerekçe (B1) kodun yanına yorum olarak yazıldı: sunucu snapshot'ı hep boş liste döndüğü için harita yukarıdayken kayıtlı listesi olan dönüş ziyaretçisinde hidrasyondan sonra ~368 px'lik bir blok `<main>`'in tepesine giriyor, impact fraction ~1. Aşağıda belirince yalnızca sihirbaz + dipnot iteliyor.
|
||
|
||
### Sıraya bağlı stiller — tek tek denetlendi
|
||
|
||
| Eleman | Kural | Yeni sırada durum |
|
||
|---|---|---|
|
||
| `tadimlik-satiri.tsx:127` `<section className="mt-16 min-w-0 first:mt-0">` | `first:mt-0` | ✔ **Sağlamlaştı.** Harita artık üstünde olmadığı için bu `<section>` `<main>`'in ilk DOM çocuğu; kural her durumda eşleşiyor, eskiden "harita null'sa" koşuluna bağlıydı. Yorum yeni gerçeğe göre güncellendi. |
|
||
| `program-tablosu.tsx:175` `<section className="mt-16">` | sabit üst boşluk | ✔ Değişmedi; tadımlık render edilmediğinde (girişli kullanıcı) ilk çocuk olup `mt-16` alıyor — G1 öncesindeki davranışın aynısı, bu commit'in getirdiği bir değişiklik değil. |
|
||
| `sihirbaz-cagri-karti.tsx:321` `<section className="… mt-16 …">` | sabit üst boşluk | ✔ Değişmedi. |
|
||
| `manuel-harita.tsx:74` kök `<div>` | **boşluğu yoktu** | ⚠ **Düzeltildi** — bkz. Sapmalar 1. |
|
||
|
||
## (b) `e3519a5` — `[Bilal]` metin artığı
|
||
|
||
`tadimlik-satiri.tsx:135` civarı:
|
||
|
||
> Sıralamana uygun bir programın gerekçesi, yerleşme riski ve taban trendi — 24 tercihlik listenin her satırı bu formatta kurulur**, ilk üçü hemen açılır.**
|
||
|
||
- Sayı yazıldı, bulanıklaştırılmadı (Bilal'in seçtiği yön).
|
||
- Garanti/vaat dili yok; cümle bir şey **eklemiyor**, var olan iddiayı **sınırlıyor**.
|
||
- `3` elle yazıldı: `ACIK_SATIR` `src/lib/rapor-maske.ts:12`'de ve o dosya `server-only`; `tadimlik-satiri.tsx` ise `"use client"` — sabit import edilemiyor. **Tek kaynak bağı kodun yanına yorum olarak iliştirildi**: `ACIK_SATIR` değişirse bu cümle aynı commit'te değişmeli. [D — `rapor-maske.ts:12` okundu, değer 3]
|
||
|
||
### `[Bilal]` commit'lerinin tek tek düşürülebilirliği — doğrulandı [D]
|
||
|
||
Dizilim `… 2373a9a → d2e1190 [Bilal] → e912665 → e3519a5 [Bilal]` olduğu için `d2e1190` tepede değil; düşürme yolu `git revert` (yıkıcı komut yasağına da uygun olan tek yol). Ters yamanın temiz uyguladığı, **çalışma ağacına dokunmadan** sınandı:
|
||
|
||
```
|
||
$ git show d2e1190 | git apply --check --reverse - → EVET (temiz ters yama)
|
||
$ git show e3519a5 | git apply --check --reverse - → EVET (temiz ters yama)
|
||
```
|
||
|
||
Hunk'lar birbirinden uzak ve kesişmiyor: `d2e1190` → satır 188 ve 202 (CTA metni), `e3519a5` → satır 133-142 (paragraf). Aralarındaki `e912665` ise 123-127 (yorum) bölgesine dokunuyor.
|
||
|
||
**Ana commit'ler `[Bilal]` commit'leri olmadan derlenir mi?**
|
||
- `e912665` için **[D]**: `tsc` ve `lint` tam olarak bu commit'in ağacı üzerinde koşuldu (commit'ten hemen önce), ikisi de 0.
|
||
- `d2e1190` düşürülürse: o commit yalnızca iki metin dizesini değiştiriyor (`Giriş yap ve listeni oluştur` → `Kendi listemi oluştur` ve alt satıra bir cümle), hiçbir tanımlayıcıya dokunmuyor — geri alınması derlemeyi kıramaz **[Ç]**.
|
||
|
||
## Doğrulama çıktıları (dal 2, tepe commit'in ağacında)
|
||
|
||
```
|
||
$ 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
|
||
```
|
||
|
||
`/meraklisina` şeması el değmedi [D]:
|
||
```
|
||
$ git diff --name-only 9bd448b..HEAD | grep -E "huni-semasi|meraklisina|analitik.ts|rapor-maske|credits.ts"
|
||
(boş)
|
||
```
|
||
|
||
---
|
||
|
||
## Şartnameden sapmalar (2)
|
||
|
||
1. **`manuel-harita.tsx`'in kök `<div>`'ine `mt-16` eklendi** — şartname yalnız `page.tsx`'te yer değişimi istiyordu. Gerekçe: haritanın kök öğesinin üst boşluğu yoktu, çünkü `<main>`'in ilk çocuğuyken boşluğu `main`'in `py-12`'sinden alıyordu. Tablonun altına taşınınca tabloya yapışık kalacaktı; sayfadaki diğer bölümlerin hepsi `mt-16` kullanıyor (tablo `<section>`'ı, sihirbaz kartları, tadımlık). Bu bir ritim düzeltmesi, davranış değişikliği değil. Dosya zaten G1'in sahiplik kümesinde. **Gözle kontrol edilmeli** (aşağı, Bilal'den istenen 1).
|
||
2. **İki commit'te yorum güncellemeleri** — `tadimlik-satiri.tsx:123`'teki `first:mt-0` yorumu haritanın üstte olduğunu varsayıyordu, `page.tsx`'teki hiyerarşi yorumu da eski sırayı anlatıyordu. İkisi de yeni sıraya göre yeniden yazıldı; kod değil belge düzeltmesi, ama diff'e giriyor.
|
||
|
||
## Kapsam dışı bırakılanlar (bilerek)
|
||
|
||
- **B3** (Suspense fallback `max-w-6xl` ↔ içerik `max-w-4xl`, 256 px genişlik farkı) — `sonuc/page.tsx:47`. Bu işin parçası değil, dokunulmadı. Aynı dosyada duruyor; A3 (`/sonuc` `<h1>`) dalıyla birlikte gitmesi ucuz olur.
|
||
- **B4** ("Giriş sonrası liste hemen üretilir" kredisiz kullanıcıda tutmuyor) — `tadimlik-satiri.tsx:188-189`, yani `d2e1190`'ın kendi hunk'ı. Dokunmadım; düzeltilecekse o `[Bilal]` commit'iyle birlikte ele alınmalı.
|
||
- Navbar'daki küçük bulgular (kredi link'inin erişilebilir adının salt "12" olması, <640 px'te 36 px dokunma hedefi) — şartname bunları istemedi.
|
||
- Alternatif 2 (`Nasıl çalışır?` gizleme) — Bilal A'yı seçti.
|
||
|
||
## Merge sonrası doğrulanması gerekenler
|
||
|
||
1. **`pnpm build` iki dalda da alınmadı** (disk talimatı). Push edilecek commit'in **kendisi** üzerinde alınmalı — çalışma ağacı kirli olduğu için buradaki bir build zaten yanıltıcı olurdu (AGENTS.md "Push öncesi build zorunlu").
|
||
2. **Navbar, girişli oturumda 375 / 768 / 1280 px** — header tek satıra indi mi, pill'ler ikon+rozet hâliyle tanınabiliyor mu. Tasarımcının hesabı bunu söylüyor ama ölçüm hesapla yapıldı, gözle değil.
|
||
3. **Ekran okuyucuyla iki pill** — etiket artık yalnız `aria-label`'dan geliyor; VoiceOver/NVDA'da "Yapay Zeka Listem, bağlantı" ve "Kendi listem — 3/24 program, düğme" duyuluyor mu.
|
||
4. **`/sonuc`, kayıtlı manuel listesi olan oturumda** — harita hidrasyonda tablonun altında belirip **üstündeki hiçbir şeyi itmiyor** mu (B1'in asıl testi), ve tabloyla arasındaki `mt-16` boşluğu doğru duruyor mu.
|
||
5. **Analitik serisi** — `tadimlik_goruntulendi` için 32 numaralı raporun uyarısı geçerliliğini koruyor; tadımlık hâlâ ilk ekranda, bu commit'ler paydayı değiştirmedi.
|
||
|
||
`guvenlik-uyum` denetimi **gerekmiyor**: iki dalda da para, giriş kimlik doğrulaması ya da kişisel veri akışına dokunulmadı — değişenler yerleşim sırası, iki CSS sınıfı ve bir cümle.
|
||
|
||
## Bilal'den istenen (3 madde)
|
||
|
||
1. **`manuel-harita.tsx`'e eklediğim `mt-16`'yı gözle onayla** — harita artık tablonun hemen altında, aradaki boşluk diğer bölümlerle aynı ritimde mi, yoksa fazla/az mı? **~2 dk.**
|
||
2. **`e3519a5` (`[Bilal] content(tadimlik): paragraf maskenin gerçeğini söyler`) onayı** — "…24 tercihlik listenin her satırı bu formatta kurulur, **ilk üçü hemen açılır**." senin dilin mi? Hayırsa `git revert e3519a5`; altındaki hiçbir şey etkilenmez (ters yama temiz doğrulandı). **~2 dk.**
|
||
3. **Navbar'da kalan 1024–1151 px bandı** — Alternatif 1 bu dar bantta profilsiz + liste dolu durumda −48 … −1 px açık bırakıyor (tasarımcının hesabı). Alternatif 2'yi (`Nasıl çalışır?` yalnız ≥1280 px) isteyecek misin, yoksa bu bant kabul mü? **~3 dk.**
|