Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/08-p4-olcum.md
bilalgursen 26893ce7cf feat(olcum): sihirbazın 1. adımı ve kaynaksız /paket linkleri ölçülür
(a) `sihirbaz_adim{adim:1}` artık sihirbaz modalı açıldığında atılıyor.
Bugüne kadar olay yalnız `adimaGit`in ileri geçişinde atılıyordu; modal
zaten 1. adımda açıldığı için 1. adım hiç "geçilmiyor", dolayısıyla hiç
sayılmıyordu ve huninin paydası `sira_girildi`den türetilmek zorunda
kalıyordu. Mount effect'i + `olayBirKez` ile tam bir kez düşüyor:
1→2→1→2 gezinmesi bileşeni unmount etmediği için tekrar tetiklemiyor,
sessionStorage tekilleştirmesi de aynı sekmede ikinci açılışı sayıyor.

SERİ KIRILMASI: bu değişikliğin canlıya çıktığı tarihten ÖNCEKİ
`sihirbaz_adim` serisinin paydası farklıdır — o dönemde `adim:1` hiç
atılmadı, seri yalnız 2 ve 3'ten oluşuyor. Öncesi ve sonrası
karşılaştırılamaz; huni okumalarında kırılma tarihi dipnot edilmeli.
Aynı desen `program_eklendi` için 21 Eylül'de uygulanmıştı.

(b) Kaynaksız 10 `/paket` linkine tekil `?kaynak=` eklendi; sitedeki 14
`/paket` linkinin 14'ünde artık kaynak var. Değerler mevcut şemayla
(`kilit`, `kredi_bitti`, `nav`) aynı dilde: fiyat_paket, fiyat_kredi,
kosullar, tercih_degisti, tercih_degisti_yetersiz, danisman_rozet,
danisman_kredi_bitti, danisman_kredi_az, odeme_geri, odeme_hata.

`paket-gorunum-olayi.tsx`'teki `KAYNAKLAR` allowlist'i de genişletildi:
listede olmayan her değer `"diger"`e düştüğü için, genişletilmeseydi 10
yeni kaynağın tamamı tek kovada toplanır ve ölçüm deliği kapanmazdı
(bağımlılık kapanışı — dosya şartnamenin listesinde yoktu, raporda
sapma olarak yazıldı).

Görsel değişiklik yok; yeni olay adı ya da yeni ölçüm yüzeyi eklenmedi.
Doğrulama: `next typegen` + `tsc --noEmit` + `lint` temiz.

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

7.1 KiB
Raw Blame History

P4 — İki ölçüm deliği · gece/0922-olcum

Tur 3 · yazılımcı raporu · 2026-09-23

Özet (5 madde)

  1. sihirbaz_adim{adim:1} artık sihirbaz modalı açıldığında (bileşenin mount'unda) bir kez atılıyor; huninin paydası sira_girildiden türetilmek zorunda değil.
  2. Tekrar sayma koruması iki katmanlı: bileşen 1↔2 gezinmesinde unmount olmuyor (mount effect tekrar koşmuyor) ve olayBirKez oturum başına tekilleştiriyor.
  3. Kaynaksız 10 /paket linkinin hepsine tekil ?kaynak= eklendi; sitedeki 14 /paket linkinin 14'ünde artık kaynak var.
  4. Şartname dışı zorunlu dosya: paket-gorunum-olayi.tsx'teki KAYNAKLAR allowlist'i genişletildi — genişletilmeseydi 10 yeni değerin tamamı Rybbit'e "diger" olarak düşerdi, yani iş ölçüm açısından işlevsiz kalırdı.
  5. Görsel değişiklik yok: tüm diff ya yorum, ya href query string'i, ya da görünmez bir useEffect. tsc --noEmit ve lint temiz.

Değişen dosyalar

Dosya Ne
src/features/sihirbaz/components/sihirbaz-adimlar.tsx Mount'ta olayBirKez("sihirbaz_adim", { adim: 1 }, "adim1"); adimaGit yorumu güncellendi (adım 1 artık oradan geçmiyor)
src/app/page.tsx 2 link
src/app/kosullar/page.tsx 1 link
src/features/rapor/components/tercih-degisti-modali.tsx 2 link
src/features/rapor/components/sohbet-client.tsx 3 link
src/features/odeme/components/odeme-kromu.tsx 1 link
src/features/odeme/components/odeme-sonuc-karti.tsx 1 link
src/features/odeme/components/paket-gorunum-olayi.tsx (şartname dışı) KAYNAKLAR allowlist'i 3 → 13 değer
# Dosya:satır Yüzey (kullanıcı ne görüyor) ?kaynak=
1 src/app/page.tsx:543 Ana sayfa fiyat bölümü, paket kartının CTA'sı ("… TL — Paketi incele") fiyat_paket
2 src/app/page.tsx:573 Ana sayfa fiyat bölümü, "Kredi bitti mi?" topup kartı fiyat_kredi
3 src/app/kosullar/page.tsx:55 Koşullar · Ücretlendirme paragrafındaki "paket sayfasında" linki kosullar
4 tercih-degisti-modali.tsx:283 "Tercihlerin değişmiş" modalı, aksiyon satırı (kredi baştan yetmiyor) tercih_degisti
5 tercih-degisti-modali.tsx:335 Aynı modal, durum.ad === "kredi-yetersiz" satırı (güncelleme denendi, kredi yetmedi) tercih_degisti_yetersiz
6 sohbet-client.tsx:351 Danışman başlığındaki "N kredi" rozeti danisman_rozet
7 sohbet-client.tsx:538 Danışman, kredi bitti bandındaki "Kredi yükle" butonu danisman_kredi_bitti
8 sohbet-client.tsx:546 Danışman, "son N kredin" uyarısındaki "kredi yükleyip" linki danisman_kredi_az
9 odeme-kromu.tsx:45 /odeme üst şeridi, "Paket sayfasına dön" odeme_geri
10 odeme-sonuc-karti.tsx:141 Ödeme başarısız kartı, "Tekrar dene" odeme_hata

Adlandırma dili mevcut şemadan alındı (kilit, kredi_bitti, nav): küçük harf, snake_case, yüzeyi/tetiği söyleyen kısa ad. Yeni kavram icat edilmedi; fiyat_* ve danisman_* önekleri aynı bölümdeki iki linki ayırmak için.

Kabul kriterleri

# Kriter Durum Nasıl doğrulandı
1 Sihirbaz açılışında sihirbaz_adim{adim:1} tam bir kez düşer; 1→2→1→2'de tekrar düşmez ✔ (koddan çıkarım) Modal Dialog/DialogContent içinde, forceMount yok → kapanınca SihirbazAdimlar unmount oluyor; adim bileşenin iç state'i, adım değişimi unmount etmiyor → boş bağımlılıklı useEffect bir kez koşuyor. Ek olarak olayBirKez sessionStorage anahtarıyla (kolaytercih.olay.sihirbaz_adim.adim1) oturum başına tekilleştiriyor; bu aynı zamanda dev StrictMode'un çift effect'ini ve hero-formdaki key={sira-tur} remount'unu da kapatıyor. Tarayıcıda çalıştırılarak doğrulanmadı (vardiya kuralı: dev sunucusu/tarayıcı yok).
2 14 /paket linkinin 14'ünde ?kaynak= var ve değerler tekil ✔ grep -rn 'href="/paket' src | grep -v 'kaynak=' → boş. 10 yeni değerin hepsi birbirinden ve mevcut 3 değerden farklı. Uyarı: listem-govde.tsx:288 ve :369 ikisi de eskiden beri kaynak=kilit (iki ayrı kilit yüzeyi, tek değer) — bu benim paketimde değil, aşağıda not olarak duruyor.
3 Hiçbir görsel değişiklik yok ✔ git diff: dokunulan satırlar yalnız yorum, href string'i ve null döndürmeyen hiçbir JSX eklemeyen bir useEffect. Hiçbir className, metin, ikon, düzen değişmedi.
4 Commit mesajında seri kırılması notu ✔ Commit gövdesinde; ayrıca sihirbaz-adimlar.tsx içindeki yorumda da duruyor (analist koda bakınca da görsün).
5 tsc --noEmit + lint temiz ✔ pnpm exec next typegen && pnpm exec tsc --noEmit → çıktı yok; pnpm lint → çıktı yok. pnpm build iş tanımında istenmediği için koşulmadı.

Şartnameden sapmalar

1 sapma — src/features/odeme/components/paket-gorunum-olayi.tsx (şartnamedeki dosya listesinde yok).

/paket görüntülenmesini ölçen bileşen ?kaynak= değerini bir allowlist'ten süzüyor; listede olmayan her değer "diger"e düşüyor (serbest metnin analitiğe sızmaması için, doğru bir koruma). Allowlist bugün ["kilit", "kredi_bitti", "nav"] idi. Genişletilmeseydi eklediğim 10 kaynağın onu da panelde tek bir "diger" kovasında toplanacaktı — yani iş görünüşte biter, ölçüm deliği kapanmazdı. Bağımlılık kapanışı gereği aynı commit'e alındı. Dosya P1/P2/P3 paketlerinin kapsamında değil (CEO §3 kontrol edildi), bu yüzden çakışma beklemiyorum.

Başka sapma yok. Yeni olay adı eklenmedi (OlayAdi birliğine dokunulmadı), yeni ölçüm yüzeyi eklenmedi, rehber sayfalarına ölçüm eklenmedi.

Merge sonrası doğrulanması gerekenler

  1. Canlıda bir kez elle dene: sihirbazı aç → Rybbit'te sihirbaz_adim{adim:1} düşüyor mu; 2. adıma geç, geri dön, tekrar ilerle → adim:1 ikinci kez düşmemeli. (Lokal dev'de Rybbit script'i yüklenmiyor, bu yüzden burada doğrulanamadı.)
  2. Seri kırılması tarihi: analitik ajanı bu değişikliğin canlıya çıktığı tarihi sabit dipnot yapsın (CEO §6'daki istek). Merge tarihi değil, deploy tarihi.
  3. ?kaynak= değerleri panelde göründü mü: paket_goruntulendi olayında "diger" kovası bir süre sonra da kalabalıksa allowlist'te unutulmuş bir yüzey var demektir.
  4. /paket statik bir sayfa; query string eklenmesi ISR/önbellek davranışını değiştirmiyor (?kaynak=nav ve ?hata=token zaten vardı), ama yayın sonrası ilk /paket?kaynak=fiyat_paket isteğinde 200 dönüyor mu diye bakılabilir.

Bilal'den istenen

  1. Dalı incele ve merge et — gece/0922-olcum, 1 commit, 8 dosya, tamamı görünmez ölçüm; ~5 dk.
  2. paket-gorunum-olayi.tsx sapmasını onayla — şartnamede adı geçmiyordu ama onsuz iş işlevsiz kalıyordu; kabul edilmezse o dosyayı geri alıp 10 kaynağın "diger"e düşmesini kabul etmek gerekir; ~2 dk.
  3. Deploy tarihini not et — sihirbaz_adim serisinin kıyaslanamaz hale geldiği gün; ~1 dk.