From daa232c3c1242c8b387018c07ece32d6bd1d809b Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:17:29 +0300 Subject: [PATCH 1/8] =?UTF-8?q?fix(sonuc):=20bo=C5=9F=20harita=20ilk=20ekr?= =?UTF-8?q?an=C4=B1=20i=C5=9Fgal=20etmez?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Manuel liste boşken ManuelHarita placeholder yerine null döner. Boş gri alan /sonuc'un ilk ekranını kaplıyordu; ödeme öncesi ilk ekranda durması gereken şey tadımlık. İlk "+" ile liste dolunca harita kendiliğinden belirir, il geometrisi yine ancak o anda iner. Co-Authored-By: Claude Opus 5 --- .../liste/components/manuel-harita.tsx | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/features/liste/components/manuel-harita.tsx b/src/features/liste/components/manuel-harita.tsx index 4ab7fb8..0f9ddc2 100644 --- a/src/features/liste/components/manuel-harita.tsx +++ b/src/features/liste/components/manuel-harita.tsx @@ -64,20 +64,11 @@ export function ManuelHarita() { }; }, [liste]); - // Liste boşken 197 KB'lık il geometrisi hiç inmesin: aynı oranlı - // placeholder alanı rezerve eder, ilk eklemede lazy harita yerine oturur. - if (liste.length === 0) { - return ( -
-
-

- Tablodan + ile ekledikçe üniversiteler - haritada belirir. -

-
-
- ); - } + // Liste boşken hiç yer tutulmaz: boş harita /sonuc'un ilk ekranını işgal + // ediyordu, oysa ödeme öncesi ilk ekranda durması gereken şey tadımlık. + // İlk "+" ile liste dolunca harita kendiliğinden belirir; 197 KB'lık il + // geometrisi yine ancak o anda iner (TercihHaritasiLazy zaten `dynamic`). + if (liste.length === 0) return null; return (
From 552d5ce5f1d354bd42b59c9e6030482787bacbe6 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:17:57 +0300 Subject: [PATCH 2/8] =?UTF-8?q?fix(sonuc):=20tad=C4=B1ml=C4=B1k=20tablonun?= =?UTF-8?q?=20=C3=BCst=C3=BCne=20al=C4=B1n=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Yeni sıra: ManuelHarita -> TadimlikBolumu -> SonucProgramTablosu. Tadımlık ödeme öncesi gösterebildiğimiz tek gerçek önizleme; tablonun ~1.500 px altında değil ilk ekranda durmalı. Props ve bileşen içleri değişmedi. Tadımlık
'ına first:mt-0: harita boş durumda null döndüğü için bu bölüm main'in ilk DOM çocuğu olabiliyor, main'in py-12'si yeterli. Co-Authored-By: Claude Opus 5 --- src/app/sonuc/page.tsx | 26 +++++++++++-------- .../rapor/components/tadimlik-satiri.tsx | 6 ++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/app/sonuc/page.tsx b/src/app/sonuc/page.tsx index e41766d..646a943 100644 --- a/src/app/sonuc/page.tsx +++ b/src/app/sonuc/page.tsx @@ -97,15 +97,23 @@ export default function SonucPage({ return (
- {/* Sayfa hiyerarşisi: önce Türkiye haritası, sonra liste. Manuel - liste store'una abone olduğundan tablodan "+" ile eklenenler - buraya canlı yansır. */} + {/* Sayfa hiyerarşisi: manuel listenin haritası (yalnız liste + doluyken) → tadımlık → ham tablo. Tadımlık, ödeme öncesi + gösterebildiğimiz TEK gerçek önizleme olduğu için tablonun + üstünde, ilk ekranda durur; harita ise ancak kullanıcı + tablodan "+" ile bir şey ekledikten sonra anlam taşır, o yüzden + boş durumda hiç render edilmez (bkz. manuel-harita.tsx). Liste + store'una abone olduğundan eklenenler buraya canlı yansır. */} - {/* Yapay Zeka'dan bağımsız ham tablo — haritanın hemen altında, - sayfanın ana gövdesi; puan türü navbar'daki sıralama - rozetinden değiştirilir. Sihirbaz seçimleri (il, devlet/ - vakıf) profil çerezinden tabloya uygulanır. */} + {/* Girişsiz tadımlık: gerçek rapor satırı formatında tek örnek. + Havuzda içerik yoksa bileşen hiç render edilmez. */} + + + {/* Yapay Zeka'dan bağımsız ham tablo — sayfanın ana gövdesi; + puan türü navbar'daki sıralama rozetinden değiştirilir. + Sihirbaz seçimleri (il, devlet/vakıf) profil çerezinden + tabloya uygulanır. */} - {/* Girişsiz tadımlık: gerçek rapor satırı formatında tek örnek. - Havuzda içerik yoksa bileşen hiç render edilmez. */} - - {/* Sihirbaz akışı (CTA + modal) — üretim ve liste /listem'de yaşar, burada yalnızca funnel kartları render edilir */} + // first:mt-0 — /sonuc'ta manuel liste boşken ManuelHarita null döndüğü + // için bu
main'in gerçek ilk DOM çocuğu olabiliyor (JSX + // yorumları düğüm üretmez); o durumda main'in py-12'si tek başına yeterli + // üst boşluğu verir. Harita görünürken mt-16 aynen çalışır. +
Yapay zekâdan örnek satır

From 53114590730ffddc8bf5bd922b8de588e5b2566c Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:18:22 +0300 Subject: [PATCH 3/8] =?UTF-8?q?refactor(sihirbaz):=20listemUretHref=20tek?= =?UTF-8?q?=20kayna=C4=9Fa=20ta=C5=9F=C4=B1n=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Yerel fonksiyon sihirbaz-sabitler.ts'e (sonucHref'in yanına) taşındı ve export edildi; `uret=1` parametre sırası sözleşmesinin yorumu da onunla gitti. Davranış birebir aynı — tadımlık CTA'sı da aynı hedefi kullanacağı için literal kopyanın dördüncü kez çoğalması engellendi. Co-Authored-By: Claude Opus 5 --- .../sihirbaz/components/sihirbaz-cagri-karti.tsx | 12 +++--------- src/features/sihirbaz/sihirbaz-sabitler.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx b/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx index 43837b8..5777d3c 100644 --- a/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx +++ b/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx @@ -11,20 +11,14 @@ import { PixelField } from "@/components/pixel-decor"; import { useGorunumOlayi } from "@/components/use-gorunum-olayi"; import { olay, olayBirKez, siraKovasi } from "@/lib/analitik"; import type { SihirbazFacetleri } from "@/types/yokatlas"; -import { SIHIRBAZ_AC_EVENT, SIHIRBAZ_STORAGE_KEY, sihirbazDogrula, type SihirbazSecimleri } from "@/features/sihirbaz/sihirbaz-sabitler"; +import { listemUretHref, SIHIRBAZ_AC_EVENT, SIHIRBAZ_STORAGE_KEY, sihirbazDogrula, type SihirbazSecimleri } from "@/features/sihirbaz/sihirbaz-sabitler"; import { tercihProfiliYaz } from "@/features/sihirbaz/sihirbaz-profil"; import { SihirbazModal } from "./sihirbaz-modal"; // Üretim /listem'de koşar (bkz. listem/liste-uretici.tsx); sihirbaz // tamamlanınca seçimler storage'a yazılıp kullanıcı buraya yönlendirilir. -// `kaynak` denemenin hangi yüzeyden başladığını ölçer (bkz. -// rapor/components/uretim-basladi-olayi.tsx — izinli değerler orada). -// `uret=1` HER ZAMAN ilk parametre kalmalı: giris-karti.tsx:31 funnel -// metnini `callbackURL.startsWith("/listem?uret=1")` ile seçiyor, sıra -// bozulursa girişteki "Seçimlerin hazır" metni kaybolur. -function listemUretHref(kaynak: string) { - return `/listem?uret=1&kaynak=${kaynak}`; -} +// Hedef URL'i `listemUretHref` kurar (sihirbaz-sabitler.ts) — `uret=1` +// parametre sırası sözleşmesi ve izinli `kaynak` değerleri orada yazılı. // SSR'da false, client'ta true — storage'a ancak mount sonrası dokunuruz const bosAbone = () => () => {}; diff --git a/src/features/sihirbaz/sihirbaz-sabitler.ts b/src/features/sihirbaz/sihirbaz-sabitler.ts index 2b9ac6a..896a850 100644 --- a/src/features/sihirbaz/sihirbaz-sabitler.ts +++ b/src/features/sihirbaz/sihirbaz-sabitler.ts @@ -168,6 +168,20 @@ export function sonucHref(ekstra?: Record): string { return `/sonuc?${new URLSearchParams(girdiler)}`; } +/** + * Üretimin koştuğu /listem URL'i. `kaynak` denemenin hangi yüzeyden + * başladığını ölçer (izinli değerler: + * rapor/components/uretim-basladi-olayi.tsx — yeni yüzeyi önce oraya ekle). + * + * `uret=1` HER ZAMAN ilk parametre kalmalı: giris-karti.tsx funnel metnini + * `callbackURL.startsWith("/listem?uret=1")` ile seçiyor, sıra bozulursa + * girişteki "Seçimlerin hazır" metni sessizce kaybolur. Bu sözleşmenin + * literal kopyası çoğalmasın diye tek kaynak burası. + */ +export function listemUretHref(kaynak: string): string { + return `/listem?uret=1&kaynak=${kaynak}`; +} + /** Prompt'a enjekte edilecek Türkçe özet. */ export function secimOzeti(secimler: SihirbazSecimleri): string { const satirlar = [ From 72ef3b86695f937ed632acebeb9a78131b3dca8f Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:18:45 +0300 Subject: [PATCH 4/8] =?UTF-8?q?fix(tadimlik):=20CTA=20giri=C5=9Ften=20d?= =?UTF-8?q?=C3=B6n=C3=BC=C5=9Fte=20=C3=BCretimi=20ba=C5=9Flat=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tadımlık CTA'sının giriş callback'i sonucHref() yerine listemUretHref("tadimlik") — kullanıcı /sonuc'a geri bırakılmak yerine üretimin koştuğu /listem'e iner, liste ek tık olmadan başlar. "tadimlik" IZINLI_KAYNAKLAR'a eklendi, yoksa ölçüm "bilinmiyor"a düşerdi. Ayrıca tadimlik_goruntulendi'nin üstüne seri kırılması notu: olay bugüne kadar sayfanın ~2.200 px altında yaşıyordu, bundan sonra ilk ekranda — iki dönem karşılaştırılamaz. Co-Authored-By: Claude Opus 5 --- src/features/rapor/components/tadimlik-satiri.tsx | 13 +++++++++++-- .../rapor/components/uretim-basladi-olayi.tsx | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/features/rapor/components/tadimlik-satiri.tsx b/src/features/rapor/components/tadimlik-satiri.tsx index 9ea5c6c..d09ca98 100644 --- a/src/features/rapor/components/tadimlik-satiri.tsx +++ b/src/features/rapor/components/tadimlik-satiri.tsx @@ -25,7 +25,7 @@ import { useGorunumOlayi } from "@/components/use-gorunum-olayi"; import { olay, siraKovasi } from "@/lib/analitik"; import { dilimdenRisk, riskHesapla } from "@/lib/risk"; import { turkishSlugify } from "@/lib/slug"; -import { PROFIL_DEGISTI_EVENT, sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler"; +import { listemUretHref, PROFIL_DEGISTI_EVENT } from "@/features/sihirbaz/sihirbaz-sabitler"; import { tercihProfiliOku } from "@/features/sihirbaz/sihirbaz-profil"; import type { TadimlikSatir, TadimlikTip } from "@/lib/tadimlik-havuzu"; @@ -97,6 +97,13 @@ export function TadimlikSatiri({ return () => window.removeEventListener(PROFIL_DEGISTI_EVENT, guncelle); }, [sira, tur, ilk]); + // SERİ KIRILMASI (22 Eyl 2026): bu olay bu değişiklikten önce /sonuc'un + // ~2.200 px altında, tablonun arkasında yaşıyordu; artık tadımlık ilk + // ekranda. Adet bir gecede 0'dan yukarı fırlayacak — kırık ölçüm değil, + // kazanılan payda. Öncesi ve sonrası KARŞILAŞTIRILAMAZ; anlamlı ölçüt + // bundan sonra "tadımlık CTA tıklaması / tadımlık görüntülenmesi" oranıdır. + // (Not analitik.ts'e değil buraya yazıldı: o dosya aynı gece başka bir + // dalın altında — CTO şartnamesi, çakışma kararı #1.) const gorunumRef = useGorunumOlayi("tadimlik_goruntulendi", { kova: siraKovasi(sira), }); @@ -108,7 +115,9 @@ export function TadimlikSatiri({ const seri = raporSiraSerisi(p.siraGecmisi, p.ilkYil); const taban = p.efektifSira ?? programEtkinSira(seri); const devlet = p.unitur === "DEVLET"; - const girisUrl = `/giris?callback=${encodeURIComponent(sonucHref())}`; + // Giriş dönüşü kullanıcıyı /sonuc'a geri bırakmaz: callback doğrudan + // üretimin koştuğu /listem'e iner, liste ek tık olmadan orada başlar. + const girisUrl = `/giris?callback=${encodeURIComponent(listemUretHref("tadimlik"))}`; return ( // first:mt-0 — /sonuc'ta manuel liste boşken ManuelHarita null döndüğü diff --git a/src/features/rapor/components/uretim-basladi-olayi.tsx b/src/features/rapor/components/uretim-basladi-olayi.tsx index 9215dfb..f0ff05c 100644 --- a/src/features/rapor/components/uretim-basladi-olayi.tsx +++ b/src/features/rapor/components/uretim-basladi-olayi.tsx @@ -29,6 +29,8 @@ const IZINLI_KAYNAKLAR = new Set([ "giris_donusu", "bos_durum", "odeme_sonrasi", + // /sonuc'taki girişsiz tadımlık CTA'sı (tadimlik-satiri.tsx). + "tadimlik", // /sonuc'ta ?sihirbaz=1 ile otomatik başlayan üretimin gerçek yüzeyleri. // Eskiden hepsi "giris_donusu" sayılıyordu (güvenlik denetimi G3). "hero", From 2373a9a52666a0feda6638bf0e4bd20b03487294 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:18:57 +0300 Subject: [PATCH 5/8] =?UTF-8?q?content(tadimlik):=20teslim=20edilmeyen=20"?= =?UTF-8?q?24=20sat=C4=B1r=C4=B1n=20tamam=C4=B1"=20iddias=C4=B1=20kalkar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maske girişsiz kullanıcıya 24 satırın tamamını değil yalnız ilk birkaçının analizini açıyor (rapor-maske.ts); "5 deneme kredin hazır" da butonun götürdüğü yerin sözü değil. Buton metni yeni vaat eklemeden yanlış olanı bırakıyor: "Giriş yap ve listeni oluştur". Kanonik sağ ok yerinde duruyor. Üstteki "Bu, 24 satırlık Yapay Zeka listenden yalnızca bir örnek." cümlesi doğru olduğu için değişmedi — üretilen liste gerçekten 24 satır. Co-Authored-By: Claude Opus 5 --- src/features/rapor/components/tadimlik-satiri.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/features/rapor/components/tadimlik-satiri.tsx b/src/features/rapor/components/tadimlik-satiri.tsx index d09ca98..c263e91 100644 --- a/src/features/rapor/components/tadimlik-satiri.tsx +++ b/src/features/rapor/components/tadimlik-satiri.tsx @@ -196,7 +196,10 @@ export function TadimlikSatiri({ href={girisUrl} onClick={() => olay("giris_cta_tiklandi", { kaynak: "tadimlik" })} > - 24 satırın tamamı için giriş yap — 5 deneme kredin hazır + {/* Buton metni listenin tamamını vaat etmez: maske girişsiz + kullanıcıya 24 satırdan yalnız ilk birkaçının analizini + açıyor (rapor-maske.ts), gerisi teslim edilmiyor. */} + Giriş yap ve listeni oluştur From d2e11908ba6b4f01423131bf76aab3d9ef628858 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 02:19:57 +0300 Subject: [PATCH 6/8] =?UTF-8?q?[Bilal]=20content(tadimlik):=20CTA'n=C4=B1n?= =?UTF-8?q?=20yeni=20vaadi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ÖNERİ — tek başına düşürülebilir (git reset --hard HEAD~1). Bir önceki commit yalnız yanlış iddiayı kaldırdı ve kendi başına tutarlı; bu commit CTA'ya yeni bir cümle öneriyor, karar Bilal'in. Buton: "Giriş yap ve listeni oluştur" -> "Kendi listemi oluştur" Alt satır: "· Giriş sonrası liste hemen üretilir" eklenir. Sayı YOK ve bilerek: ACIK_SATIR (rapor-maske.ts, server-only) ve DENEME_KREDISI (credits.ts, appdb import ediyor) bu "use client" dosyaya import edilemez; elle "3"/"5" yazmak tek kaynak kuralını bozar. Co-Authored-By: Claude Opus 5 --- src/features/rapor/components/tadimlik-satiri.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/rapor/components/tadimlik-satiri.tsx b/src/features/rapor/components/tadimlik-satiri.tsx index c263e91..39e3918 100644 --- a/src/features/rapor/components/tadimlik-satiri.tsx +++ b/src/features/rapor/components/tadimlik-satiri.tsx @@ -185,7 +185,8 @@ export function TadimlikSatiri({

Bu, 24 satırlık Yapay Zeka listenden yalnızca bir örnek. - Kredi kartı gerekmez · Google ya da e-posta ile 30 saniyede + Kredi kartı gerekmez · Google ya da e-posta ile 30 saniyede · + Giriş sonrası liste hemen üretilir

From e9126650c398d6caba18db6f55f781839a6f9e5a Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 23:20:34 +0300 Subject: [PATCH 7/8] =?UTF-8?q?fix(sonuc):=20harita=20tablonun=20alt=C4=B1?= =?UTF-8?q?na=20al=C4=B1n=C4=B1r=20=E2=80=94=20hidrasyon=20kaymas=C4=B1=20?= =?UTF-8?q?kapan=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Liste store'unun sunucu snapshot'ı her zaman boş liste döner (liste-store.ts:86), kayıtlı manuel liste ancak hidrasyondan sonra okunur. Harita sayfanın tepesindeyken kayıtlı listesi olan dönüş ziyaretçisinde ~368 px yüksekliğinde sonradan beliriyor ve tadımlık ile tabloyu aşağı itiyordu; main'in ilk çocuğu olduğu için impact fraction ~1, CLS eşiğinin çok üstü. Silinen placeholder bunu yeri sunucuda rezerve ederek engelliyordu. Harita tablonun altına alındı: sonradan belirdiğinde yalnızca sihirbaz ile dipnotu iter, ikisi de katlanın altında. Bilgi mimarisi olarak da doğru sıra — harita, tablodan kurulan listenin görselleştirmesi. Yeni sıra: tadımlık → tablo → harita → sihirbaz → dipnot. Sıraya bağlı stiller yeni sıraya göre doğrulandı: tadımlığın first:mt-0'ı artık her durumda geçerli (üstünde kardeş kalmadı), harita kendi mt-16'sını alıyor (tablo section'ı ve sihirbaz kartlarıyla aynı ritim — eskiden üst boşluğu main'in py-12'sinden geliyordu). Bulgu: 36-tasarimci-g1-ve-navbar.md B1. Co-Authored-By: Claude Opus 5 --- src/app/sonuc/page.tsx | 25 +++++++++++++------ .../liste/components/manuel-harita.tsx | 6 ++++- .../rapor/components/tadimlik-satiri.tsx | 9 ++++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/app/sonuc/page.tsx b/src/app/sonuc/page.tsx index 646a943..b30fe24 100644 --- a/src/app/sonuc/page.tsx +++ b/src/app/sonuc/page.tsx @@ -97,14 +97,21 @@ export default function SonucPage({ return (
- {/* Sayfa hiyerarşisi: manuel listenin haritası (yalnız liste - doluyken) → tadımlık → ham tablo. Tadımlık, ödeme öncesi - gösterebildiğimiz TEK gerçek önizleme olduğu için tablonun - üstünde, ilk ekranda durur; harita ise ancak kullanıcı - tablodan "+" ile bir şey ekledikten sonra anlam taşır, o yüzden - boş durumda hiç render edilmez (bkz. manuel-harita.tsx). Liste - store'una abone olduğundan eklenenler buraya canlı yansır. */} - + {/* Sayfa hiyerarşisi: tadımlık → ham tablo → manuel listenin + haritası. Tadımlık, ödeme öncesi gösterebildiğimiz TEK gerçek + önizleme olduğu için ilk ekranda durur. + + Harita neden TABLONUN ALTINDA: liste store'unun sunucu + snapshot'ı her zaman boş liste döner (liste-store.ts), kayıtlı + liste ancak hidrasyondan sonra okunur. Harita yukarıda olsaydı + dönüş ziyaretçisinde sayfa açıldıktan saniyeler sonra ~368 px + yüksekliğinde belirip tadımlığı ve tabloyu aşağı itecekti + (impact fraction ~1, CLS eşiğinin çok üstü). Aşağıda belirince + yalnızca sihirbaz ile dipnotu iter, ikisi de katlanın altında. + Bilgi mimarisi olarak da doğru sıra: harita, tablodan kurulan + listenin görselleştirmesidir. Liste boşken hiç render edilmez + (bkz. manuel-harita.tsx); store'a abone olduğu için tablodan + "+" ile eklenenler buraya canlı yansır. */} {/* Girişsiz tadımlık: gerçek rapor satırı formatında tek örnek. Havuzda içerik yoksa bileşen hiç render edilmez. */} @@ -121,6 +128,8 @@ export default function SonucPage({ uniturGrubu={uniturGrubu} /> + + {/* Sihirbaz akışı (CTA + modal) — üretim ve liste /listem'de yaşar, burada yalnızca funnel kartları render edilir */} 'ı ve sihirbaz + // kartları da mt-16 kullanır. Eskiden main'in ilk çocuğu olduğu için üst + // boşluğu main'in py-12'sinden alıyordu, kendi margin'i yoktu. return ( -
+
main'in gerçek ilk DOM çocuğu olabiliyor (JSX - // yorumları düğüm üretmez); o durumda main'in py-12'si tek başına yeterli - // üst boşluğu verir. Harita görünürken mt-16 aynen çalışır. + // first:mt-0 — /sonuc'ta bu
main'in ilk DOM çocuğudur (harita + // artık tablonun altında, üstte hiçbir kardeş yok; JSX yorumları düğüm + // üretmez): main'in py-12'si tek başına yeterli üst boşluğu verir. + // Tadımlığın render edilmediği durumlarda (girişli kullanıcı, boş havuz) + // bu bileşen hiç dönmediği için kural ilk gerçek bölüme geçer.
Yapay zekâdan örnek satır From e3519a50ccee55fa3dccd2fc13eac260a6b24c62 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 23:21:31 +0300 Subject: [PATCH 8/8] =?UTF-8?q?[Bilal]=20content(tadimlik):=20paragraf=20m?= =?UTF-8?q?askenin=20ger=C3=A7e=C4=9Fini=20s=C3=B6yler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Buton "24 satırın tamamı" iddiasından arındırılmıştı (2373a9a) ama iki eleman yukarıdaki paragraf aynı vaadi sürdürüyordu: "24 tercihlik listenin her satırı bu formatta kurulur". Maske girişsiz/paketsiz kullanıcıya 3 satır açıyor (rapor-maske.ts:12 ACIK_SATIR), kalan 21'in gerekçe/risk/trend metni maskeli geliyor. Cümleye "ilk üçü hemen açılır" eklendi — sayı yazıldı, bulanıklaştırma ve garanti dili yok. "3" elle yazıldığı için (ACIK_SATIR `server-only`, bu dosya "use client") tek kaynak bağı koda yorum olarak iliştirildi. Bulgu: 36-tasarimci-g1-ve-navbar.md B2. Metin yönü Bilal'in. Co-Authored-By: Claude Opus 5 --- src/features/rapor/components/tadimlik-satiri.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/features/rapor/components/tadimlik-satiri.tsx b/src/features/rapor/components/tadimlik-satiri.tsx index 5c5d7b3..7caa8ec 100644 --- a/src/features/rapor/components/tadimlik-satiri.tsx +++ b/src/features/rapor/components/tadimlik-satiri.tsx @@ -131,9 +131,16 @@ export function TadimlikSatiri({

Yapay zekâ listendeki her satırı böyle anlatır

+ {/* "ilk üçü" = rapor-maske.ts içindeki ACIK_SATIR (3). O dosya + `server-only`, bu dosya "use client" — sabit buraya import + edilemiyor, sayı elle yazıldı. ACIK_SATIR değişirse bu cümle de + aynı commit'te değişmeli. Cümle kasten "her satır bu formatta + kurulur"u sınırlıyor: maske girişsiz/paketsiz kullanıcıya 3 satır + açıyor, kalan 21'in gerekçe/risk/trend metni maskeli geliyor. */}

Sıralamana uygun bir programın gerekçesi, yerleşme riski ve taban - trendi — 24 tercihlik listenin her satırı bu formatta kurulur. + trendi — 24 tercihlik listenin her satırı bu formatta kurulur, ilk + üçü hemen açılır.