# Döküm — devam noktası (2026-07-15)

Bu dosya, oturum belleğinde yaşayan otonom iş listesinin diske alınmış hâlidir.
Ayrıntılı ölçümler hafızada: `fikatia-dokum-kalibrasyon`, `fikatia-sph-olcek-maliyeti`,
`fikatia-elmer-oracle`, `fikatia-belge-ciz-bayat-obj-tuzagi`.

## 🚨 ÖNCE BU: fikocad açılmıyor
`fikocad.exe --senaryo-dokum` → **GPU aygıtı kayıp (kareBasla/fence sonuc=2)**, hiç PNG
üretmeden ölüyor. `--oto-test` de takılıyor.

**Kök neden — bayat .obj tuzağı (Claude'un değişikliği DEĞİL, A/B ile kanıtlandı):**

| dosya | kaynak değişimi | .obj derlenmesi |
|---|---|---|
| `uygulama/fikocad/belge_ciz.cpp` | **15:14:22** (Fikri) | **17:42:36** (Claude'un derlemesi) |

`belge_ciz.cpp` 15:14'te düzenlenmiş ama **hiç derlenmemiş**; .obj 2.5 saat bayat kaldı.
16:25'te senaryonun çalışması yanılsamaydı — exe **eski** .obj ile linklenmişti. Claude'un
`voxel_kafes.hpp`'ye üye eklemesi o TU'yu yeniden derletti → düzenleme ilk kez devreye
girdi → GPU öldü. **Zaman bombasıydı; bir sonraki derlemede Fikri de çarpacaktı.**

**Kanıt:** Claude'un tüm değişiklikleri `git stash` + tam yeniden derleme → **yine aynı
hata**. Stash `belge_ciz.cpp`'ye dokunmadı (Fikri'nin dosyası) → bozuk kod derlenmiş kaldı.

**Yarım iş (dokunulmadı):** `kare_ubo` refaktörü — `ModelItme` 256B→144B, ışık/seçim/hover
rengi kare-sabit UBO'ya. Yapısal olarak TAMAM görünüyor (incelendi, bug bulunamadı):
yerleşim türeyen varyantlara geçiyor, `modelHatTekYon` satır 334'teki yerel referansla
kapsanıyor, `yaz()` render pass DIŞINDA (683 < `hedef.basla` 687), transfer→uniform
bariyeri var.

## 🐞 Pre-existing bug (commit'li, hang'in sebebi DEĞİL ama gerçek)
`belge_ciz.cpp:171` → `analizAyar.nitelikler.push_back({4, 1, R32_SFLOAT, 0})` ile
**location 4'ü TEKRAR** ekliyor; `Vertex::nitelikler()` (vertex.cpp, commit'li) zaten
0..5 döndürüyor (`{4,0,R32_SFLOAT,40}`=alfa, `{5,0,R32_UINT,44}`=globalYuzIndeks).
→ **VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617** (5 kez).
Spec ihlali; NVIDIA hoşgörülü olduğu için sessizce çalışıyor. Muhtemel doğru değer `{6, 1, ...}`.

**Vulkan doğrulama nasıl açılır:**
```powershell
$env:VK_INSTANCE_LAYERS = "VK_LAYER_KHRONOS_validation"
```
⚠️ Mesajlar `senaryo.log`'a düşer — stdout/stderr redirect **İŞE YARAMAZ** (AllocConsole).

## ✅ Bu oturumda biten
- **Voxel görseli parçadan büyük çiziliyordu** → düzeltildi. Ölçüm: 42.000mm vs parça
  40.0mm (h=3.0mm), PNG'de %4.6 şişme. Kök neden: merkez-sınıflaması yukarı yuvarlar
  (40/3=13.33 → 14 hücre = 42mm). Çözüm: `VoxelKafes::sinirHam()` (paysız AABB) +
  `VoxelGorselAyar::kirpParcaya` + `kupEkle(..., const Aabbd* kirp)`. **Üç fonksiyon
  birden** düzeldi: `voxelMeshKur`, `dolumMeshKur`, `alanMeshKur`. Sonuç **40.000mm tam**.
  Kütüphane varsayılanı eski davranış; fikocad `dokum.voxel_kirp` (varsayılan AÇIK) geçirir.
  Test: `g0_voxel_mesh_parcayi_asmamali`. ⚠️ **RUNTIME TEST YAPILAMADI** (fikocad açılmıyor).
- **MC sıvı yüzeyi de taşıyordu** → düzeltildi (ikinci dalga). Fikri: "buda taşıyor",
  "hızlıda da taşıyor". **Fizik kipi alakasız** — ölçüm probunda hiç fizik yok (alan elle
  "her yer sıvı") ve yine 42.000mm çıkıyordu; taşma tamamen mesh üreticide.
  `kupEkle` yolu düzeltilmişti ama `siviYuzeyKur` (marching cubes) ayrı yol.
  Kök: `parcaSiniriKirp` zaten `true` idi ama `parcaSdfKur` psi'yi chamfer345 ile **voxel
  maskesinden** üretiyordu → sıfır seviyesi son `Ic` merkezi ile ilk `Dis` merkezinin
  ortasında (h=3mm'de 21.0 → 42mm). Hata sabit kesir DEĞİL, hizalanmaya göre ±h/2 →
  sabit kaydırmayla düzeltilemez.
  Çözüm: `VoxelKafes::parcaSdf` + `parcaSdfHesapla(kafes, corba)` + `noktaUcgenMesafe`
  (Ericson RTCD §5.1.5). Exact mesafe yalnız yüzey kabuğunda; uzakta işaret yeterli.
  `kafesiKur_`'da `kurulumKafeseUygula`'dan **ÖNCE** (besleyici/yolluk çorbada yok).
  A/B: **ESKİ 42.000 (taşma +2.000, keskinlik 0.9386) → YENİ 40.000 (taşma 0.000,
  keskinlik 0.9685)**. `parcaSdf` boşsa eski chamfer yoluna düşer → davranış korundu.
  ⚠️ Köşe metriği **yüzeyin kendi yarı-genişliğine** göre olmalı (`kose/(yariG·√3)`);
  parçanın 40mm'sine göre ölçmek şişmiş yüzeyi haksız yere iyi gösterir.
  📌 Kalan ~%3 köşe yumuşaması **MC'nin doğası** — çözünürlükle oransal küçülür, sıfırlanmaz.
  ⚠️ `test_sivi_yuzey.cpp` bug'ı kutsamıştı: `azamiUz <= r + 0.5*h` toleransı yarım hücre
  taşmaya izin verirken yorumu "TAŞMA YOK" diyor.
- **Scheil şüphesi çürüdü**: kod DOĞRU standart Scheil; yanlış olan yorumdu. Düzeltildi +
  `f2_scheil_ileri_yasa` testi (bağımsız ileri yasayla tur-tur, 71 kontrol).
- **Chvorinov mutlak ölçek testi** `c2_chvorinov_mutlak_sure` — hiçbir test mutlak süreyi
  sabitlemiyordu (hepsi oran/yön testiydi → 3× ölçek sapması yeşil kalırdı).

## 2026-07-16 — voxel bitti, sıvı pahı kaldı (commit `fd9a72d`, `4bcd92e`)
- ✅ **Voxel**: parçaya oturuyor + köşe **keskinlik 1.0000** (34.641 = ideal). L'de taşma
  1.000 → **0.000mm**. `voxelMeshKur` + `dolumMeshKur`, kutu ve L: 0 vertex dışarıda.
  Yöntem: küp köşesini gerçek çorbaya **en-yakın noktaya** it (`noktaUcgenEnYakin`).
  Köşeler kafeste ortak → su geçirmez.
- ⛔ **`dolumMeshKur` hiç kırpılmıyordu** — toplu düzenleme `hc` döngü adını atlamıştı ve
  "üçü de düzeldi" diye rapor edilmişti. Kök neden: o yol **test edilmiyordu**.
- ⛔ **AABB kırpması kutu-olmayanda yetmez**: L'de iç hücrelerin **%55'i** taşıyordu.
  Kutu bu bug için yanlış test parçası (40.000mm çıkıp yanılttı).
- ⛔ **SDF gradyanıyla itmek köşeyi PAHLAR** (1.0 → 0.9640): trilineer aradeğer köşedeki
  koni kırığını yuvarlar. Gerçek en-yakın nokta köşe vertex'idir → sivri.
- ⛔ **Trilineer SDF karar veremez**: L'nin içbükey köşesinde "içeride" der (208 vertex
  1mm dışarıda kaldı). Artık yalnız ucuz eleme.
- ⛔ **Ölçüm aracı da bozuktu**: "dışarıda mı" testi trilineer SDF kullanıyordu = bug'ın
  kaynağı. Köşe sivrileşince test kırmızıya döndü, geometri doğruydu.
  🩺 **DERS: ölçüm aracı, ölçtüğü bug'ın kaynağını kullanmamalı.**
- ⛔ **SIVI PAHI: "duvar vertex'lerini it" DENENDİ, ÇÜRÜDÜ** (keskinlik 0.9685'te aynı).
  MC vertex'leri zaten doğru yerde; sorun köşe tepesinde **vertex olmaması**. Var olanı
  itmek eksik olanı yaratmaz. → **Dual Contouring** şart (girdiler hazır: exact SDF +
  gradyan + çorba). Çözünürlük güvenilir kaldıraç değil (res24 0.9685, res40 0.9546,
  res60 0.9874 — monoton değil).
- ⚠️ **PERF açık**: köşe itmesi köşe-başına exact tarama, scrub'da yeniden kurulur.
  kutu(12 üçgen) 5.1ms, L(32) 15.3ms, küre(298) 41.9ms — üçgen başına maliyet düşüyor,
  gerçek parçaya güvenle çıkarılamaz. Çözüm: projeksiyon geometriye bağlı → kafes
  kurulurken **bir kez** (lattice cache), her görselde değil.

## ⏸️ DÖNGÜ DURDURULDU (07-16) — Fikri: "kaydet, başka zaman bakarız"
Cron `898fa879` silindi. Geçici ölçüm probları test dosyalarından temizlendi.
**COMMIT ATILMADI** (kural: kullanıcı istemedikçe yok). Değişiklikler çalışma
ağacında duruyor — `git status` ile görülür.

### 🎯 BU SEZONUN TEK CÜMLELİK ÖZETİ
"Su gibi akmıyor"un sebebi perf değil, **üst üste binmiş 4 ayrı arıza**:
1. **h=18mm** — kafes parçayı görmüyor (voxel kocaman + ince cidar yok). → uyarı + öneri eklendi.
2. **Partikül konumları atılıyordu** — akış hesaplanıyor ama görüntüye ulaşmıyordu. → partikül bulutu eklendi.
3. **DFSPH divergence çözücüsü** ince h'de hız alanını patlatıyor (98 → 7.3 m/s). → varsayılan kapatıldı.
4. **Çözüm hâlâ yakınsamıyor** (1.67→5.09→7.32) — ana açık iş.

### ▶️ DÖNDÜĞÜNDE BURADAN BAŞLA
1. **RUNTIME TEST** (Claude yapamaz — GUI çalıştırmıyor). Sırayla:
   - Kurulum → **"Cidarı ölç"** → **"Uygula: N"** → küpler küçülüyor + parça tamamı doluyor mu?
   - Panelde **kırmızı kapsama şeridi** çıkıyor mu (çözünürlük düşükken)?
   - Dolum fiziği → **"Gerçek SPH (dk)"** → görünüm → **"Partikül bulutu (çalkantı)"**
     → jet/sıçrama/çalkantı GÖRÜNÜYOR mu? ("su gibi" hissi buradan gelecek)
   - SPH artık divergence çözücüsü KAPALI koşuyor → hızlar makul mü, süre kabul edilebilir mi?
2. **Ana açık iş: yakınsama** (bkz. memory `fikatia-sph-yakinsamiyor`). Div kapalı
   felaketi kaldırdı ama maksHız hâlâ çözünürlükle büyüyor. Sıradaki şüpheliler:
   (a) **Akinci2012 sınır** (voxel merdiveni) → **Bender2019 volume map** — çözüm
       ZATEN VENDORED (`BoundaryModel_Bender2019` + `Discregrid`) ve gerçek üçgen
       mesh elimizde (`kafes.parcaUcgen`). Tur 5'in literatür destekli baş şüphelisi.
   (b) **Emitter kuantalanması** (`genislik = round(D/cap)`) → aynı debi çözünürlüğe
       göre 2.3× farklı giriş hızı. TÜRETME, ölçülmedi.
3. **Kalıcı test borcu**: divergence bulgusunu koruyan test YOK (h=2mm A/B 9 dakika →
   pakete konamaz). Ucuz tekrar üretim arayışı yarıda kaldı. Şu an bulgu yalnız
   `sph_dolum.hpp` yorumundaki ölçüm tablosunda yaşıyor.

## 🔁 OTONOM DÖNGÜ (07-16, 10dk — ARTIK KAPALI) — hedef: "su gibi akan" dolum
Fikri: *"ben gelene kadar bu su gibi akabilen simülasyon için çalış, gerçek
fiziksel değerlere göre"* + *"voxellerde kocaman oluyor ve taşıyor"* +
*"magma/anycast gibi akışkan ve animasyonlu doldurmuyor"*. Cron `898fa879`.
**Commit YOK · GUI ile çalıştırma YOK · her tur TEK konu · ÖLÇ, tahmin etme.**

### Tur 1 ✅ — çözünürlük↔h dönüşümü + cidardan öneri (h artık GÖRÜNÜR)
**Neden bu ilk:** "voxeller kocaman" ve "sadece burasını dolduruyor" şikayetlerinin
İKİSİ de tek sayıdan geliyor: **h=18mm**. Küp gerçekten 18mm; cidar da o yüzden yok.

**🔑 ASIL BULGU — panel asimetrikmiş:** hücre SAYISINI (maliyet) uyarıyordu
("≈8M hücre — çözüm ÇOK uzun sürer") ama hücre BOYUNU (doğruluk) hiç söylemiyordu.
Yani UI kullanıcıyı **sistematik olarak düşük çözünürlüğe itiyordu** ve karşılığında
hiçbir uyarı vermiyordu. Fikri'nin 40'ta kalmasının sebebi bu.

Eklendi (`VoxelKafes` statik, saf):
- `hCozunurlukten(sinir, res, pay)` = (en uzun × (1+2·pay)) / res — `kur()`'un
  gizli çarpanı artık açıkta.
- `cozunurlukHedefH(sinir, hHedef, pay)` = tersi (ceil).
- Test `g3_cozunurluk_h_donusumu`: formülü DEĞİL **gerçek `kur()`'u** ölçer (ikisi
  ayrışırsa öneri sessizce yanlış olur). Ters yönde `h ≤ hedef` **ve** `h > 0.9·hedef`
  (yuvarlama yanlış tarafa kaçmasın + gereksiz ince olmasın).
- ÖLÇÜLDÜ: 400×300×8mm → res40 = **h 18.00mm**; 8mm cidar için h≤4mm → **res 180**
  (4.5× res = ~91× hücre; maliyet ∝ res³).

Panel (Kurulum sekmesi, Çözünürlük altında):
- Her zaman **"Hücre boyu h ≈ X mm"**.
- **"Cidarı ölç"** düğmesi → `analiz::kalinlikRapor` (ışın tabanlı; ZATEN VARDI,
  yeniden yazılmadı — 4mm plaka→4.0, 2mm boru→2.0 ile doğrulanmış). Pahalı →
  yalnız düğmeyle, sim başına önbellek (`g_minCidar`).
- Cidar ölçülünce: h > cidar/2 ise **kırmızı şerit** + **"Uygula: N"** düğmesi.
- `parcaHamSinir()`: kafes varsa `sinirHam()`, yoksa `Dugum::yerelSinir`
  (bedava — `corbaBrepten` tessellation'ı gerekmez).

Test: dokum **2338**, sph 870, sahne 1231, geometri 796, analiz 161 — 0 kaldı.
⚠️ RUNTIME TEST: Kurulum sekmesi → "Cidarı ölç" → "Uygula: N" → Yeniden Doldur.

### Tur 2 ✅ — implicit viskozite varsayılanı KORUNDU (planım çürüdü)
**Neden bu:** Tur 1 Fikri'yi res≈180'e (h≈4mm) itiyor. Hafıza o bölgeyi "implicit
zararlı" diye işaretlemişti → kendi tavsiyem onu ölçülmüş bir tuzağa sokuyor gibiydi.
Başabaş noktasını bulup h'ye göre otomatik seçecektim.

**ÖLÇTÜM, PLAN ÇÜRÜDÜ.** Önce süre taraması (768 partikül, oto r=h/4, deterministik):
implicit yalnız **dar bir bantta** kazanıyor (h≈0.9–3.6mm), iki uçta explicit "kazanıyor"
— monoton değil, hafızanın anlattığı hikâye değil. Ama süreye güvenmeden önce fiziği
ölçtüm:
| h(mm) | explicit maksHız | implicit maksHız | explicit dolan / implicit dolan |
|---|---|---|---|
| 0.360 | **29.3 m/s** | 0.459 | **0** / 192 |
| 0.900 | **75.5 m/s** | 0.306 | **0** / 200 |
| 3.600 | **306.3 m/s** | 1.001 | 103 / 216 |
| 9.000 | 5.4 m/s | 2.516 | 276 / 224 |
Sıvı Al kritik giriş hızı ~0.5 m/s (Campbell) → **306 m/s fiziksel saçmalık**; explicit
kalıbı **hiç doldurmuyor** (dolan=0), partikülleri savuruyor. **"explicit daha hızlı"
= "daha hızlı yanlış cevap veriyor".** Eski kayıt çalışan çözücüyü ıraksayanla kıyaslamış.

**MEKANİZMA (kod doğrulandı):** explicit viskozite **difüzyon** kararlılık sınırı ister
(dt ≲ h²/2ν). Kod `CFL_METHOD = ENUM_CFL_STANDARD` → yalnız **advection** (dt ∝ h/v_max).
h küçülünce difüzyon sınırı **karesel**, CFL yalnız **doğrusal** daralır → explicit
kaçınılmaz ıraksar. Implicit'in "pahalı"lığı (ms/adım 13.9→97.6) gerçek ama **alternatifi yok**.

**SONUÇ: `viskoziteImplicit=true` DOĞRU — dokunulmadı. Kod değişikliği YOK, yanlış
bilgi temizlendi:**
- Yeni test `sph_explicit_visko_iraksar` varsayılanı KORUYOR (h=0.9mm: implicit
  0.300 m/s/96 hücre vs explicit 65.1 m/s/24 hücre = **217× ıraksama**). Kırmızıya
  dönerse explicit düzelmiş demektir → tabloyu güncelle, testi susturma.
- `test_sph.cpp` yorumundaki "explicit DAHA HIZLI" tablosu + `sph_dolum.hpp`'deki
  "Explicit yalnız çok ucuz sahnede tercih" tavsiyesi düzeltildi (ikisi de aktif
  olarak yanlış yönlendiriyordu).
- memory `fikatia-sph-olcek-maliyeti` KÖK NEDEN 2 çürütüldü; spawn_task
  `task_b14a8aea` (h'ye göre oto seç) önermesi ÖLÜ.
Test: sph **874**, dokum 2338, sahne 1231, geometri 796 — 0 kaldı.

🩺 **DERS:** bir perf ölçümünü kabul etmeden önce **"sonuç hâlâ doğru mu?"** diye sor.
Duvar-saati ancak iki koşu AYNI FİZİĞİ üretiyorsa kıyaslanabilir. Eski kayıtta A/B
vardı ve "kök neden kesin" deniyordu — A/B doğruydu ama **yanlış şeyi** ölçüyordu.

### Tur 3 ✅ — 🚨 TUR 1'İN TAVSİYESİ SPH KİPİNİ ÖLDÜRÜYOR (ölçüldü)
**Önce öz-eleştiri:** Tur 2 raporunda "res 4.5× → SPH ~91× pahalı" dedim — o bir
**PROJEKSİYONDU, ölçüm değil**. Kendi kuralımı çiğnedim. Bu tur onu ölçtü.

**ÖLÇÜLDÜ** (40mm küp, oto yarıçap r=h/4, çok-thread, maksSure=0.05):
| res | h(mm) | r(mm) | partikül | adım | süre | dolan |
|---|---|---|---|---|---|---|
| 8 | 9.000 | 2.250 | 228 | 85 | 104.3 ms | 84 |
| 16 | 4.500 | 1.125 | 1794 | 116 | 580.0 ms | 354 |
| 32 | 2.250 | 0.563 | 20480 | 378 | **15091.3 ms** | 2823 |
→ res ×4 ⇒ partikül ×89.8 (projeksiyon tuttu) ama **SÜRE ×144.7** (projeksiyon TUTMADI):
adım sayısı da 4.4× arttı (h ↓ → CFL dt ↓). **Maliyet ≈ res³·adım ≈ res^3.6.**
→ Tur 1'in önerdiği res 40→180 (4.5×) ⇒ SPH **saatlere** çıkar.

**🔑 ASIL BULGU — Fikri'nin iki isteği MİMARİ olarak çatışıyor:**
"cidarı gör" (res ↑ → h ↓) ile "su gibi aksın" (SPH bitsin) **aynı anda olamıyor**,
çünkü `sph_dolum.cpp` tek satır: `r = clamp(r, 1e-5, 0.5*hFiz)` → **r ≤ h/2 ZORUNLU**
→ h ↓ ⇒ partikül sayısı ↑ ⇒ SPH patlar. Voxel çözünürlüğü ile SPH partikül boyu
**zincirli**; ayrı olmaları gerekirdi.
⚠️ Kırpma KEYFİ DEĞİL: binning `doluPay = partikülHacmi/hücreHacmi` istiyor —
partikül hücreden büyükse nokta-binning onu göremez (splat gerekirdi).

**KIRPMA SESSİZDİ (ölçüldü, res=32 → tavan 1.125mm):**
| istenen r | partikül | süre |
|---|---|---|
| 0.5625mm | 20480 | 14845 ms |
| 1.1250mm | 2553 | 1230 ms |
| **4.0000mm** | **2553** | 1231 ms ← 4mm istendi, 1.125mm alındı |
Panel 10mm'e kadar yazdırıyordu; tavan üstü **hiçbir şey** yapmıyordu.

**Yapıldı:**
- `sphEtkinYaricapM()` + `sphYaricapKirpildiMi()` → **TEK KAYNAK**. Formül CPU
  (`sph_dolum.cpp:154`) ve GPU (`sph_gpu.cpp:135`) yollarında **kopyalanmıştı** —
  sürüklenirse iki yol sessizce ayrışırdı. İkisi de artık bunu çağırıyor.
- Test `sph_yaricap_kirpma_tek_kaynak`: kırpmayı kilitler + **fonksiyonun çözücünün
  gerçekten kullandığı yarıçapı verdiğini** partikül sayısıyla doğrular (Tur 1'deki
  formül-vs-`kur()` tuzağının aynısı).
- Panel: etkin yarıçap + tavan gösteriliyor; kırpılmışsa sarı şerit. Tooltip'te
  ölçülen maliyet yasası.
Test: sph **885**, dokum 2338, sahne 1231, geometri 796 — 0 kaldı. Davranış değişmedi.

### Tur 4 🚨 — SPH ÇÖZÜNÜRLÜKLE YAKINSAMIYOR (kod değişikliği YOK, iki hipotezim çürüdü)
**Planım splat'tı (Tur 3'ün önerisi). Girmeden önce çerçeveyi sınadım — ÇÜRÜDÜ.**

**(a) "Splat zinciri kırar" — YANLIŞ.** Aritmetik: Tur 1 kuralı h ≤ cidar/2 **ve**
oto r = h/4 ⇒ partikül çapı = cidar/4 ⇒ ince cidar boyunca **tam 4 partikül**.
Yani kırpma keyfi israf değil, fizikle hizalı. Splat yalnız r > h/2 yapmaya izin
verirdi = cidardan KABA partikül = akış çözünürlüğünü geometrinin altına düşürmek.
Bu bir kalite TAKASI, bedava kazanç değil. **Splat "su gibi akan"ı çözmez.**

**(b) İlk probum yanlış şeyi ölçtü** (az önce eleştirdiğim tuzağın aynısı): YATAY
plaka kullandım → yerçekimi -z, plaka 8mm yüksek → metali yanlara itecek kuvvet yok.
"%0 doldu" çıktı ve neredeyse "partikül giremiyor" diye kaydediyordum. DİKEY cidarla
(yerçekimi sürücü) tekrarladım → kütle her üç çözünürlükte de **%99-100 yayılıyor**,
dolum oranı **aynı** (58.6 / 68.3 / 57.2%). "2 partikül genişliğinde cidar dolmaz"
iddiası YOK.

**⭐ (c) ASIL BULGU — çözüm YAKINSAMIYOR.** Dolum oranı ayırt edici değil (124
partikül çalkantı gösteremez ama "doldu" der). Ayırt eden fizikle ölçtüm
(dikey cidar W=8mm, H=40mm, implicit viskozite AÇIK = varsayılan):
| h(mm) | r(mm) | cidar boyunca | partikül | %dolu | **maksHız** | varışOrt | varışMaks | oksitli | süre |
|---|---|---|---|---|---|---|---|---|---|
| 8.00 | 2.000 | 2 | 124 | 58.6% | **1.838 m/s** | 0.0936 | 0.1392 | 124/124 | 425 ms |
| 4.00 | 1.000 | 4 | 999 | 68.3% | **5.996 m/s** | 0.1119 | 0.3100 | 999/999 | 4721 ms |
| 2.00 | 0.500 | 8 | 8000 | 57.2% | **75.052 m/s** | 0.1711 | 0.4809 | 6993/8000 | 70807 ms |

- **maksHız 1.8 → 6.0 → 75 m/s: yakınsamıyor, IRAKSIYOR.** Fiziksel beklenti ~2.2 m/s
  (emitter debiden ~1.3 + 40mm serbest düşüş 0.9). En KABA çözüm en fiziksel olanı.
- varışMaks da yakınsamıyor (0.139 → 0.310 → 0.481) → cold-shut/porozite/misrun
  zincirinin TAMAMI çözünürlüğe bağlı kayıyor.
- **Oksit metriği anlamsız**: maksHız ≫ kritikHiz(0.5) olduğu için partiküllerin
  %87-100'ü "oksitli" işaretleniyor. Campbell bifilm göstergesi bu haliyle çöp.
- ⚠️ Bu, Tur 2'de ölçtüğüm explicit ıraksamasından FARKLI — burada **implicit AÇIK**
  ve yine de fırlıyor.

**🚨 SONUÇ: "gerçek fiziksel değerlerle su gibi akan" hedefinin önündeki asıl engel
çözünürlük/perf DEĞİL — çözümün kendisi mesh-yakınsak değil.** Çözünürlüğü artırmak
(Tur 1 tavsiyesi) fiziği İYİLEŞTİRMİYOR, bozuyor. Perf'i optimize etmek de yakınsamayan
bir cevabı daha hızlı üretmekten ibaret olurdu.

**Kod değişikliği YAPILMADI** (mekanizma bilinmiyor; tahminle dokunmak yasak).
Test: dokum 2338, sph 885, sahne 1231, geometri 796 — 0 kaldı.

### Tur 5 ✅ — mekanizma avı: 2 hipotez elendi, BAŞ ŞÜPHELİ literatürle bulundu
(Fikri "gerekirse internetten araştırma yapabilirsin" izni verdi — belirleyici oldu.)

**✅ (a) "tek kare spike'ı" ELENDİ** — hücre-başı `hizMaks` dağılımı:
| h(mm) | dolan | p50 | p90 | p99 | maks | >5 m/s hücre |
|---|---|---|---|---|---|---|
| 8.00 | 15 | 0.352 | 0.835 | 1.192 | 1.192 | 0 |
| 4.00 | 140 | 0.306 | 0.903 | 1.954 | 2.651 | 0 |
| 2.00 | 991 | 0.781 | **6.286** | **11.712** | 30.269 | **146 (%14.7)** |
Yaygın (%14.7), tek partikül değil. **Medyan sağlam (0.78) → patlayan KUYRUK.**

**✅ (b) "emitter kaynaklı" ELENDİ** — maksimum **DİPTE**: z=3.0mm (H=40mm).
>5 m/s hücrelerin 146'sı z<10mm, orta 1, **üst (emitter bölgesi) 0**.

**⚠️ Tekrarlanabilir değil**: aynı config iki koşuda maksHiz **75.05 vs 30.269**
(çok-thread) → kararlı fiziksel özellik değil, sayısal kaos.

**⭐ (c) SINIR MODELİ = BAŞ ŞÜPHELİ (literatür destekli, HENÜZ KANITLANMADI)**
Kod `ENUM_AKINCI2012` + sınır partikülleri **voxel hücre yüzlerinden** örnekleniyor
→ **merdiven yüzey**. Literatürün bu yöntem için saydığı kusur bizim tablomuz:
- Akinci2012 tartışması: sınıra yakın yoğunluk **fazla tahmin ediliyor** → yanlış
  basınç kuvveti → **yanlış hız, sınır civarında bozulmuş partikül davranışı**.
- **Bender 2019 "Volume Maps" makalesinin VARLIK SEBEBİ** bu: *"boundary particles,
  like bumpy surfaces and inaccurate pressure forces near boundaries"*; Akinci
  örneklemesinde *"particle movement becomes bumpy due to the unevenness of the
  discretization"*. → Voxel merdiveni = "unevenness"ın EN KÖTÜ hâli.
- Ölçümle tutarlı: dipte (sınırda), kuyrukta, çözünürlükle kötüleşiyor.

**✅ ÇÖZÜM MEVCUT (doğrulandı, sürpriz derecede yakın):**
- `BoundaryModel_Bender2019.{h,cpp}` **vendored** · `Discregrid` **vendored** ·
  `Simulation.h:223` `ENUM_BENDER2019` var.
- 🔑 **Parçanın GERÇEK üçgen mesh'i elimizde: `kafes.parcaUcgen`** → volume map
  voxel merdiveninden DEĞİL gerçek BREP yüzeyinden kurulur. Bu (1) ve (3)
  şikayetlerine de dokunur: akışkanın sınırı gerçek parça yüzeyi olur.

**(d) DFSPH basınç A/B** — koşuyor (sonuç gelmedi). Yan bulgu: `basincHata` kodda
**1e-3'e taban kırpılı** (`sph_dolum.cpp:305`) → **çözücüyü sıkılaştırarak kurtarma
yolu KAPALI**; A/B'nin "sıkı" ayarı zaten tabanda.

**🐞 Yan bulgu (TÜRETME — ölçülmedi, doğrulanmalı):** emitter hızı çözünürlüğe bağlı.
`hiz ≈ Q/(0.8·nIn·cap²)`, `genislik = round(capMm/cap)` kabaca kuantalanıyor →
D=6.4mm: r=2mm → hız ~0.83 m/s, r=0.5mm → ~1.9 m/s (**2.3× fark**). Aynı debi
çözünürlüğe göre farklı giriş hızı → Campbell kritik-hız denetimi çözünürlüğe bağlı.
İkincil (30-75 m/s'yi açıklamaz) ama gerçek.

Kod değişikliği YOK. Test: dokum 2338, sph 885, sahne 1231, geometri 796 — 0 kaldı.

### 🎯 Tur 6 ✅ — SUÇLU BULUNDU: **DFSPH DIVERGENCE ÇÖZÜCÜSÜ** (varsayılan AÇIKtı)
A/B (dikey cidar W=8mm H=40mm, oto r=h/4, **deterministik=true**, maksSure=0.2):
| h(mm) | div | maksHız | >5m/s | dolan | adım | kütle% | süre |
|---|---|---|---|---|---|---|---|
| 8.00 | 1 | 1.859 | 0 | 16 | 60 | 99.2% | 588 ms |
| 8.00 | **0** | 1.674 | 0 | 15 | 57 | 99.2% | 381 ms |
| 4.00 | 1 | 5.101 | 1 | 146 | 409 | 99.9% | 18771 ms |
| 4.00 | **0** | 5.091 | 1 | 150 | 391 | 100.8% | 17942 ms |
| 2.00 | 1 | **98.036** | 75 | 993 | 1828 | 100.0% | 534487 ms |
| 2.00 | **0** | **7.317** | 4 | 996 | 1052 | 100.0% | 373497 ms |

**Div KAPALI: maksHız 13× düşük · adım AZ (1828→1052) · %30 HIZLI · dolum ve kütle AYNI.**
Basınç toleransı A/B'si de bunu doğruladı (hepsi h=2mm, div AÇIK):
hata0.01→98.0 · hata0.001+iter150→**331.4** (sıkılaştırmak KÖTÜLEŞTİRİYOR) · hata0.05→70.0.

**🔑 Kendi şüphemi çürüten kanıt:** "div kapalı sadece sönümlüyor, doğruluğu düzgünlükle
takas ediyor olabilirim" demiştim → **h=8 ve h=4'te div açık/kapalı neredeyse BİREBİR**
(1.859 vs 1.674; 5.101 vs 5.091). Sönümleme olsaydı HER çözünürlükte hız düşerdi.
Div çözücüsü yalnız **ince çözünürlükte patoloji** üretiyor. Kütle her koşuda korunuyor.

**🚨 `sph_dolum.hpp`'deki gerekçe TERSİNİ iddia ediyordu**: *"divergence solve: hız
alanını temiz tutar (kütle korunumu + yanlış oksit işaretini önler)"* → ölçüm: yanlış
oksit işaretini **O ÜRETİYOR** (%7.6 hücre >5 m/s → tüm partiküller "oksitli").
Yorum ölçülen tabloyla değiştirildi.

**Yapıldı (davranış korunarak):**
- `dokum.sph_divergence_cozucu` AyarSistemi kaydı, **varsayılan KAPALI** (ölçülen doğru yol).
- `dolumBaslat` GPU/CPU ayrımından ÖNCE geçiriyor (partikül kaydıyla aynı yer).
- **Kütüphane varsayılanı `divergenceCozucu=true` KALDI** (eski davranış → mevcut
  çağıranlar/testler etkilenmez; `voxel_kirp` precedent'i).
- `sph_dolum.hpp` yorumu ölçüm tablosuyla düzeltildi.

**⚠️ DÜRÜSTLÜK NOTLARI (kaydet, saklama):**
- **Div kapalı TAM yakınsama SAĞLAMIYOR**: maksHız 1.674 → 5.091 → 7.317 hâlâ büyüyor
  (ama div açıkta 53×, kapalıda 4.4×). Felaketi kaldırıyor, yakınsamayı çözmüyor.
  Kalan büyümenin bir kısmı emitter kuantalanması olabilir (türetme: 2.3×).
- **Ölçüm literatürle ÇELİŞİYOR**: DFSPH makalesi (Bender & Koschier) divergence-free
  çözücüyü kararlılık + büyük adım için önerir. Bizde tersi çıktı.
- **Mekanizma HÂLÂ bilinmiyor.** İki bariz açıklama kodda elendi: partikül-yetersizliği
  koruması VAR (`TimeStepDFSPH.cpp:428` numNeighbors<20 → densityAdv=0), emitter
  warm-start sıfırlanıyor (`SimulationDataDFSPH.cpp:109-110`).
- **Tek geometride** (ince dikey cidar) ölçüldü. Başka geometride doğrula.
- Kalıcı test: h=2mm A/B **9 dakika** sürüyor → pakete konamaz. Ucuz tekrar üretim
  aranıyor (prob koşuyor). Bulunamazsa test yerine ölçüm tablosu yorumda kalır.

### Sıradaki turlar — 1 NUMARA ARTIK NET
1. 🚨 **SINIR MODELİ: Akinci2012 (voxel merdiveni) → Bender2019 volume map (gerçek
   BREP yüzeyi).** Tur 5'in baş şüphelisi; literatür bu kusuru tam olarak tarif
   ediyor ve çözümü zaten vendored. **Kesin test = A/B: ıraksama kayboluyor mu?**
   - `sim->setValue<int>(BOUNDARY_HANDLING_METHOD, ENUM_BENDER2019)` +
     `BoundaryModel_Bender2019` + `Discregrid::CubicLagrangeDiscreteGrid`
     volume map'i **`kafes.parcaUcgen`**'den kur (voxel yüzlerinden DEĞİL).
   - ⚠️ AyarSistemi bayrağı (`dokum.sph_sinir_volume_map`), **varsayılan ESKİ yol**.
   - ⚠️ ÖLÇ: maksHiz h=8/4/2'de yakınsıyor mu? Kütle korunuyor mu? Süre ne oldu?
     (volume map ön-hesabı maliyetli — kur bir kez, ölç.)
   - ⚠️ `sinirPartikulSayi` çıktısı ve `sinirPartikulOrnekle` eski yolda KALMALI.
   - Beklenti (TAHMİN, ölçülecek): bu ayrıca (1)/(3) şikayetlerine de iyi gelir —
     akışkan sınırı voxel merdiveni değil gerçek yüzey olur.
   (a) ve (b) ELENDİ (Tur 5). (d) A/B sonucu beklemede; `basincHata` 1e-3 tabanlı
   olduğu için o yoldan kurtarma zaten kapalı.
2. Konservatif voxelize (bayrak arkasında) — geometri tarafı, bundan bağımsız.
3. `kur(pay=0.4)`: kalıp payı res bütçesinin %45'ini yiyor. Maliyet res^3.6 → pay
   **1.8^3.6 ≈ 7×** boşa maliyet olabilir. ÖLÇ.
4. SPH akışkan görünümü (RUNTIME TEST) — ama (1) çözülmeden "su gibi" olmaz.

⛔ **SPLAT'I YAPMA** (Tur 3'ün önerisiydi, Tur 4'te çürüdü): kırpma fizikle hizalı,
splat yalnız akışı geometriden kaba yapmaya izin verir = kalite takası.

⚠️ **Fikri'ye söylenecek (dürüstlük):** Tur 1'de "çözünürlüğü 180 yap" dedim. Bu
geometri için doğru ama **SPH kipinde** kabul edilemez süreye çıkarır. İki mod ayrı
tavsiye ister: Hızlı cephe → res yüksek olabilir; Gerçek SPH → res düşük tutulmalı
(veya önce zincir kırılmalı).

## 🚨 2026-07-16 — "kalıbın sadece burasını dolduruyor" = KAFES PARÇAYI GÖRMÜYOR
Fikri ekran görüntüsü: koca döküm parçası, dolan tek küçük göbek. Paneldeki
kanıt: **"Doluluk 100.0% (12/12 hücre)"** → `dolanHucre/toplamMetal`
(`dokum_penceresi.cpp:1917`), yani **parçanın TAMAMI kafeste 12 metal hücre**.
Dolum çözücüsü doğru çalışıyor; o 12 hücreyi gerçekten dolduruyor.

**Kök neden:** `kafesiSinifla` (voxelize.cpp:69) **MERKEZ** tabanlı —
`noktaIcinde(corba, kafes.merkez(i,j,k))`. Hücre ancak MERKEZİ katının içindeyse
metal olur. Cidar h'den inceyse hiçbir merkez içeri düşmez → bölge kafeste
**tamamen yok**; geriye yalnız en kalın göbek kalır.
**Çarpan:** `kur(..., pay=0.4)` AABB'yi her yönde %40 büyütür → `h = (en uzun
eksen × 1.8) / çözünürlük`. Kullanıcı "40" yazınca parça en uzun eksende **40
değil ~22 hücre** alır. ÖLÇÜLDÜ: 400mm parça + çözünürlük 40 → **h = 18.00mm**.

**⚠️ HİPOTEZ ÇÜRÜDÜ (ölçüm düzeltti):** "kaba kafes ince cidarı kaybeder"
sandım — yarısı doğruymuş. ÖLÇÜLDÜ (400×300 plaka, h=18mm):
| cidar | kapsama |
|---|---|
| 2mm | **%0.0** (parça yok — Fikri'nin durumu) |
| 8mm | **%213.8** (kaybolmadı, tek hücre katmanına oturup **ŞİŞTİ**) |
| 40mm küp @res40 (h=1.8mm) | %97.0 (sağlıklı, yanlış alarm yok) |
| 2mm @res640 (h=1.12mm) | %56.2 (çözünürlük artınca geri geliyor) |
Hata yönü **hizalanmaya** bağlı (±h/2 per yüzey). Yani metrik ~0'ı yakalar,
şişmeyi yakalayamaz.

**Yapıldı (uyarı — kalıcı çözüm DEĞİL):** `corbaHacim()` (diverjans) +
`kafesParcaKapsama()` (voxel metal hacmi / gerçek parça hacmi) + panelde
Doluluk'un ALTINDA kırmızı şerit: *"Kafes parçanın yalnız %X'ini görüyor
(hücre N mm) — ince cidarlar kafeste YOK"*. Eşik `dokum.kapsama_uyari_esik`
(0.5; 0 = kapalı). `VoxelKafes::hMesh()` accessor'ı eklendi (çağıranlar
`merkez(1,0,0)−merkez(0,0,0)` ile türetiyordu, nx()==1'de çöküyor).
Test: `g2_ince_cidar_kapsama_kaybi` (yukarıdaki 4 ölçümü sabitler).

**Fikri'ye anlık çözüm:** Kurulum sekmesi → *Çözünürlük (hücre)* değerini
büyüt. Hedef: **h ≤ en ince cidarın yarısı**. Gereken ≈ `(en uzun eksen × 1.8)
/ (en ince cidar / 2)`.

**⛔ KALICI ÇÖZÜM AÇIK — konservatif voxelize** (hücre katıyla KESİŞİYORSA metal,
merkez şartı değil). Fizik sözleşmesini değiştirir (Ic/Sinir sayısı, Chvorinov
ölçeği, `voxel_kirp`/`parcaSdf` görselleri) → AyarSistemi bayrağı arkasında,
varsayılan eski yol. **Tek turda yapılmaz; ölçerek gir.**

## ✅ 2026-07-16 — partikül görseli EKLENDİ (commit yok, RUNTIME TEST bekliyor)
Aşağıdaki "önerilen iş" uygulandı; hücre binning'i fizik için **aynen** kaldı.
- `SphPartikul{konum,hız,sıcaklık}` (20B) + `SphDolumKare.partikul` +
  `SphDolumAyar.partikulKaydet` (**kütüphane varsayılanı KAPALI** = eski davranış).
  Yakalama **CPU + GPU** yollarının ikisinde de (GPU'da konum/hız zaten host
  aynasında → ek indirme yok).
- `partikulMeshKur()` (voxel_gorsel): partikül başına **oktahedron blob** (6 vertex /
  8 üçgen). Mevcut `hazirMeshGuncelle`/`dinamikMesh` scrubber yoluna girer.
- fikocad: `DolumGorunum::Partikul` (enum SONA) + panel modu (kare partikül
  taşımıyorsa kip listelenmez) + lejant birimi m/s. Bayrak `dolumBaslat`'ta
  GPU/CPU ayrımından ÖNCE geçer (kare serisi sonradan zenginleşemez).
- AyarSistemi: `dokum.sph_partikul_kaydet` (açık) · `_alt_ornek` · `_yaricap_oran`
  (0.30) · `_ciz_alt_ornek`. Bellek kolu ile çizim kolu ayrı.

**⭐ ÖLÇÜLDÜ** (`sph_partikul_kaydi_hucre_alti_detay`, 24mm kutu / 8 hücre / h=5.40mm):
- Aynı hücredeki partiküller arası en büyük mesafe **5.909mm = 1.09·h** → binning
  **tam bir hücre dolusu yapıyı** tek u8'e eziyordu (teşhis doğrulandı).
- Kareler arası ortalama yer değiştirme **5.282mm = 0.98·h** (çalkantı var).
- **Fizik birebir korundu**: `deterministik=true` A/B → `doluluk` + `partikulSayi`
  açık/kapalı bit-birebir aynı.
- Test: sph **242 → 870**, dokum **2224 → 2295**, sahne 1231, geometri 796, 0 kaldı.
- 🩺 Test yorumuna önce TAHMİNİ değer yazıldı, ölçüm farklı çıktı → düzeltildi.
  **Önce koş, sonra yaz** (bu dosyanın kendi dersi, yine geçerli).

⚠️ RUNTIME TEST: "Gerçek SPH (dk)" ile çöz → "Partikül bulutu (çalkantı)" kipi.
⚠️ PERF açık: blob mesh partikül başına 6 vertex — 31k partikülde ~187k vertex/kare
scrub'da yeniden kurulur. Kasarsa önce `_ciz_alt_ornek` ölç, sonra optimize et.

## 🎯 2026-07-18 — "BÜYÜK KALIBI TAM DOLDURAMIYORUM" ÇÖZÜLDÜ (kütle + havuz tavanı)
Fikri runtime denedi: küçük kalıplar doluyor, büyükler ASLA %100 olmuyor. İKİ sessiz
mekanizma bulundu, ikisi de ölçümle kilitlendi:

**1. Giriş kütlesi denetimsizdi (ASIL SEBEP).** Dolum çözücüleri KÜTLE KORUNUMLU
(`dolumCoz` kaynaklar sürümü: teslim hacim = debi×pencere; SPH: emitter kütlesi).
Panel giriş varsayılanı **5 kg** — 400mm AlSi7Mg küpü ~170 kg ister. Kütle bitince
cephe durur → misrun; hiçbir yer "kütle yetmedi" demiyordu. Küçük kalıpta 5 kg
yettiği için fark edilmiyordu.
→ `kafesMetalHacimM3()` (voxelize) + panel Girişler altında KIRMIZI şerit
"Girişler X kg < kavite Y kg — kalıp DOLAMAZ" + **"Uygula: Y×pay kg"** düğmesi
(orantılı ölçekler + süreyi √W'den yeniler). Pay `dokum.giris_kutle_pay` (1.05).
Kavite hacmi önbellekli (dolum.hazir→toplamMetal bedava; yoksa (n,h) anahtarlı tek
tarama — her-kare O(N) yasak). Test `l2_dolum_giris_kutle_yetersiz_misrun`:
5 kg → misrun + dolan=teslim hacim; kavite×1.05 → %100. Misrun mesajı da düzeldi
("metal yetmedi veya erişemedi").

**2. SPH havuz tavanı sessizdi.** `maksEmit = clamp(1.3·V/Vp, 64, maksPartikul=400k)`
— gereken tavanı aşınca emitter havuz dolunca SUSAR, doluluk yarım kalır. Formül
CPU+GPU'da KOPYALIYDI (yarıçap tuzağının aynısı) → `sphEmitPlani()` TEK KAYNAK
(sph_dolum.hpp; CPU+GPU+panel çağırır). Panel Dolum sekmesinde kırmızı şerit:
"gereken ~Nk, tavan 400k — dökülen metalin ancak %X'i simüle edilir". Tavan artık
AyarSistemi: `dokum.sph_maks_partikul`. Test `sph_emit_plani_tavan_kirpma`
(formül sözleşmesi + çözücü A/B: havuz/4 → kütle ~1/4, dolan azalır).
⚠️ İlk kirpildi tanımı u32 kesmesine takıldı (255.8→255 "kırpıldı" sanıyordu) —
kırpılma TAVANA göre tanımlanır, test yakaladı.

Test tabanı: dokum 2338→**2347**, sph 885→**894**, sahne 1231, geometri 1028 — 0 kaldı.
⚠️ RUNTIME TEST: büyük parça + Kurulum→Girişler kırmızı şerit→"Uygula" → Hızlı
cephe %100 doluyor mu; SPH'de tavan şeridi çıkıyor mu. COMMIT YOK.

## 🧱 2026-07-18 — DERECE + KUM GÖRSELİ (kum döküm profesyonel kurulum)
Fikri: "kumları da dereceleri de çizebilir miyiz, eksik bir şey kalmasın".
**GÖRSEL katman — fizik ETKİLENMEZ** (kum bölgesi kafeste zaten kalıp payı):
- `dokum::Derece` (dokum_kurulum.hpp, DokumKurulum.derece): göster, yan/üst/alt
  kum payı, duvar, mala z (oto = parça ortası). Kurulum serileştirilmiyor →
  alan eklemek güvenli (oturum içi).
- Mesh üreticiler (saf, test-kilitli `u2_kurulum_derece_mesh`):
  `kurulumKutuMesh` (12 üçgen) + `kurulumCerceveMesh` (4 duvarlı çerçeve,
  üst/alt AÇIK — gerçek derece; köşeler x-duvar y-taşmasıyla kapalı).
- Sahne: `kurulumDugumYenile`'de 4 düğüm — "Alt/Üst Derece Kumu" (kum rengi,
  mala'da ±0.4mm aralık → ayrım çizgisi okunur) + "Alt/Üst Derece" (çelik
  çerçeve). Mevcut saydam önizleme yolu (0.45), YENİ pipeline yok.
  **Yalnız kum kalıpta** (`kalip.gecirgenlik > 1e-13`; kokilde derece yok) —
  kalıp combo değişince `kurulumDugumYenile` çağrılır.
- Panel: Kurulum → "Derece (kum kalıp)" bölümü (göster + paylar + mala oto/elle).
- AyarSistemi (yeni sim varsayılanları): `dokum.derece_goster`(açık) ·
  `_kum_pay`(50) · `_ust_pay`(60) · `_alt_pay`(60) · `_duvar`(18);
  `dokumDereceVarsayilanUygula()` → `DokumSistemi::ekle`.
Test: dokum **2357**, 0 kaldı. ⚠️ RUNTIME TEST: kum kalıp seç → derece/kum
görünüyor mu; kokil seçince kayboluyor mu; mala aralığı okunuyor mu. COMMIT YOK.

### 07-18 RUNTIME geri bildirimi → 3 düzeltme (Fikri: "çapraz duruyor + bu kadarcık doluyor")
1. **Derece DÜNYA-eksenli oldu**: mesh gövde-yerel AABB'den kurulup düğüm hedef
   dönüşümünü miras alıyordu → dönük parçada derece ÇAPRAZ. Şimdi yerel AABB 8
   köşesi dünyaya taşınır, kutular dünya uzayında kurulur, düğüm dönüşümü kimlik.
   Mala z artık DÜNYA z'si.
2. **Seçim modunda kum tıklaması YUTULUR**: koca saydam kum bloğu her ışını
   yakalıyordu → giriş kum ÜST YÜZEYİNE oturuyordu (ekran görüntüsünde koniler
   kumun üstünde). `kurulumKonumSec` geri çağrısında derece düğümü vuruşu atlanır
   (K1 gereği gorunur'a dokunulmadı — görünürlük tek yoldan kuralı).
3. **"Giriş kavitenin DIŞINDA" sarı uyarısı**: SPH emitter'ı metal hücreye SNAP
   ETMEZ (Hızlı cephe eder) → kavite dışı giriş = partiküller kaviteye giremez =
   "bu kadarcık doluyor"un muhtemel kökü. `kurulumDugumYenile`'de (kare-başı
   değil) enYakinMetalHucre uzaklığı > `dokum.giris_uzak_esik_h`(2.0)×h ise
   giriş satırında uyarı. Fikri'nin vakası: girişleri parça yüzeyinde YENİDEN
   seçmesi gerek (eski girişler kum yüzeyinde kalmış olabilir).
Test: dokum 2357/0. RUNTIME: girişleri yeniden seç → kırmızı kütle şeridi →
"Uygula" → dolum %100 mü; derece dik duruyor mu.

## 🔁 2026-07-18 17:23 — OTONOM SEFERBERLİK (cron d911cd4c, 5dk, mühlet 19:23)
Fikri 2 saat mühlet + GUI testi İZNİ verdi ("programı açıp test edebilirsin").
Test aracı: `fikocad.exe --senaryo-dokum` (kutu→katılaşma→dolum→PNG; çıkış 0,
PNG'ler Claude tarafından GÖZLE inceleniyor — ilk kez gerçek runtime döngüsü).

### Tur 1 ✅ (17:23-17:5x) — senaryo koştu, 2 GÖRSEL bug bulundu+düzeltildi
1. **Derece panel açılmadan HİÇ kurulmuyordu** → `DokumSistemi::ekle` sonunda
   `kurulumDugumYenile` (sim eklenince kum+derece hemen sahnede; senaryo PNG'de doğrulandı).
2. **Porozite "her yer kırmızı" GÖZLE DOĞRULANDI ve düzeltildi**: sabit %0.5 izo
   eşiği parçayı kaplıyordu → `poroziteOtoEsik()` (porozite.cpp, saf; dolu
   hücrelerin üst yüzdeliği, test `oto_esik_yuzdelik`) + ilk blob kurulumunda
   veriden türet (`dokum.porozite_oto_esik` AÇIK vars., `_esik_yuzdelik` 0.90)
   + panel "Oto eşik" düğmesi. Senaryo PNG: kırmızı kaplama → merkezde TEK yerel
   baloncuk (60mm küpün fiziksel doğrusu). Elle değiştirilen eşik korunur.
3. **Kum saydamlığı** `dokum.derece_kum_saydamlik` (0.18) — kum parçayı boğmuyor,
   dolum/mala PNG'de net. **Kum ihtiyacı raporu**: Derece bölümünde "Derece
   A×B · alt+üst mm" + "Kum ≈ X L (Y kg)" (`dokum.kum_yogunluk` 1550).
⚠️ Derleme tuzağı yaşandı: eşzamanlı ikinci ninja obj kilitledi (Permission
denied) → süren ninja'yı bekle, sonra derle. Test: porozite 51→**57**, dokum 2357.
SIRADAKİ TURLAR: mala/derece 🎯 sahneden seçim · hava/gaz test tabanları koş
(gerilme/hava/katman/sivi) · SPH senaryo yolu yok (senaryo yalnız Hızlı cephe) ·
"Oto eşik" ilk kurulum yolunun senaryodaki etkisini katman kipinde de denetle.

### Tur 2 ✅ (~18:0x) — MAGMA referansı incelendi → baloncuk rengi + tek parça derece
Fikri'nin MAGMA videolarından kareler çıkarıldı (ffmpeg, WhatsApp klasörü):
hedef = koyu x-ray gövde + DEĞERE göre renkli küçük baloncuklar + sayısal lejant.
1. **Baloncuk rengi = bölge şiddeti**: `PoroziteSonuc.bolgeId` (BFS'te bedava
   dolduruluyor; test `bolge_id_haritasi`) → panelde renkAlan = bölgenin maksPor.
   İKİ görsel tuzak senaryo PNG'siyle yakalandı: (a) Inferno 0-10 kilidi %3'ü
   siyah-mor dibe eziyor → Turbo + veri-tepesine kilit (en kötü baloncuk parlak
   uç); (b) MC vertex interpolasyonu baloncuğu BENEKLİYOR (bölge 3.37 ↔ dış 0)
   → TEK genişletme geçişi dış halkaya bölge değerini kopyalar → tek renk baloncuk.
   Senaryo PNG: temiz turuncu küre ✓.
2. **Tek parça derece** (Fikri: "konulup kumlanıyor, ters çevrilip kalanı"):
   `Derece.tekParca` + panel "Tek parça" onay kutusu + `dokum.derece_tek_parca`.
   Tek çerçeve tüm yüksekliği sarar; kum yine 2 blok (mala hattı her yöntemde var).
Test: porozite 57→**66**, dokum 2357 — 0 kaldı. Senaryo çıkış 0.
NOT (Fikri): "kullanım limiti %30'u aşarsa durdur (haftalık)" — Claude oturum
içinden kota yüzdesini OKUYAMAZ; mühlet 19:23 + kısa turlarla idare ediliyor,
kota /status'tan izlenmeli.

### Tur 3 ✅ (17:59-18:0x) — hava/gaz zinciri test taban taraması + mala 🎯
1. **Stabilite taraması**: hava 41 · sivi 49 · katman 488 · gerilme 898 —
   HEPSİ 0 kırmızı (dokum 2357, porozite 66, sph 894 önceki turlardan yeşil).
   "Hava boşluğu/gaz/dolmayan yer" zincirinin test tabanı SAĞLAM.
2. **Mala düzlemi ÇİZİMDEN seçim**: Derece bölümüne 🎯 (kurulumKonumSec kalıbı)
   — parça yüzeyine tıkla → tıklanan noktanın DÜNYA z'si malaZMm olur, malaOto
   kapanır, derece anında yenilenir. Derece/kum tıklamaları yutulur (Tur 1 filtresi
   burada da geçerli). Derleme yeşil.
⚠️ Derleme notu: exit 255 = vswhere uyarısının cmd çıkışına sızması; gerçek
sonuç "ninja: no work to do" / Linking satırından okunmalı.

### Tur 4 ✅ (18:1x) — SPH "çalkantı" yolu SENARYOYA eklendi (ilk uçtan uca doğrulama)
Senaryo yalnız Hızlı cepheyi test ediyordu; partikül bulutu (kullanıcı yolu:
sphKullan + dolumBaslat + DolumGorunum::Partikul) HİÇ otomatik doğrulanmıyordu.
- Yeni adımlar case 20-22 (case 15 GPU-izole testinden sonra, MDI'dan önce):
  silindir simi SPH kipine alınır → dolumBaslat (GPU fast-path) → partikül
  bulutu görseli → **09b_sph_partikul.png**. Kare/partikül sayısı loglanır;
  partikül kaydı boşsa HATA loglanır (sessiz gerileme yakalanır).
- ÖLÇÜLDÜ (senaryo.log): GPU SPH **31.252 partikül, 240 adım, maksHız 2.78 m/s
  (fiziksel makul!), 3681 ms** (RTX 4090); kullanıcı yolu kare=60, son karede
  31.252 partikül ✓. PNG'de silindir dolumu + çalkantılı üst yüzey GÖRÜLDÜ.
- Dolum 1844/2064 iç hücre (%89) — oto maksSure (0.95s) penceresi; izole
  senaryo için kabul, tam dolum istenirse süre/pencere uzatılır (not).
🚨 **DERLEME TUZAĞI KÖKÜ BULUNDU**: `cmd ... | Select-String | Select-Object
-First N` boru hattı N eşleşmede kapanınca cmd/ninja YETİM kalıp arkada koşmaya
devam ediyor → sonraki derlemede obj "Permission denied" + exe kilidi. Doğru
kalıp: `$out = cmd ...` (tam yakala) sonra filtrele. İki kez yaşandı, kökü bu.

### Tur 5 ✅ (18:2x) — DOLMAYAN BÖLGE RAPORU (misrun teşhisi tıkla-işaretle)
"Dolmayan yerler stabil çalışsın"ın son halkası: kullanıcı NEREsinin dolmadığını
görmüyordu (yalnız % + misrun metni).
- Motor: `dolmayanBolgeler(kafes, dolum)` (dolum.hpp/cpp, saf BFS) —
  varisZamani<0 metal hücre bağlı bileşenleri; `havaHapsi` ayrımı (hapsoldu
  işaretli → "vent koy", değilse "kütle/erişim"). Büyükten küçüğe sıralı.
  Test `l3_dolmayan_bolge_raporu`: kütle-yetersiz küpte toplam hücre birebir
  (toplamMetal−dolan) + kokil hava kafesinde havaHapsi=true bölge.
- Panel: Doluluk/misrun altında ilk 5 bölge listesi (hacim cm³ + hücre + sebep
  rengi) + 🎯 tıkla → `dolmayanBolgeIsaretle` (turuncu işaret küpü + kamera
  uçuşu; porozite işaret yuvası ortak). Önbellek `g_dolmayanBolge`
  (dolan/toplam anahtarı — kare-başı O(N) yok).
Test: dokum 2357→**2364** — 0 kaldı. fikocad derlendi.

### Tur 6 ✅ (18:3x) — FİNAL DOĞRULAMA + SEFERBERLİK KAPANIŞI (mühletten önce)
- Temiz senaryo: çıkış 0, 16 PNG, senaryo.log HATASIZ. 03 (katılaşma gradyanı
  sıcak merkez ✓) ve 07 (X-kesit yarı dilim ✓) gözle doğrulandı; 02/04/09b
  önceki turlarda doğrulanmıştı.
- Final test tabanı (hepsi 0 kırmızı): dokum **2364** · porozite **66** ·
  sph **894** · hava 41 · sivi 49 · katman 488 · gerilme 898 · sahne 1231 ·
  geometri 1028. Cron `d911cd4c` silindi (iş bitti, mühlet 19:23 dolmadan).
- COMMIT YOK. RUNTIME TEST (Fikri): büyük parça + gerçek akış — kütle "Uygula",
  dolmayan bölge 🎯, mala 🎯, tek parça derece, "Oto eşik", partikül bulutu.

## 🚨 2026-07-18 ~18:5x — Fikri: "hiç sıkıntı yok ama doldurmuyor" → TEŞHİS KATMANI
"Sıkıntı yok" demesi asıl ipucuydu: UYARILAR EKRANINA ULAŞMIYORDU —
kütle şeridi yalnız Kurulum sekmesindeydi; SPH'nin sim-süresi tavanına çarptığı
HİÇBİR yerde raporlanmıyordu. Tahminle düzeltme YAPILMADI; bir sonraki koşuda
nedeni ekrana yazacak teşhis eklendi:
1. `kutleDenetimSeridi()` ortak fonksiyon → Kurulum VE Dolum sekmesi başında
   (hangi sekmede çalışırsa çalışsın kırmızı şerit + "Uygula" görünür).
2. `SphDolumSonuc.maksSureS` (CPU+GPU doldurur) → Doluluk satırı altında
   **"Neden: …"** şeridi (öncelik: SPH süre doldu → kütle → hava hapsi →
   erişim/eşik). SPH süre teşhisi: son kare ≥ 0.95×maksSureS.
Test: dokum 2364/0, senaryo çıkış 0 + log hatasız; sph paketi arka planda
yeniden koşuyor (alan ekleme — davranış değişikliği yok).
▶️ Fikri'nin sıradaki koşusunda "Neden:" satırı kök nedeni söyleyecek; ona göre
kalıcı düzeltme (süre tavanı otomatiği / çözünürlük önerisi) yapılacak.

## 📸 2026-07-18 ~19:0x — Fikri EKRAN GÖRÜNTÜSÜ: iki kök neden EKRANDA, ikisi de aksiyonlandı
Görüntüde: trapez kalıp bloğu, res **10** (h=131mm!), 2 giriş 500'er kg, koniler
kum ÜSTÜNDE havada; şeritler ÇALIŞIYOR: "h=131.57 ama en ince cidar 1.21 →
res ≥ **2169**" + iki giriş de "kavitenin DIŞINDA". Derece/kum raporu doğru
(831×631, 178.3 L / 276 kg).
1. **"Kaviteye taşı" düğmesi** (giriş DIŞARIDA uyarısının yanı): tek tık →
   giriş en yakın metal hücre merkezine taşınır (`enYakinMetalHucre`), önizleme
   yenilenir. Fikri uyarıyı görüp elle yeniden seçmiyordu — artık gerek yok.
2. **Cidar önerisi p10**: "Cidarı ölç" ham MİNİMUM kullanıyordu → 1.21mm'lik
   pah/delik kenarı "res 2169" absürtlüğüne kilitliyordu (uyarı işlevsizdi).
   Artık pozitif örneklerin ALT YÜZDELİĞİ (`dokum.cidar_yuzdelik`, vars. 0.10;
   0 = eski min). Metin "tipik en ince cidar (p10)".
Test: dokum 2364/0. ⚠️ fikocad.exe LINK EDİLEMEDİ — **uygulama Fikri'de AÇIK**
(LNK1104); kapanınca linkleyen arka plan görevi kuruldu (öldürülmedi!).
YENİ DERLEME uygulama kapatılıp açılınca devreye girer.

## 🔍 Fikri: "Kaviteye taşı diyorum uyarı gitmiyor + doldurmuyor" → TEŞHİS: METAL HÜCRE YOK
"Taşı"nın işlemsiz kalmasının TEK yolu `enYakinMetalHucre == -1` = kafeste HİÇ
metal (Ic|Sinir) hücre yok — bu "doldurmuyor"u da tümüyle açıklar (dolacak hücre
yok). res 10'da (h=131mm) merkez-sınıflaması bu parçada muhtemelen hiçbir hücre
yakalayamıyor (veya STEP açık kabuk → ray-parity iç bulamıyor). Kendini-teşhis eklendi:
1. Kurulum'da **"Kafes: N metal hücre"** satırı (önbellekli,
   `metalHacimM3Onbellekli` ortak yardımcıya çıkarıldı); N=0 → KIRMIZI şerit
   "parça kafeste YOK — çözünürlüğü artır / kapalı katı denetle".
2. "Kaviteye taşı": metal hücre yoksa düğme yerine kırmızı "taşınamaz: kafeste
   metal hücre YOK" metni (sessiz no-op bitti).
Beklenen akış (Fikri): çözünürlüğü öneriden uygula (p10 cidar) → "Kafes: N"
satırı >0 olunca "Kaviteye taşı" çalışır → dolum. dokum 2364/0; exe linki
uygulama kapanınca (arka plan görevi bekliyor).

## ✅ 2026-07-18 ~19:2x — Fikri: DOLUYOR! (%100, 220/220) + ŞİŞME uyarısı eklendi
Ekran görüntüsü: Gerçek SPH, dolum 4.8s, **Doluluk %100 (220/220)**, soğuk
birleşme/hava kapanı yok — "doldurmuyor" ZİNCİRİ KAPANDI (çözünürlük + giriş
konumu + teşhis şeritleri işledi).
KALAN KALİTE SORUNU (görüntüden ÖLÇÜLDÜ): parça 15.213 cm³ ama 220 hücre ×
(65.8mm)³ ≈ 62.7 L = **×4.1 ŞİŞME** — ince plakalar tek koca hücreye yapışık →
sıvı görseli parça şekline benzemiyor + maksHız 29.76 m/s temsilî. Kapsama
uyarısı yalnız <%50 tarafını yakalıyordu (bilinen sınır) → **şişme tarafı da
eklendi**: `dokum.kapsama_sisme_esik` (vars 1.5; 0=kapalı) — Kurulum'da SARI
şerit "Kafes parçayı ŞİŞİRİYOR: N hücre = parça hacminin X katı (h=... mm)".
Normal durumda "Kafes: N metal hücre (parça hacminin %X'i)" satırı. Kapsama
hesabı `metalOnbellekAl` önbelleğine bağlandı (kare-başı O(N) yok).
dokum 2364/0; exe linki yine uygulama kapanınca (Fikri'de açık — öldürülmedi).

## 🎯 YENİ SEZON BURADAN BAŞLASIN — SPH akmıyor değil, GÖRÜNMÜYOR
Fikri (07-16): *"onlarınki ne güzel akarak çalkalanarak akıyor, bizimki öyle değil"*
(VkFluidSim demosuyla kıyasladı). **İki sorun üst üste:**

**1. Şu an SPH hiç koşmuyor.** Panelde "Hızlı cephe (sn)" seçili; `motor/dokum/src/dolum.cpp`
bir **Dijkstra** çözücüsü = **varış-zamanı** modeli. Momentum yok, hız alanı yok, serbest
yüzey yok → çalkalanacak fizik hiç kurulmuyor. Panel ipucu da yazıyor. Seçenek:
`dokum_penceresi.cpp:1782` → **"Gerçek SPH (dk)"**.

**2. ⭐ ASIL: SPH seçilse bile görülemez.** `SphDolumKare` (sph_dolum.hpp:82) yalnız
`std::vector<u8> doluluk` (hücre-başı) saklıyor. `sph_dolum.cpp:511-518` her karede
partikülleri hücrelere **sayıyor** ve **konumları atıyor**. Başlığın kendi yorumu:
*"partikül konumları voxel doluluk oranına haritalanır"*.
→ Jet, sıçrama, damla, çalkalanma — hepsi 3mm hücreye eziliyor.
→ **"Akmıyor" değil: akıyor, ama akış görüntüye hiç ulaşmıyor.**

⚠️ Körlemesine hata DEĞİL, bilinçli tasarım: hücre-başı doluluk katılaşma zincirinin
girdisi (varış zamanı → cephe sıcaklığı → `baslangicT` köprüsü). Fizik hücre istiyor;
görsel partikül istiyor ve o hiç eklenmemiş.

**ÖNERİLEN İŞ (ekle, sökme):** `SphDolumKare`'e kare-başı partikül konumu + nokta/küre
çizimi. Hücre binning'i fizik için aynen kalsın. Maliyet: 31.252 partikül × 60 kare ×
12 bayt ≈ 22 MB (f16 → 11MB, alt-örnekleme ile daha az). GPU SPH'de (`sph_gpu.cpp`,
Vulkan compute) konumlar zaten GPU'da → indirmeye gerek olmayabilir. Önce ham nokta
çizimiyle "gerçekten akıyor mu" görülsün, cila sonra.

### VkFluidSim değerlendirmesi: HAYIR, geriye gidiş
| | fikatia | VkFluidSim |
|---|---|---|
| CPU | **DFSPH** (SPlisHSPlasH, vendored) | — |
| GPU | **PBF** (kendi Vulkan compute, 7 shader) | WCSPH |
| Olgunluk | yayınlanmış kütüphane | 18 yıldız, 1 geliştirici, sürüm yok |
| Döküm fiziği | ısı kuplajı, cold-shut, oksit | YOK |

WCSPH üçünün en zayıfı ve derde **ters**: sert hal denklemi → çok küçük dt → "2mm küp
yavaş"ı kötüleştirir. Tek ilginç fikri (volume map sınır, Bender 2019) **zaten vendored**:
`ucuncu_taraf/splishsplash/SPlisHSPlasH/BoundaryModel_Bender2019.cpp`.
📌 SPH tutorial (Koschier/Bender/Solenthaler/Teschner) = kod değil **okuma** olarak
değerli: implicit viskozitenin küçük h'de patlaması + başabaş noktası tam onun konusu.
⚠️ SPH'yi değiştirmek perf sorununu **çözmez** — kök neden ayarlarda (r=h/4 → partikül
sayısı boyuttan bağımsız; implicit viskozite dt·ν/h²), çözücüde değil.

## Sıradaki işler (ölçüm verisi hazır olanlar önce)
1. **SPH perf** — `viskoziteImplicit=true` varsayılanı **2mm'de zararlı** (11034ms vs
   explicit 7423ms), 20mm'de doğru (3961 vs 15341). Tek boyutta benchlenmiş. Başabaş
   noktasını 2/5/10/20/50mm örnekleyip h'ye göre otomatik seç → AyarSistemi.
   ⚠️ Kararlılık `sph_implicit_visko_kararli` testiyle korunmalı.
   ⚠️ Ölçümler `deterministik=true` (tek thread) — çok-thread'de başabaş kayabilir.
2. **Porozite eşiği** — `poroziteBaloncukGoster` varsayılan %0.5 → hücrelerin **%58'i**
   üstünde → izo-yüzey parçanın ~%83'ünü (doğrusal) kaplıyor → "her yer kırmızı".
   Alan SAĞLAM (Niyama 0.044–414.6, porozite %0–%3.37, ort %0.77). Eşiği veriden türet
   (maks×0.6 veya yüzdelik), kabul bandı %2-20 → AyarSistemi.
3. **`FsModel::Lever` = `Lineer` kopyası** — gerçek Lever değil, enum yalan söylüyor.
   Düzeltmek `katiOran` + `sicaklik()` + GPU shader `katilasma_fdm.comp` üçünü **birlikte**
   tutmayı gerektirir. Varsayılan `Lineer`, değişmemeli.
4. **`Alasim::katiOranTurev()` ölü kod** — hiçbir yerden çağrılmıyor.
5. **Görsellerde legend/renk skalası/birim YOK** — dökümhaneye gösterilecek raporun önündeki
   ilk engel (ticari değer tarafı).
6. **Kalıp ısınmıyor** — Robin sınırı hep `kalip.tBaslangic`'e karşı; kalıp hücreleri
   kafeste var ama ÇÖZÜLMÜYOR. `etkinH(t)` kısmen telafi ediyor. En büyük fizik boşluğu —
   ama enerji sınırı fikatia'yı çürütmediği için ACELE DEĞİL, önce ölç.
7. **k(T)/c(T)** sabit → sıcaklığa bağlı olmalı (özellikle dökme demir).
8. **Elmer oracle'ı bitir** → `docs/arastirma/elmer-dogrulama/README.md`

## ⛔ KALİBRASYON BOŞLUĞU (kodla kapatılamaz)
`nyKritik` eşikleri (1.0/0.6/0.5), Carlson-Beckermann parçalı eğri kırılma noktaları
(2.0/1.0/0.7/0.1), `gazKatsayi`, kum `arayuzH=1000` — hepsi literatürden makul BAŞLANGIÇ
değerleri (yorumda zaten "vekil" diye dürüstçe yazılmış). Doğruluk %90 bunlarda yaşıyor.
**Gereken: termokupl eğrisi veya kesilmiş parça + gerçek porozite yeri.** Fikri'de var,
Claude'da yok. 3 tur soruldu, cevap gelmedi.

## ⭐ Bu oturumun asıl dersi
**ÖLÇ, TAHMİN ETME.** Claude 3 kez yanıldı, hepsini ölçüm düzeltti:
- Chvorinov'da "3.30× sapma" → enerji dengesi düzgün kurulunca **1.44**
- Scheil'de "bug var" → kod doğruydu, **yorum** yanlıştı
- Porozitede "görselleştirme bozuk" → alan sağlamdı, **eşik** kötüydü

Bir mekanizma iddia etmeden önce A/B kur veya ölçüm probu yaz. Ölçülen değerleri test
yorumuna yaz ki bir sonraki kişi tahmin etmesin.

## Test tabanı (küçülmemeli)
dokum **2224** · sph **242** · porozite 51 · gerilme 898 · katman 488 · sıvı 49 · hava 41
· sahne **1231** · geometri **796**

Test exe'sinden önce: `$env:PATH = "D:\__sistem__\ProgramFiles\vcpkg\installed\x64-windows\bin;$env:PATH"`
