From 58f4dc221b160027503385d28f60e6314a10bf48 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Wed, 23 Sep 2026 00:48:24 +0300 Subject: [PATCH] =?UTF-8?q?fix(olcum):=20huninin=20paydas=C4=B1=20ile=20pa?= =?UTF-8?q?y=C4=B1=20ayn=C4=B1=20birimde=20olsun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Denetim Y1: `sihirbaz_adim{1}` `olayBirKez` ile oturum başına tekildi, `{2}`/`{3}` ise her ileri geçişte atılıyor. Sihirbazı ikinci kez açan öğrencide (ör. /sonuc'ta "Tercihlerini güncelle") payda 1'de kalıp pay 2 olduğu için 1→2 geçiş oranı %200 görünüyordu. `olayBirKez` → `olay`; mount zaten "sihirbaz bir kez açıldı"ya eşit, 1→2→1→2 gezinmesi unmount etmediği için tekrar düşmez. Kodun kendi yazılı kuralı bunu zaten söylüyordu (lib/analitik.ts:22-24, `liste_uretim_basladi`): aynı oturumdaki ikinci deneme de sayılmalı, yoksa payda başarıdan küçük kalır. KABUL KRİTERİ DÜZELTMESİ: CEO kararı P4/(1) "sihirbaz açılışında tam bir kez düşer, 1→2→1→2 gidip gelmede tekrar düşmez" diyordu. Denetim bu kriterin mevcut olay sözleşmesiyle çeliştiğini gösterdi; geçerli kriter artık "her sihirbaz AÇILIŞINDA bir kez düşer" — oturum içindeki ikinci açılış da sayılır. 1→2→1→2 gezinmesinde tekrar düşmeme şartı korunuyor. SERİ KIRILMASI (ikinci, daha önce yazılmamıştı): `paket_goruntulendi` allowlist'i 3'ten 13 değere çıktığı için tekilleştirme anahtarı çeşitlendi — olayın oturum başına atılabilme tavanı 4'ten 14'e çıktı ve "diger" kovası artık yalnız gerçekten bilinmeyen yüzeyleri taşıyor. Bu tarihten önceki/sonraki toplamlar karşılaştırılamaz. Kod değişmedi, yalnız dosyaya not düşüldü. Co-Authored-By: Claude Opus 5 --- .../odeme/components/paket-gorunum-olayi.tsx | 6 ++++++ .../sihirbaz/components/sihirbaz-adimlar.tsx | 13 +++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/features/odeme/components/paket-gorunum-olayi.tsx b/src/features/odeme/components/paket-gorunum-olayi.tsx index b95334b..032ed8b 100644 --- a/src/features/odeme/components/paket-gorunum-olayi.tsx +++ b/src/features/odeme/components/paket-gorunum-olayi.tsx @@ -13,6 +13,12 @@ import { olayBirKez } from "@/lib/analitik"; // Serbest metin analitiğe sızmasın: bilinmeyen değerler "diger"e düşer. // Yeni bir /paket linki eklerken değerini önce buraya yaz, sonra href'e koy — // listede olmayan her kaynak "diger"e düşer ve yüzey görünmez kalır. +// +// SERİ KIRILMASI: liste 3'ten 13 değere çıktığı için tekilleştirme anahtarı +// da (aşağıda `kaynak`) çeşitlendi; `paket_goruntulendi`nin oturum başına +// atılabilme tavanı 4'ten 14'e çıktı ve "diger" kovası artık yalnız gerçekten +// bilinmeyen yüzeyleri taşıyor (eskiden 10 bilinen yüzey de oradaydı). +// Bu tarihten önceki/sonraki toplamlar ve "diger" payı karşılaştırılamaz. const KAYNAKLAR = [ // Kilitli liste satırı / kilit kartı (`listem-govde`) "kilit", diff --git a/src/features/sihirbaz/components/sihirbaz-adimlar.tsx b/src/features/sihirbaz/components/sihirbaz-adimlar.tsx index 92b38fa..71ca9fd 100644 --- a/src/features/sihirbaz/components/sihirbaz-adimlar.tsx +++ b/src/features/sihirbaz/components/sihirbaz-adimlar.tsx @@ -18,7 +18,7 @@ import { Button } from "@/components/ui/button"; import { IlSecimHaritasi } from "./il-secim-haritasi"; import { normalizeIlAdi } from "@/lib/harita"; import { onbellekliJsonGetir } from "@/lib/istek-cache"; -import { olay, olayBirKez } from "@/lib/analitik"; +import { olay } from "@/lib/analitik"; import { trBaslikDuzeni } from "@/lib/slug"; import type { SihirbazFacetleri } from "@/types/yokatlas"; import { ONCELIKLER, UNIVERSITE_TIPI_ETIKET, type SihirbazSecimleri, type UniversiteTipi } from "@/features/sihirbaz/sihirbaz-sabitler"; @@ -146,13 +146,18 @@ export function SihirbazAdimlar({ // hiç düşmüyordu — payda `sira_girildi`den türetilmek zorunda kalıyordu. // Modal kapanınca bileşen unmount olduğu için mount = "1. adım görüldü"; // 1→2→1→2 gidip gelmek unmount etmediğinden tekrar tetiklenmez. - // `olayBirKez` oturum başına da tekilleştirir: aynı sekmede sihirbazı - // ikinci kez açmak paydayı şişirmez (bkz. lib/analitik.ts). + // + // Bilerek `olayBirKez` KULLANILMAZ (bkz. lib/analitik.ts:22-24, aynı kural + // `liste_uretim_basladi` için yazılı): `:220`'deki ileri geçiş olayı + // (`adim:2`, `adim:3`) her geçişte atılıyor. Paydayı oturum başına tekil + // yapsaydık sihirbazı ikinci kez açan öğrencide pay 2, payda 1 kalır ve + // 1→2 geçiş oranı %100'ü aşardı. Payda ile pay aynı birimde olmalı: + // sihirbaz her açıldığında `adim:1` de düşer. // // SERİ KIRILMASI: bu satırın canlıya çıktığı tarihten önce `sihirbaz_adim` // serisinde `adim:1` hiç yok; öncesi/sonrası karşılaştırılamaz. useEffect(() => { - olayBirKez("sihirbaz_adim", { adim: 1 }, "adim1"); + olay("sihirbaz_adim", { adim: 1 }); }, []); const [facetYukleniyor, setFacetYukleniyor] = useState(false);