Files
kolaytercih/docs/ekip-raporlari/2026-10-07/yazilimci-paket-C.md
bilalgursen da0e9dff7a docs(ekip): 7–10 Ekim raporları, eval sonuçları, seslendirme betiği
- docs/ekip-raporlari/2026-10-07, 2026-10-09, 2026-10-10 raporları ve ekran görüntüleri
  (ses/ altındaki mp3 dosyaları depoya alınmadı, 38 MB)
- BACKLOG #38: rehber yazılarına "Dinle" düğmesi adayı
- scripts/seslendir.py (Türkçe TTS) ve .gitignore'a .venv-tts/
- scripts/eval/sonuc: 8–10 Ekim revizyon eval çıktıları

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-11 00:33:39 +03:00

54 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Yazılımcı raporu — Paket C · program varyant etiketi (madde 2-3)
Worktree: `.claude/worktrees/agent-a5bcd7331b2f3c5b2`, dal `worktree-agent-a5bcd7331b2f3c5b2`, taban `4d30dd1` (şartnamenin tabanı). Push yok.
## Özet (5 madde)
1. `Program.varyant` tek kaynaktan: `src/lib/program-varyant.ts` (saf `varyantEtiketi`), `db.ts` `SELECT_COLS` üç ilişkili alt sorguyla `program_ozellik`'ten okur, `programSatiri` etiketi üretir. Başkent Tıp 6 satırı artık "Ücretli / %50 İndirimli / Burslu / Ücretli · İngilizce / Burslu · İngilizce / %50 İndirimli · İngilizce" olarak ayrışıyor (test çıktısı).
2. UI: `/sonuc` tablosu, rapor listesi (`/listem`), üniversite ve bölüm katalog tabloları tür çipinin hemen ardından `SATIR_CIP` ile çip çiziyor; çekmece ikinci satırda `· {varyant}`. Null ise hiçbir şey çizilmiyor.
3. Manuel liste ve kayıtlı rapor: `ManuelTercih.varyant?` (eski localStorage kayıtları geçer), `programEkleIste` etiketi kopyalar; `kullanicininRaporu` okuma anında tek sorguyla 24 id'ye varyant yazar (eski raporlar da kazanır, app.db'ye yazılmaz).
4. Model: `havuzuKompaktJson` varyant alanını taşıyor. B'nin dosyasına dokunulmadı; entegrasyon satırı aşağıda.
5. Doğrulama: `scripts/eval/varyant-denetim.ts` 14/14 ✔ çıkış 0; `typegen + tsc + eslint` temiz; `pnpm tasarim:denetim` 0 hata / 12 uyarı (hepsi dokunulmayan dosyalarda, önceden var). `data/` git'te temiz.
## Commit listesi
- `5c583ac` feat(veri): Program.varyant — burs/dil/öğretim türü etiketi tek kaynaktan (program_ozellik) — `src/types/yokatlas.ts`, `src/lib/db.ts`, `src/lib/program-varyant.ts` (Y), `src/lib/rapor-havuzu.ts`, `scripts/eval/varyant-denetim.ts` (Y)
- `7c48f64` feat(liste): varyant çipi — sonuç tablosu, kendi listem çekmecesi, katalog tabloları — `liste-queries.ts`, `liste-dogrula.ts`, `use-tercih-profili.ts`, `program-ekle-butonu.tsx`, `program-tablosu.tsx`, `liste-cekmecesi.tsx`, `universite-program-tablosu.tsx`, `bolum-program-listesi.tsx`
- `10b3e5b` feat(listem): kayıtlı raporun satırlarına varyant (okuma anında zenginleştirme) — `rapor-queries.ts`, `types/rapor.ts`, `rapor-listesi.tsx`
Dokunulan dosyaların tamamı şartnamenin C satırındadır; liste dışı dosya yok.
## Kabul kriterleri
- ✔ Test 4/4 (14 alt denetim), çıkış 0 — `pnpm tsx scripts/eval/varyant-denetim.ts` koşuldu (react-server koşulu gerekmedi). `dilimAra(100000,"say","dengeli",{limit:50})` 50 satırın 50'sinde `varyant` tanımlı, 34'ü etiketli; `107210332` Marmara Hukuk → null.
- ✔ `pnpm exec next typegen && pnpm exec tsc --noEmit` temiz (çıktı yok); `pnpm exec eslint` temiz; `pnpm lint` → "Tasarım denetimi: 0 hata, 12 uyarı" (uyarılar `secimlerim-paneli.tsx`, `meraklisina-demo.tsx` — bu pakette dokunulmadı).
- ✔ `grep -c varyant`: rapor-listesi 3, program-tablosu 2, liste-cekmecesi 2, universite-program-tablosu 2, bolum-program-listesi 5.
- ✔ `data/yokatlas.db` değişmedi: `git status --short data` boş; test ve `getDb()` `readonly: true`.
- ✔ Çip `SATIR_CIP` sınıf dizisiyle birebir (sabit import edildi, elle sınıf yazılmadı); `dark:` yok.
## Şartnameden sapmalar / notlar
1. **Worktree tabanı:** verilen worktree `a3cb058`'deydi (şartname tabanı `4d30dd1`'in 3 commit gerisi; paketin dosyaları — `liste-cekmecesi`, `rapor-queries`, `types/rapor.ts`, `rapor-havuzu` — iki commit arasında farklıydı). Çalışma ağacı temiz olduğu için `git merge --ff-only 4d30dd1` ile ileri sarıldı; yıkıcı komut kullanılmadı. Dal `1760690` (v2 HEAD) ile değil `4d30dd1` ile başlıyor; v2'ye merge'de bir commit'lik fark var, paketin dosyalarıyla çakışması beklenmez (koddan çıkarım; `1760690` yalnız header rozeti + sürüm).
2. **`rapor.ts` satır numarası:** şartname `:779` diyor, `4d30dd1`'de ilgili satır **763**. Orkestratörün ekleyeceği tam hâl:
```ts
...metindekiSayilar(p.isim, p.universite, p.varyant ?? ""),
```
(`src/lib/ai/rapor.ts:763`, `ustSayilar` kümesinin içindeki `...metindekiSayilar(p.isim, p.universite),` satırının yerine.) Bu satır eklenmezse model gerekçede "%50" yazdığında sayı denetimi o cümleyi düşürebilir — işlev bozulmaz, yalnız gerekçe kırpılır.
3. **Veri gözlemi (şartnamedeki metinden fark):** `ogrenim_turu` DB'de "Açık Öğretim" (iki kelime) ve "UOLP"; "İkinci Öğretim" / "Açıköğretim" değeri DB'de yok (`SELECT DISTINCT ogrenim_turu`). Etiket DB'deki metni olduğu gibi yazar; birim testteki "İkinci Öğretim" girdisi saf fonksiyonu ölçer. `burs_orani` devlette NULL yanında boş string de geliyor; boş string null gibi davranır (5. birim vakası).
4. **DESIGN.md §4.15 ile tutarlılık:** §4.15'te "Program varyantı ('… (İngilizce) (Burslu)') adın altında ayrı satır `SATIR_ALT_AD`" cümlesi var — o kural `isim`in parantezli hâli için (bölüm sayfasındaki `bazAd` farkı, `bolum-program-listesi.tsx:218`, aynen duruyor). Bu paketteki burs/dil/öğretim türü etiketi şartname gereği **çip** (`SATIR_CIP`, tür çipinin yanı). Belgeye bir cümle eklenmesi gerekir (`docs/tasarim/DESIGN.md` §4.15, paket dosya listesinde olmadığı için dokunmadım): "Burs/dil/öğretim türü etiketi (`Program.varyant`) tür çipinin hemen ardından `SATIR_CIP` ile; null ise çizilmez."
5. **`programdanManuelTercih` (`liste-store.ts`)** paket listesinde yok; varyant `use-tercih-profili.ts` içinde spread ile ekleniyor. `liste-store`'u doğrudan çağıran başka ekleme yolu yok (`grep programEkleIste(` → yalnız `program-ekle-butonu.tsx`).
6. Çekmece satırında `· {varyant}` `shrink-0`; üniversite adı `min-w-0` link olduğu için uzun adlarda ad sarar, etiket kesilmez. **375 px notu (koddan çıkarım, tarayıcı açılmadı):** meta satırı `flex-wrap`, en uzun etiket "%50 İndirimli · İngilizce" (~25 karakter, text-xs) tür çipi + il ile sığmazsa alt satıra iner; dokunma hedefi yok (çip interaktif değil). Bölüm sayfasında satır zaten iki 44 px düğmeyle 129 px; bir çip satırı daha eklenirse yükseklik değişmez (düğmeler belirliyor, §4.15). `tasarimci` kontrolü şartname C-5'te zaten var.
7. **Rapor dosyasının yeri:** ana checkout'taki `docs/ekip-raporlari/2026-10-07/yazilimci-paket-C.md` yoluna yazma worktree izolasyonu yüzünden reddedildi; rapor worktree içinde aynı göreli yolda, commit'lenmemiş (untracked) duruyor. Orkestratör ana checkout'a kopyalar.
## Merge sonrası doğrulanması gerekenler
- Orkestratör `rapor.ts:763` satırını ekledikten sonra `pnpm tsx --conditions=react-server scripts/eval/akis-denetim.ts` ve B'nin `revizyon-denetim.ts`'i (varyantlı havuz JSON'u ile prompt boyutu az artar; şema değişmedi).
- Gerçek üretimde bir listede aynı bölümün 2+ varyantı görünürse gerekçenin "burslu/ücretli" ayrımını yazıp yazmadığı (`yapay-zeka-muhendisi` eval'i; kod değil model davranışı).
- `/listem` eski kayıtlı raporda çipin göründüğü (okuma anında zenginleştirme) — Bilal'in kendi hesabında 1 bakış.
- Docker imajında `program_ozellik` tablosunun seed'de geldiği (`Dockerfile`) — şartname doğruladı, ben koddan teyit etmedim; tablo yoksa alt sorgu SQL hatası verir (koruma bilinçli yok).
## Bilal'den istenen
1. `docs/tasarim/DESIGN.md` §4.15'e yukarıdaki tek cümlenin eklenmesine onay (ya da tasarımcıya verilmesi) — 2 dk.
2. Yok (para/giriş/kişisel veriye dokunulmadı; `guvenlik-uyum` denetimi gerekmiyor).