Commit Graph

335 Commits

Author SHA1 Message Date
bilalgursen
52f565ea4a feat(ui): 11 Ekim gece işi — program ayrıntıda açılan gösterge kareleri, veri akışı sahnesi, haritada kenar eritme
- program-ayrinti: kontenjan türleri, netler ve mezun istihdamı kapalıyken
  gösterge karesi; dokununca kare panele dönüşüp bölümün tamamını açar.
  Kontenjan türü satırlarına "kime açık" alt satırı (KONTENJAN_TURU_KIME).
- veri-akisi: üstte öğrencinin üç seçimi, altta YÖK Atlas'ın üç verisi,
  ortada DanışmanlaKonuş çekirdeği; kayıtlar kıvrımlı yollardan çekirdeğe
  akar (kt-akis-* kuralları globals.css'te).
- tercih-haritasi: il'e yakınlaşınca kenarlar iki katlı mask'la erir; tam
  görünümde mask yok, ülke uçları solmaz.
- DESIGN.md: ilgili bölümler güncellendi (§4.19, §4.28).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:30:59 +03:00
bilalgursen
8e2790ec6f merge(main): 1.1.0 v2'ye alındı — tema geçişi, sürüm notları, geri bildirim formu, footer yazı logosu
main'deki PR #9 (v1-beta-tema) ile 1.0.0/1.1.0 commit'leri v2'ye birleştirildi.
Çakışma çözümleri:
- package.json sürümü 2.0.0 kaldı
- animasyonlu-mark, tema-secici, hero-form, DESIGN.md §4.34: v2'deki üst küme korundu
  (main'in temaSekli / ikonlu radyogrubu v2'de sekilOynat / SecimHaplari ile kapsanıyor)
- surum-rozeti: main'in /surum-notlari'na bağlantılı hâli alındı; header'da logo
  Link'inin içindeki eski kopya kaldırıldı (bağlantı içinde bağlantı olmasın)
- globals.css: tema geçişi bloğu iki kez gelmişti, yinelenen silindi
- geri-bildirim-formu: sonner yerine v2 bildirim yığını (ui/bildirim), buton variant="cta"
- DESIGN.md §2.3: temaSekli → sekilOynat

tsc, eslint ve tasarım denetimi sıfır hata.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-11 00:40:29 +03:00
bilalgursen
aec8a2ad76 feat(v2): 9–10 Ekim çalışma ağacı — deneyim dili 1. dalga, PWA manifest, revizyon niyet modeli, listem/tadımlık bileşen denetimi
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>
2026-10-11 00:34:29 +03:00
bilalgursen
bad5856a52 docs(meraklisina): huni şemasına sohbetten revizyon düğümü — istek kodla kurala çevrilir, yapay zekâ listeyi değiştiremez
AGENTS.md şema senkron kuralı: aria-label, figcaption ve 4. bölüm metni de
eşitlendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 02:10:59 +03:00
bilalgursen
cee4bf38af fix(danisman): liste revizyonu koda bağlandı — model artık revizyon başlatamaz (QA B1)
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>
2026-10-09 02:10:59 +03:00
bilalgursen
72c0bd44c2 refactor(hero): sıralama satırı, veri kutusu ve tanım paragrafı kaldırıldı
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:40:00 +03:00
bilalgursen
2981498f3a feat(footer): kenardan kenara dev yazı logosu; footer'lı sayfada alt boşluk kapanır
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:40:00 +03:00
bilalgursen
e8e2c73527 feat(surum-notlari): geri bildirim kutusu ve arayüz iyileştirmeleri balonu
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>
2026-10-09 01:39:59 +03:00
bilalgursen
1b51903e71 feat(tema): sayfa geçişi kısa ve hafif (600 ms), logo dönüşümü geçiş bitince oynar; DESIGN §4.22 logo morph
- 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>
2026-10-09 00:48:41 +03:00
bilalgursen
49d88cd72f fix(tema): ayda tek yıldız, hilalin iki ucunun tam ortasında
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>
2026-10-09 00:43:27 +03:00
bilalgursen
456cedeac6 fix(tema): seçicideki ay ikonu da yatayda çevrildi; logodaki ayla yine eş
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:41:05 +03:00
bilalgursen
7eac1e55e6 fix(tema): logodaki ay yatayda çevrildi (sırtı solda, yıldızlar sağında)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:40:17 +03:00
bilalgursen
6ec350d68f fix(tema): logodaki ay seçici ikonuyla aynı biçimde (sağa bakan hilal); güneşin turuncu topu küçüldü
Morph'taki hilal tema-ikonu.tsx'teki kesimle birebir (gövde r74, (-40,-16)
kaymış r66 kesim; yıldızlar aynı yerlerde), logonun alanına sığacak ölçekte.
Güneş: morph ölçeği 1.35 → 1.1, ikon r52 → r43.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:36:08 +03:00
bilalgursen
50c2f7f292 fix(tema): logo dönüşümü hover döngüsünden öncelikli
İ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>
2026-10-09 00:33:12 +03:00
bilalgursen
316f1dafa0 feat(tema): tema seçici ikonları güneş, ay ve logo kareleri
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>
2026-10-09 00:30:58 +03:00
bilalgursen
8c48303051 feat(tema): geçişte logo kareleri güneşe ya da aya dönüşür
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>
2026-10-09 00:29:03 +03:00
bilalgursen
6022319174 feat(tema): tema geçişi logodan yumuşak, tüylü kenarlı halka olarak açılır; logo bir etap oynar
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>
2026-10-09 00:25:38 +03:00
bilalgursen
83dca068f8 feat(tema): tema geçişi logodan piksel piksel yayılır
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>
2026-10-09 00:22:42 +03:00
bilalgursen
128c175327 fix(danisman): revizyon aracı atlanmasın — geçmiş araç kaydına indirgenir, beyan regex'i genişledi, soru formu Türkçe karakter (QA B1, B4)
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>
2026-10-09 00:16:35 +03:00
bilalgursen
a51724fdcc refactor(tema): logo maskesi kaldırıldı, tema geçişi sade crossfade (640 ms)
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>
2026-10-09 00:15:34 +03:00
bilalgursen
f955a76c1e fix(sohbet): iç içe markdown bağlantısı düzleştiriliyor ([[x](y)](y) → [x](y))
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>
2026-10-08 23:59:16 +03:00
bilalgursen
00e0a8ae9f fix(sohbet): soru formu ilerleme göstergesi Türkçe aria-label
QuestionnaireProgress'in render prop'undaki spread ilkelin
"Questionnaire progress" etiketini taşıyordu (tasarımcı B6); spread'den
sonra aria-label="Soru ilerlemesi".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 23:59:16 +03:00
bilalgursen
2ec9ecdc17 fix(ui): program ayrıntı çekmecesi — önbellekli açılışta sahne atlanır, sahne ≈1,2 s, istihdam cümlesi büyük harfle
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>
2026-10-08 23:59:16 +03:00
bilalgursen
fce7ab8c2e fix(ui): alt sayfa gövdesi üst kenarda maskeli — içerik tutamaç ve çarpının altına girmiyor
Gövde kaydırılınca satırlar tutamaç şeridine ve §4.3 çarpısına (top-3,
size-9) kadar maskesiz çıkıyor, çarpının arkasında kalıyordu (tasarımcı
B4, 7 Eki). AltSayfaGovde'ye 20 px saydam → dolu mask-image: kutuya
bağlı, içerikle kaymaz; pt-3 başlık maskenin dışında. Tek kaynak, tüm
çekmeceler.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 23:59:16 +03:00
bilalgursen
4c84a1a974 fix(tema): geçişte tek silüet — dolu çizim katmanı kaldırıldı, boşluklar tam ekran solmayla kapanır
"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>
2026-10-08 23:50:43 +03:00
bilalgursen
9f401602a8 fix(tema): geçiş maskesinde logo görünmüyordu — SVG katmanları CSS'e gömüldü; alttan uçuş + boşluk kapanışı koreografisi
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>
2026-10-08 23:33:56 +03:00
bilalgursen
129c83971c fix(revizyon): güvenlik-uyum bulguları — kredi şartı metinde, hata metinleri, bağlantı logu yalnız kayıtlı slug
Pazarlama maddesi "Liste revizyonu sayısı sınırsız (her istek 1 sohbet
kredisi)"; revizyon hata metinleri "kredin etkilenmedi" demiyor (mesajın
kredisi düşüyor); "revizyon hakkı" ifadesi kalktı; bağlantı düzeltme
logu modelin ham slug'ını değil yalnız kayıtlı slug'ı yazıyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 23:27:42 +03:00
bilalgursen
91e285900e fix(havuz): "ilk N" ölçütü yalnız ilk N satırı belirler; öncelikliye kırpmada N+pay kota
"İ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>
2026-10-08 23:27:13 +03:00
bilalgursen
e4c06f54d9 chore(entegrasyon): revizyonAcik prop'u, varyant metin sayıları, DESIGN notları, worktree lint ignore
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>
2026-10-07 23:26:58 +03:00
bilalgursen
5f7ea8bbcd feat(tema): D kısayolu, logodan yayılan tema geçişi, /surum-notlari beta sayfası (→ 1.1.0)
- 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>
2026-10-07 23:25:38 +03:00
bilalgursen
3f634ccb69 Merge branch 'worktree-agent-a3eecaccfe3c3822d' into v2 2026-10-07 23:25:11 +03:00
bilalgursen
15c2af43eb Merge branch 'worktree-agent-a8614479561696864' into v2 2026-10-07 23:25:11 +03:00
bilalgursen
e20a45c766 Merge branch 'worktree-agent-a5bcd7331b2f3c5b2' into v2 2026-10-07 23:25:11 +03:00
bilalgursen
62994d70d1 fix(revizyon): "ilk N" ölçütü seçimde kodla garanti ediliyor; mock yolu da kuralı uyguluyor
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>
2026-10-07 23:23:21 +03:00
bilalgursen
e3d79f582e feat(revizyon): revizyon sayısı sınırı kaldırıldı — tek koşul paket + sohbet kredisi
MAX_REVIZYON silindi; liste-revizyon.ts'teki HAK kapısı ve RevizyonSonucu'nun
"HAK" kodu kalktı, ozetCikar kalanHak döndürmüyor (sohbet-meta tipi de).
reports.revision_count sayaç olarak kalır (göç yok). /listem: "Revize et"
düğmesi paketlide hep görünür, "kalan hak" ifadeleri kalktı; sohbet-client
prop'u 0/1 bayrak olarak besleniyor (entegrasyonda revizyonAcik olacak).
Pazarlama metni: "Sınırsız liste revizyonu (danışmanla sohbetten)" (ana sayfa
ve paket kartı). Paketsiz-kredili adayda paket şartı korunur.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:16:34 +03:00
bilalgursen
15f4c4f4e1 feat(sohbet): rehber bağlantıları akışta gerçek slug'larla doğrulanıyor
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>
2026-10-07 23:16:34 +03:00
bilalgursen
bed839768c fix(program-ayrinti): tek durak + sabit iskelet boyu (açılış sıçraması), "Yıllara göre" kaldırıldı, logo→içerik açılışı; DESIGN §4.19
Çekmece varsayılan tek durakta (0,92) açılır; duraklar/ilkDurak kaldırıldı
(kısık durakta gövde kaydırılamıyordu, veri gelince boy değişince konum
sıçrıyordu). İskelet min-h-[70dvh] sarmalda. Yıl tablosu silindi (API
`gecmis` alanı duruyor; backlog). Bölümler data-sonra, başlık altında
data-logo kabı; AcilisSahnesi hazir={durum === "hazir"}. DESIGN.md §4.19
ve §4.10 durak atfı güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:16:13 +03:00
bilalgursen
7d52e8d5f1 refactor(ui): AcilisSahnesi ortak bileşen (components/ui/acilis-sahnesi.tsx), kartsız logo→içerik modu
akademik-ayrinti.tsx'teki açılış sahnesi src/components/ui/acilis-sahnesi.tsx'e
taşındı; davranışı değişmedi (kartlı mod). Eklenenler: `hazir` prop'u (false
iken sahne oynamaz, veri gelince oynar), `className` prop'u ve kartsız mod:
`data-logo` kabındaki üç `data-logo-kare` logodaki yerinde belirir, durur,
scale 0.6 + opacity 0 ile söner, kap sıfır boya iner, `data-sonra` bloklar
netleşir. Hareketi azalt: logo gizli, 0,25 s solma.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:16:13 +03:00
bilalgursen
3f4095e615 refactor(hareket): sihirbaz adım geçişi sabitleri lib/adim-gecisi.ts'e; soru formu aynı geçişle
- adimGecisiVaryantlari / adimGecisi tek kaynak (spring 300/30, opaklık 0,2 s;
  hareketi azalt'ta 0,12 s çapraz solma). Sihirbaz davranışı aynı; center
  varyantına `position: relative` eklendi ki geri dönen panel mutlak kalmasın.
- SohbetAnketi kontrollü (item/onItemChange); her soru motion.div içinde,
  pasif sorular hidden={false} + mutlak/saydam park eder (ilkelin inert'i
  kalır), aktif fieldset useMeasure ile ölçülüp boy yayla uzar. Çıkış animasyonu
  da çalışır: mergeProps'ta kullanıcı prop'u kazanıyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:14:34 +03:00
bilalgursen
f08a26a022 feat(sohbet): soru formu hazırlanırken shimmer; araçta avatar header logosuyla aynı rota koreografisi
- soru_sor aracı hap çizmediğinden sorular üretilirken gri iskelet yerine
  "Soruları hazırlıyorum…" shimmer satırı (role=status, aria-live=polite);
  form gelince kalkar.
- DanismanAvatar araçta "zincir" yerine site başlığındaki logoyla aynı "rota".
- TextShimmerLoader (prompt-kit) projede tanımsız `shimmer` keyframe'i ve
  muted/foreground token'ı kullanıyordu; sitenin shadcn `shimmer` utility'sine
  geçti (liste-uretici / tercih-degisti-modali ile aynı kaynak).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:14:34 +03:00
bilalgursen
10b3e5bd50 feat(listem): kayıtlı raporun satırlarına varyant (okuma anında zenginleştirme)
kullanicininRaporu dönmeden önce programOzellikleriGetir ile 24 id tek
sorguda okunur, programlar[id].varyant yazılır; eski kayıtlar da kazanır,
app.db'ye yazılmaz. Rapor listesi tür çipinin yanında SATIR_CIP ile gösterir.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:12:15 +03:00
bilalgursen
7c48f64ff3 feat(liste): varyant çipi — sonuç tablosu, kendi listem çekmecesi, katalog tabloları
Satır altı meta satırında tür çipinin hemen ardından SATIR_CIP sınıfıyla
"Burslu · İngilizce" çipi (DESIGN.md §4.15); null ise hiçbir şey çizilmez.
Çekmecede üniversite adından sonra "· %50 İndirimli". Manuel liste kaydı
varyantı opsiyonel taşır (eski localStorage kayıtları geçer); + butonu ve
programEkleIste etiketi kopyalar, programOzetle client'a serileştirir.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:12:15 +03:00
bilalgursen
5c583ac8b4 feat(veri): Program.varyant — burs/dil/öğretim türü etiketi tek kaynaktan (program_ozellik)
programs.isim burs/dil varyantını taşımıyor (Başkent Tıp 6 satırda da
"Tıp"); ayırt edici alanlar program_ozellik.burs_orani / ogrenim_dili /
ogrenim_turu. SELECT_COLS üç ilişkili alt sorgu kazanır, programSatiri
varyantEtiketi ile "Burslu · İngilizce" gibi tek etiket üretir; devlet /
Türkçe / örgün programda null. Havuz JSON'una da girer: model aynı adlı
satırları ayırt edebilsin.

Tablo yokluğu koruması bilinçli yok: data/yokatlas.db depoda ve Docker
seed'inde (Dockerfile) program_ozellik tablosuyla geliyor. programs_arsiv
sorguları dokunulmadı (arşivde özellik yok).

Test: pnpm tsx scripts/eval/varyant-denetim.ts (salt okur, çıkış 0).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:12:03 +03:00
bilalgursen
17606902bd feat(header): Beta sürüm rozeti main'den alındı; v2 dalı 2.0.0
main'deki b2bab50 ile aynı içerik (surum.ts, surum-rozeti.tsx, header, AGENTS.md
sürümleme kuralı, DESIGN.md §2.2/§4.14); bu dal 2.0.0 geliştirme sürümü.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:04:59 +03:00
bilalgursen
b2bab50337 feat(header): Beta sürüm rozeti ve sürümleme kuralı (→ 1.0.0)
All checks were successful
Deploy / deploy (push) Successful in 11m16s
Logonun yanına Arc UI Badge biçiminde, akademik gösterge morunda (bg-indigo-500)
"Beta" hapı ve package.json'dan okunan sürüm numarası eklendi. Canlı sistem
1.0.0 olarak işaretlendi; semantik sürümleme kuralı AGENTS.md'ye, rozetin
tasarım tanımı DESIGN.md §2.2/§4.14'e yazıldı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:02:43 +03:00
bilalgursen
4d30dd1305 feat(sohbet): liste revizyonu sohbete taşındı — soru formu ve yapısal kural
Eski revizyon kutusu kaldırıldı: serbest metin modele gidiyor, sıra ve havuz
koddan belirlendiği için "ilk 5 X ilinden olsun" gibi isteklerin karşılığı
yoktu. Danışman artık belirsiz isteği soru formuyla (soru_sor → shadcn
Questionnaire, proje diline çevrildi) netleştirir, sonra liste_revize ile
yapısal kural verir: il/alan/tip farkı, "ilk N" ölçütü, çıkar/ekle,
iskelet (lib/revizyon-kurali.ts). Kurallar havuz, seçim ve sırada koddan
uygulanır; "ilk N" ölçütünün ili/alanı süzgece kendiliğinden eklenir.

- chat_messages.meta sütunu (göç 0006): form, form cevabı ve revizyon sonucu
  kayıttan geri kurulur; form cevabı kredi harcamaz.
- Akış korumaları: form açılınca başka araç yok, revizyonda zaman aşımı uzar,
  "yeniden kurdum" beyanı araçsızsa düzeltme notu.
- /listem "Revize et" sohbeti odaklar; başarılı revizyonda liste yenilenir.
- /dev/sohbet senaryosu, DESIGN.md §4.20 notu ve §4.33.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 17:12:53 +03:00
bilalgursen
3c995402c6 feat(ui): Arc bileşenleri, landing bölümleri ve bildirim yığını
Sonner/vaul yerine kendi bildirim yığını ve alt sayfa; çip grubu, kart
destesi, kaydırma eylemi, yazı dönüşümü, bölme tutamacı; landing'e program
duvarı, süzülen haplar ve veri akışı; yaylar tek dosyada (lib/hareket.ts).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 17:12:53 +03:00
bilalgursen
bc920f6111 feat(ui): Arc kayan vurgulu seçim hapları ve sayı rulosu
- SecimHaplari: tema seçici (kapsül) ve puan türü çipleri (hero + CTA formu);
  seçili vurgu layoutId ile seçenekten seçeneğe kayar.
- SayiRulo: değişen sayılar (listem rozeti, çekmece ve durum satırı sayacı,
  kredi hapları, dilim tablosu sayacı, giriş yeniden gönder sayacı, kaydet
  bandı, üst şerit geri sayımı) rulo gibi döner; @number-flow/react kaldırıldı.
- DESIGN.md §4.21–4.22, components.json @uiarc kaydı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:40:30 +03:00
bilalgursen
a3cb058a3b feat: update app.db and BACKLOG.md with new decisions and adjustments
All checks were successful
Deploy / deploy (push) Successful in 7m45s
- Updated the app.db file to reflect recent changes in the application state.
- Modified BACKLOG.md to include new entries regarding the removal of certain wizard steps, adjustments to priority chips, and the introduction of special quota conditions for candidates.
- Added details on the decision to link priority chips to data sources and clarified the implications for user experience and data handling.
2026-10-06 17:17:49 +03:00
bilalgursen
c0696e2cbc refactor: remove unused netler API and program-netleri component
- Deleted the netler API route and the associated program-netleri component as they are no longer needed in the application. This cleanup helps streamline the codebase and improve maintainability.
2026-10-06 17:17:43 +03:00