Form token üretir, sunucu aksiyonu Cloudflare'e doğrulatır. Betik metin
alanına ilk odaklanışta yüklenir; onay kutusu yalnız Cloudflare elle onay
istediğinde görünür. TURNSTILE_SITE_KEY / TURNSTILE_SECRET_KEY çağrı anında
okunur; biri eksikse koruma kapalıdır. Gizlilik ve çerez metinleri
sağlayıcıyı anacak şekilde güncellendi.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Logonun üç karesi içerikteki kart alanlarına (kontenjan, netler, istihdam)
uçup onların boyuna büyür; kart kareden belirir. Başlık ilk andan görünür.
Hedefi olmayan kare olduğu yerde söner.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sohbetten liste revizyonu ve sınırın kalkması, varyant etiketleri, doğrulanan
rehber bağlantıları, ana ekrana ekleme; arayüz balonunda altı madde.
"Şu anki sürüm" etiketi artık 2.0.0 satırında görünür (SURUM = package.json).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9–10 Ekim oturumlarının commit'lenmemiş işi tek parça alındı
(raporlar: docs/ekip-raporlari/2026-10-09, 2026-10-10):
- Landing deneyim dili 1. dalga: sayfa geçişi (ViewTransition), piksel morf/şerit,
sorun sahneleri, adım akışı, sayan sayı, mobil menü, adım göstergesi, logoya tepki;
DESIGN.md §11 ve AGENTS.md kuralları, tasarım denetimine yeni kurallar
- Tema: tema ikonu, D kısayolu, tema geçişi
- PWA: manifest.ts ve ikonlar
- Danışman: revizyon niyet modeli (OPENROUTER_NIYET_MODEL), sohbet geçmişi, soru API'si
- /listem ve /sonuc tadımlığı bileşen denetimi düzeltmeleri
- eslint: .venv-tts/ yok sayılır
tsc, eslint ve tasarım denetimi sıfır hata.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Revizyon sohbet modelinin gönüllü liste_revize araç seçimine bağlıydı
(8 Eki eval: 8 istekte 5 çağrı, 3 sahte beyan; tool_choice required
OpenRouter'da 80-112 sn). Şimdi:
- Niyet kodda: revizyonNiyetiVar (regex) + paketli → lib/ai/revizyon-niyeti.ts
yapılandırılmış çıkarım (yapilandirilmisUret, json_schema; eski liste_revize
parametre şeması ve revizyonKuraliKur aynen yeniden kullanılır, kopya yok).
Model niyetModeli() (OPENROUTER_NIYET_MODEL, yoksa rapor modeli), 20 sn,
OpenInference bu çağrıda atlanır (11-12,5 sn ölçüldü).
- Dallanma kodda: kural geçerli → listeRevizeKoddan (paket/kilit/kredi kapıları
aynı); kural eksik → soru formu koddan (modelin formu kod doğrular, yoksa
varsayılan form); niyet soru/diger → normal sohbet; çıkarım başarısız →
koddan "okuyamadım" cevabı + kredi iadesi (normal sohbete düşünce model
uydurma adlarla "kurdum" yazıyordu).
- Cevap da kodda: revizyon/form turunda model hiç çağrılmaz; sayı ve program
adları sunucu sonucundan şablonla (sabitCevap). Model sonuç önündeyken
dağılımı 8'de 2 yanlış yazdı. Ekrana eski araç parçaları (tool-liste_revize /
tool-soru_sor) aynen gider; istemci ve kayıt değişmez. Başarısız revizyon
artık ekranda "kuramadım" hapı (output-error).
- liste_revize modelin araç listesinden çıktı; prompt revizyon bölümü
"kurdum deme, net istek iste ya da soru_sor" diye sadeleşti.
- Güvenlik ağı: beyan regex'i kaldı; beyan var + revizyon yok → not + mesajın
sohbet kredisi iade (grantCredits refund, refId=mesajId, idempotent), not
bunu söyler. liste-revizyon iade refId'si "<mesajId>:revizyon" oldu:
(reason, refId) tekilliği sohbet iadesiyle çakışıyordu.
- Geçmiş penceresi: "[Araç kaydı: …]" etiketi modelce kopyalanıyordu;
yerine doğal tek cümle.
- Kaldırıldı: ilkAdimAracZorunlu / SOHBET_REVIZYON_ARAC_ZORUNLU.
Ölçüm (deepseek-v4-flash @ openrouter, pnpm eval:revizyon): koddan revizyon
8/8, kural doğru 8/8, sahte beyan 0, 10/10; revizyon turu 1 küçük çağrı
(ort. 1-3 sn, 0,00005 $) + liste üretimi; sohbet çağrısı yok.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Dev CTA bandı yerine başlık + metin alanı + buton; mesaj sunucu aksiyonuyla
destek kutusuna e-posta olarak gider (IP başına 10 dk'da 3). Başlığın başı
sabit, devamı bir kez daktilo gibi yazılır.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sıra: önce sayfa geçişi biter, kısa nefes (80 ms), sonra logo güneşe/aya
dönüşür; üst üste binmez. Geçiş iptal olsa da logo doğru biçime dönüşür.
- View Transitions olmayan tarayıcıda da logo dönüşür.
- DESIGN.md §4.22: logo biçim dönüşümü tasarım diline eklendi (biçim tablosu,
koreografi, kurallar); §6 hareket ve §7 Yap/Yapma satırları.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Logo morph'unda mavi kare yıldız olur, turuncu yıldızın yerinde söner;
seçici ikonunda tek mavi yıldız. Konum iki dairenin kesişim kirişinin orta
noktası (108,79). DESIGN §2.3 güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
İmleç logonun üzerindeyken tema değişirse döngü kesilir, kareler o an
neredeyse oradan güneşe/aya geçer; biçim bitince imleç hâlâ üzerindeyse
hover döngüsü yerinden yeniden başlar. DESIGN §2.3 notu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Geçişte logonun dönüştüğü biçimlerin durağan hâli (tema-ikonu.tsx): Açık
için güneş ve halesi, Koyu için hilal ve iki yıldız, Sistem için logonun üç
karesi. lucide Sun/Moon/Monitor seçiciden kalktı. DESIGN §2.3 güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Koyuya geçerken şeftali kare hilale (iç gölgeyle; zemin rengine bağlı değil),
mavi ve turuncu kareler iki yıldıza; açığa geçerken turuncu kare güneşe,
şeftali kare halesine dönüşür. Kısa bir an durup logoya toplanır (1,7 sn).
Yalnız header'daki logo; hover döngüsü biçimi keser. DESIGN §2.3 güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Piksel ızgarası sert bulundu (Bilal, 9 Eki 2026). Yeni tema radyal degrade
maskesiyle açılır: yarıçapın %55'i opak, kalanı tüy; 1100 ms yumuşak eğri.
Geçiş başlarken header'daki logonun kareleri bir etap yürüyüp yerine oturur
(kt-tema-gecis olayı). Tuval/maske karesi kodu kaldırıldı. DESIGN §2.3 güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sitenin piksel imzasının hareketli hâli: yeni tema header'daki logodan
başlar, kare ızgarası hâlinde dağınık bir ön yüzle ekrana yayılır; her kare
sırası gelince yumuşakça belirir (900 ms, --kt-tema-sure). View Transitions
+ küçük tuvalden üretilen, önbelleklenen maske kareleri; pixelated ile keskin.
Reduced-motion ve desteksiz tarayıcıda düz geçiş. DESIGN §2.3 güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kök neden (B1): chat_messages yalnız metin tutar; başarılı revizyonun kaydı
("revize ediyorum… Liste yenilendi… 1-5") araçsız cevapla aynı görünüyordu ve
model sonraki turda bu kalıbı taklit edip liste_revize çağırmadan "yenilendi"
yazıyor, program adlarını eski cevaptan kopyalıyordu (eval: 8 revizyon
isteğinde 1 çağrı, 5 sahte beyan). Metnin altına "[araç çağrıldı]" işareti
eklemek işe yaramadı — model işareti de kopyaladı.
- sohbet-gecmisi.kayitliMesajModelMetni: modele giden pencerede başarılı
revizyon turu kısa araç kaydına iner (meta.revizyon'dan), araçsız
"yenilendi" diyen tur (düzeltme notu olmayan eski kayıtlar dâhil) uydurma
listesiyle birlikte düşer; kayıt ve ekran değişmez. route.ts bunu kullanır.
- revizyonNiyetiVar + sohbet-akisi.ilkAdimAracZorunlu: niyet algılanınca ilk
adımda tool_choice "required". VARSAYILAN KAPALI
(SOHBET_REVIZYON_ARAC_ZORUNLU=1): ölçümde 7/8 çağrı, 0 sahte beyan verdi ama
OpenRouter isteği Baidu yerine OpenInference'a yönlendirdi, gecikme 1-7 sn →
80-112 sn, onlarca paralel araç çağrısı. Açmak Bilal'in kararı.
- danisman-prompt revizyon bölümü: 5 (geçmiş örnek değildir; önce aracı çağır)
ve 6 (soru formunda Türkçe karakter).
- cikti-denetimi REVIZE_BEYANI: "değişiklikler yapıldı", "artık … tercihin …
oluşuyor", "listeyi yeniden kurdum", "liste_revize çağrıldı" kalıpları.
- araclar.ts (B4): soru_sor açıklamasına Türkçe karakter kuralı; formdaki
ASCII'ye düşmüş il adları koddan düzelir (ilAdlariniDuzelt: Istanbul →
İstanbul, Eskisehir → Eskişehir; yalnız büyük harfle başlayan tam eşleşme).
- scripts/eval/revizyon-arac.ts (pnpm eval:revizyon): gerçek modelle 10
senaryo, liste_revize çağrı oranı + sahte beyan; liste_revize çalıştırılmaz
(mesajId yok). Sonuç dosyaları scripts/eval/sonuc/*-revizyon.json.
Kredi: değişmez. akis-denetim 9/9, revizyon-denetim 5/5, tsc ve lint temiz.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bilal'in kararı (9 Eki 2026): SVG maskeli yayılma şimdilik yok; tüm sayfa
tek parça crossfade ile geçer, mursela-nextjs'teki tema geçişiyle aynı
süre ve eğri (640 ms, cubic-bezier(0.6, 0, 0.2, 1)). motion bağımlılığı
ve maske değişkenleri tema-gecisi.ts'ten çıktı; DESIGN §2.3 notu güncel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model paketsiz cevapta "[[/paket](/paket)](/paket)" yazıyor, ekranda
köşeli parantezler ve "Paket (Paket)" kartı çıkıyordu (QA B3). Rehber
eşlemesinden önce aynı adresi iki kez saran bağlantı her adres için
düzleştirilir; akış tamponu `)`'den sonra `](` gelip gelmediğine bakar
(bir karakterlik bekleme), parça parça çıktı tek seferlikle aynı kalır.
baglanti-denetim'e iki senaryo: 56/56.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Tasarımcı B1/B3/B5 (7 Eki). Çekmece ikinci kez açılınca AcilisSahnesi
hazir=true ile monte oluyor, logo kareleri sayfa ekrana kaymadan oynuyor,
gövde ~1 s boş kalıyordu: `hazir` verilmiş bileşende sahne yalnız
false → true geçişinde oynar; montajda true ise (önbellek) 0,25 s solma.
Verilmezse (akademik göstergeler, sunucudan hazır) her açılışta oynar.
Kartsız sahne süresi ≈2 s'den ≈1,2 s'ye: kare ve blok aralığı 0,05 s,
netleşme 0,35 s, logo belir/dur/sön 0,28/0,16/0,3 s. "Mezun istihdamı"
paragrafının ilk harfi büyük (tr-TR). DESIGN.md §4.19 gerçek sürelerle.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
"Logo içinde logo" görünmesin (Bilal, 8 Eki 2026): maske artık yalnız
işaretin çizimi + alfası motion ile sürülen tam ekran dolgu. Büyümenin
ikinci yarısında kareler arasında kalan eski görüntü yeni temaya solar.
kolay-tercih-mark-dolu.svg ve --kt-tema-kapanis kaldırıldı; DESIGN §2.3 notu.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Chrome, view-transition pseudo elemanında dosyadan url() ile yüklenen ikinci
maske katmanını (boyu 0'dan büyükken) tümden şeffaf çiziyor; iki SVG de
data URI olarak globals.css'e gömüldü. Koreografi (önceki oturum): işaret
ekranın altından ortaya süzülür, merkezden büyür, kareler arası boşluklar
dolu çizimle merkezden dışa kapanır; motion sürer. Geçici console tanıları
kaldırıldı, iptal edilen geçişin ready reddi yakalanıyor.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
"İlk 5 İstanbul" isteğinde öncelikliler dilim içinde sınırsız öne alınınca
havuz 60/60 İstanbul oluyor, 24 satırın hepsi İstanbul'a kayıyordu. Kırpma
artık öncelikliye yalnız adet+2 yer ayırır (dilimlere sırayla), kalan kota
sihirbaz süzgecine uyan adaylara gider. revizyon-denetim ilk5-istanbul
senaryosu kalan 19'un çoğunluğunu sihirbaz illerinden bekliyor; 5/5 geçti.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Beş paket (A sohbet sunucusu, B ilk-N garantisi, C program varyantı, D1 sohbet UI,
D2 program ayrıntı) v2'ye alındıktan sonraki dikişler: sohbet-client'ta
revizyonHakki sayısı yerine revizyonAcik bayrağı; rapor.ts üst sayı kümesine
varyant metni; DESIGN §4.15/§4.20/§4.33 notları; .claude/worktrees lint dışı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- lib/tema-gecisi.ts: View Transitions + CSS maskesi (kolay-tercih-mark.svg),
merkez header'daki işaret; reduced-motion ve desteksiz tarayıcıda düz geçiş
- tema-kisayolu.tsx: D tuşu açık ↔ koyu (yazı alanı/değiştirici tuşta pasif)
- tema-secici.tsx: seçim de maskeyle oynar, altında Kbd ile D ipucu
- /surum-notlari: beta açıklaması, geri bildirim (destek@kolaytercih.com),
sürüm günlüğü; Beta rozeti ve footer buraya bağlanır, sitemap'e eklendi
- DESIGN.md §2.3 notu
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Model 24 geçerli satırı öncelikli satırsız doldurunca secimiOnar tamamlayacak
boşluk bulamıyor, ilkTercihleriOneAl öne alacak satır bulamıyordu ("ilk 5
İstanbul" istendi, liste değişmedi — 7 Eki 2026). Yeni saf fonksiyon
ilkTercihleriGarantile: ölçüte uyan ama seçilmemiş havuz programları, aynı
dilimdeki uymayan satırların (önce kodla gelen, sonra en düşük uyumlu; model
gerekçeli satırlar en son) yerine takasla girer, dilim adetleri değişmez.
rapor.ts: nihai seçimden sonra uygulanır, tani.ilkNEklenen alanı eklendi,
onarim.tamamlanan takas kadar artar, modelSecimi nihai seçimden yeniden
sayılır. Dev mock dilim içinde öncelikliyi önce alır ve ilkTercihleriOneAl
uygular.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Model araç çağırmadan ezberden /rehber/<slug> yazabiliyordu; istemci her
adresi "Rehber yazısı" hapı yapıp 404'e gönderiyordu. Yeni saf modül
lib/ai/baglanti-denetimi.ts: kayıtlı slug dokunulmaz, yakın slug (Dice ≥ 0,5
ve açık ara önde) kayıttaki başlıkla yeniden yazılır, uydurma slug düz metne
iner / çıplak adres silinir. BaglantiTamponu akış sırasında çalışır (cevap
bittikten sonra ekrandaki hap geri alınamaz); parça parça çıktı tek seferlik
sonuçla birebir aynı. danismanAkisi `rehberler` seçeneği alır (verilmezse
pasif); route gerçek content/rehber listesini verir; CiktiDenetimi'ne
baglantiDuzeltme eklendi. Prompt BAĞLANTI maddesi rehber_ara'yı teşvik eder.
Aynı dosyalardaki revizyon-hak metinleri (prompt revizyonBolumu, araç
açıklaması/HAK dalı, route'taki kalanHak/kalanRevizyon) de bu commit'te:
sınırın kaldırılması bir sonraki commit'te tamamlanır.
Test: scripts/eval/baglanti-denetim.ts (44/44) ve akis-denetim.ts'e
rehber-uydurma / rehber-gercek senaryoları (9/9).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>