# Merkezi Süreç Yöneticisi — Tasarım (SALT-OKUMA SPEC, KOD YOK)

> Amaç: mevcut süreçler-arası **komut köprüsünü** (`SurecKopru` + `FikoSureclerPanel`) tam
> bir **Görev Yöneticisi + Merkezi Yönetim/Takip** sistemine dönüştürmek. Süreçler yalnız
> komut almasın; **sonlandırılabilsin**, her sürecin **olayları (OlayGunlugu)** merkezi panele
> **aksın**, **canlı durum** (PID/belge/uptime/bellek/meşgul) görünsün, komutlar **parametre +
> broadcast** taşısın. Bu, mevcut merkezi lisans/audit takibiyle (KomutCalisti → LisansSistemi)
> **tek-merkez izleme** altında birleşsin.
>
> Anayasa gereği: eklenen her sistem **makro + plugin + olay** erişilebilir doğar; yeni olay
> struct'ı `OlayTuru` enum'unun **SONUNA** eklenir (disk günlüğü sayısal kararlılığı korunur).

---

## 1. Mevcut Durum (İnceleme — somut dosya:satır)

### 1.1 `SurecKopru` — IPC köprüsü
`uygulama/fikocad/surec_kopru.hpp` + `surec_kopru.cpp`

- **Kayıt/keşif:** `%TEMP%\fikocad_surecler.txt`, satır formatı `pid\tbaslik\n`
  (`kayitYolu`, `surec_kopru.cpp:16`). İsimli mutex `fikocad_surec_kilit` ile çok-süreç
  koordinasyonu (`KayitKilit`, `:23`). Ölü PID süzme `pidCanli()` = `OpenProcess(SYNCHRONIZE)`
  + `WaitForSingleObject(...,0)` (`:33`).
- **Pipe:** her süreç kendi `\\.\pipe\fikocad_<pid>` **INBOUND** (yalnız oku) named pipe
  sunucusunu arka iplikte açar (`sunucuDongusu`, `:120`). Mesaj `PIPE_TYPE_MESSAGE`.
- **Protokol (BUGÜN):** tek yönlü, **yalnız komut ADI**. Mesaj literali `"komut\t<ad>"`
  (`gonder`, `:165`). Alıcı `\t` sonrasını komut adı sayar (`:136`), kuyruğa iter.
- **API yüzeyi:** `baslat(baslik)` / `durdur()` / `beklemedekiKomutlar()` (main-thread drain,
  `:149`) / `surecler()` (`:156`) / `gonder(pid,ad)` (`:161`) / `hepsineGonder(ad)` (`:172`) /
  `benimPid()`.
- **Sınırlar (bugünkü eksikler):**
  - Pipe **INBOUND** → tek yön; süreç merkeze cevap/olay **gönderemez**.
  - Mesaj **serbest-biçimli değil**: tip yok, parametre yok, korelasyon yok.
  - `baslik` kayıtta **statik** (`"FikoYT #<pid>"`, `main.cpp:433`) — belge adı, uptime,
    durum, bellek **yok**; heartbeat yok (ölü tespiti yalnız `SYNCHRONIZE` handle ile).
  - Güvenlik: pipe ACL varsayılan; "yalnız fikocad" doğrulaması yok.

### 1.2 `FikoSureclerPanel` — mevcut UI
`uygulama/fikocad/fiko_panel.hpp:198-286` (menü kaydı `main.cpp:1832-1839`, "Araçlar → 🖧 Süreçler")

- Gösterdiği: süreç sayısı, PID + başlık tablosu (2 kolon, seçilebilir satır `hedefPid_`),
  komut filtre listesi (menü komutlarından), "Yeni Süreç", "Seçili sürece gönder",
  "Hepsine gönder".
- Yapamadığı: **sonlandırma yok**, **olay akışı yok**, durum/uptime/bellek yok, parametre yok,
  odakla yok, sıralama yok.

### 1.3 Merkezi olay + komut + lisans (birleştirme hedefi)
- `OlayGunlugu` — `motor/cekirdek/include/fiko/cekirdek/olay.hpp:464`. Tipli pub/sub +
  4096'lık **halka tampon** (`OlayKaydi{sira,zaman,tur,varlik,ozet[48]}`, `:89`). `abone<Olay>()`
  / `yayinla<Olay>()` / `kayitlar()` / disk `.fikolog` (`diskeYaz`, `:522`). Tür-başına
  **kalıcılık** bayrağı (`kalici`, `:530`) — yüksek-frekans türler diske yazılmaz.
- `OlayTuru` enum `:13-80` — **SAYAC** en sonda; yeni türler **sona** eklenir.
- `Cekirdek::komutCalistir()` — `cekirdek.hpp:40`. **TEK dispatch noktası**: lisans kapısı →
  `etkinMi` → çalıştır → `KomutCalisti` olayı yayınla (`:56`). IPC bugün bunu yeniden kullanır
  (`komutCalistir(o,"ipc")`, `main.cpp:1871`).
- `LisansSistemi` — `motor/cekirdek/include/fiko/cekirdek/lisans.hpp`. `KomutCalisti`
  dinleyip **kullanım sayacı** tutar (`bagla`, `:24`) + gate sağlar (`izinli`, `:44`) +
  kümülatif kalıcılık (`kullanimSerialize`, `:63`). App-global tek örnek `g_lisans`
  (`main.cpp:394`).

### 1.4 Süreç oluşturma
- "Dosya → Yeni Belge" = **yeni fikocad.exe süreci** `CreateProcessW(exeYol,...)`
  (`main.cpp:856-867`). hProcess/hThread **hemen kapatılıyor** → merkezde process handle
  saklanmıyor (sonlandırma için PID'den yeniden `OpenProcess` gerekecek).
- Pencere başlığı statik: `"FikoYT — Yeni Belge"` (`main.cpp:295`).
- `g_surecKopru.baslat(...)` `main.cpp:433`, drain `main.cpp:1868-1871` (yalnız ana pencere),
  `durdur()` `main.cpp:466`.

**Sonuç:** iskelet sağlam (kayıt + mutex + named pipe + main-thread drain + merkezi komut/olay
yeniden kullanımı) ama **tek yönlü + tek-tip (komut adı)**. Genişletme = protokolü çift-yönlü,
tip-çerçeveli yapmak + kayda canlı alanlar (heartbeat) eklemek + paneli dashboard'a evirmek.
**Mükerrer yapı yok**: `SurecKopru` genişletilir, yeni olaylar `OlayTuru` sonuna eklenir,
takip `LisansSistemi`/`OlayGunlugu` ile birleşir.

---

## 2. Hedef Mimari — Genel Bakış

```
 ┌─────────────────────────────────────────────────────────────────┐
 │  MERKEZ (herhangi bir fikocad süreci — genelde ana/ilk açılan)   │
 │                                                                   │
 │  FikoSurecYoneticiPanel (dashboard)                               │
 │   ├─ Süreç tablosu (PID/belge/uptime/durum/bellek) ── seçim       │
 │   ├─ Detay + CANLI OLAY AKIŞI (seçili süreç / "tümü")             │
 │   └─ Eylemler: Sonlandır | Komut+Param | Broadcast | Odakla       │
 │                          │  ▲                                      │
 │              gonderCerceve│  │ SurecOlayAlindi / DurumGuncellendi │
 │                          ▼  │  (yerel OlayGunlugu'na re-publish)   │
 │            SurecKopru (DUPLEX named pipe + %TEMP% kayıt+heartbeat) │
 └───────────────┬───────────────────────────┬─────────────────────┘
                 │ Cerceve (tip+hedef+param)  │ Cerceve (Olay/Durum/Heartbeat)
        ┌────────▼─────────┐         ┌────────▼─────────┐
        │  fikocad süreç B │         │  fikocad süreç C │
        │  OlayGunlugu ────┼─forward─┤  OlayGunlugu     │
        │  (throttle/batch)│         │  Cekirdek        │
        └──────────────────┘         └──────────────────┘
```

**Çekirdek ilkeler:**
1. **Duplex çerçeveli protokol** — her mesaj `SurecCerceve{tip, kaynakPid, hedefPid, korelasyon,
   gövde}`. Tip = `Komut/Parametre/Olay/Durum/Kapat/Heartbeat/Onay`. Genişletilebilir.
2. **Her süreç bir "aktör"** — kendi pipe sunucusu (gelen kutu). Merkez de bir süreç; ayrıcalık
   yalnız **UI**'de (dashboard'ı kim açarsa merkez odur — herhangi biri açabilir).
3. **Olaylar merkeze akar** — her süreç kendi `OlayGunlugu` yayınlarını (kalıcı/seçili türler)
   named pipe ile abone merkez(ler)e forward eder; **throttle + batch** ile pipe tıkanmaz.
4. **Takip birleşir** — merkeze ulaşan olaylar yerel `OlayGunlugu`'na `SurecOlayAlindi` olarak
   re-publish edilir → `LisansSistemi`/makro/plugin **aynı** merkezi akıştan izler (tek-merkez).
5. **main.cpp şişmez** — tüm mantık `SurecKopru` (motora-yakın IPC) + yeni `surec_yonetici_panel`
   modülünde. main.cpp yalnız `baslat/drain/durdur` + panel kaydı tutar (bugünküyle aynı ölçek).

---

## 3. IPC Protokol Mimarisi (Genişletilebilir Mesaj Çerçevesi)

### 3.1 Mesaj çerçevesi
`SurecKopru`'ya taşınabilir POD başlık + değişken gövde. Wire biçimi **uzunluk-önekli binary**
(mevcut metin `"komut\t<ad>"` yerine — ama geri-uyum için parse edici eski biçimi de kabul eder):

```
[u32 sihir='FKPC'][u16 sürüm][u16 tip][u32 kaynakPid][u32 hedefPid=0→broadcast/merkez]
[u64 korelasyon][u32 govdeUzunluk][govde: govdeUzunluk bayt]
```

- **Neden binary+uzunluk-önekli:** parametreler `\t`/`\n` içerebilir; mevcut satır-ayrıştırma
  bozulur. Uzunluk-önekli çerçeve güvenli + ileri-uyumlu (bilinmeyen `tip` → atla).
- **Sürüm alanı:** eski süreç (yalnız `"komut\t..."`) ile karışık ortamda geri-uyum; alıcı
  sihir yoksa **eski protokol** (komut adı) sayar. Böylece kısmi güncelleme çökmesin.

### 3.2 Mesaj tipleri (`enum class SurecMesajTip : u16`)
| Tip | Yön | Gövde | Anlam |
|-----|-----|-------|-------|
| `Komut` | merkez→süreç | komut adı | mevcut davranış (geri-uyumlu) |
| `Parametre` | merkez→süreç | `ad\0` + serileştirilmiş param (key=val) | komut + argüman (bkz. §6) |
| `Broadcast` | merkez→hepsi | Komut/Parametre gövdesi | hedefPid=0; köprü fan-out eder |
| `Kapat` | merkez→süreç | `zorla?` + `sebep` | nazik kapanış isteği (bkz. §5) |
| `Olay` | süreç→merkez | batch `OlayKaydi[]` (bkz. §5) | olay forward (§4) |
| `Durum` | süreç→merkez | belge adı, meşgul, workbench, kip | anlık durum güncelleme |
| `Heartbeat` | süreç→kayıt | (kayda yazılır, pipe değil) | canlılık + uptime (§4) |
| `Onay` | süreç→merkez | korelasyon + sonuç | komut alındı/çalıştı (opsiyonel telemetri) |

`korelasyon` = gönderenin ürettiği id; `Onay`/cevap eşleştirme için. Bilinmeyen `tip` → **no-op
atla** (ileri-uyum). Yeni tip **sona** eklenir (kararlılık).

### 3.3 Pipe yön modeli
Bugün pipe **INBOUND** (`PIPE_ACCESS_INBOUND`, `surec_kopru.cpp:122`). İki tasarım seçeneği:

- **A (önerilen, minimal değişim): her sürecin tek `PIPE_ACCESS_DUPLEX` sunucusu.** Gönderen
  `CreateFileW(GENERIC_READ|WRITE)` açar, çerçeveyi yazar; `Onay`/senkron cevap gerekiyorsa aynı
  bağlantıdan okur. Olay-forward'ı **süreç → merkez** için: merkez her sürece "olaylarını bana
  yolla" (`abone` çerçevesi) gönderir, süreç merkezin pipe'ına **kendi** bağlantısını açıp
  `Olay` çerçeveleri yazar. Yani her yön ayrı, kısa-ömürlü bağlantı (mevcut connect-oku-kapat
  döngüsüyle uyumlu, `surec_kopru.cpp:120-146`).
- **B (kalıcı kanal):** merkez↔süreç uzun-ömürlü çift pipe. Daha performanslı ama arka-iplik
  yaşam döngüsü karmaşık. **Dalga 3+ opsiyonu**; ilk sürümde A yeterli (olaylar zaten batch).

**Karar:** A. `sunucuDongusu()` genişletilir — okunan çerçeve `tip`'e göre dallanır:
`Komut/Parametre/Kapat` → main-thread kuyruğuna; `Olay/Durum` → merkez tarafında olay-akış
tamponuna. Sunucu duplex açılır ama davranış tip-güdümlü.

### 3.4 Serileştirme
Küçük binary yazıcı/okuyucu (POD + uzunluk-önekli string) — `SurecKopru` içi anonim namespace
helper (mükerrer değil; olay `OlayKaydi` zaten POD, `char ozet[48]` sabit). Parametre gövdesi =
`u16 adet` + tekrarlı `[len key][len val]`. String'ler UTF-8 (ImGui uyumu).

---

## 4. Süreç Listesi + Canlı Durum + Heartbeat

### 4.1 Kayıt şeması genişletme (`%TEMP%\fikocad_surecler.txt`)
`SurecBilgi`'yi (`surec_kopru.hpp:18`) alanlarla genişlet, kayıt satırını **sürümlü** yap
(eski 2-alan satırını da oku):

```
pid \t belgeAdi \t baslatZamaniUnix \t durum \t sonHeartbeatUnix \t [bellekKB] \n
```

- `belgeAdi` — statik "FikoYT #pid" yerine **aktif belge dosya adı** (yoksa "Adsız"). Süreç
  belge açtığında/kaydettiğinde (`dosya_islemleri.cpp:78-82` `dosyaAdi` mevcut) kayıt satırını
  günceller → panelde "önceki açık iş" görünür.
- `durum` — `Aktif` / `Mesgul` (uzun görev/GorevSistemi çalışırken) / `Yanitsiz` (heartbeat
  bayat). `GorevBasladi/GorevBitti` olayları (`olay.hpp:139-148`) meşgul bayrağını sürer.
- `sonHeartbeatUnix` — her süreç periyodik (örn. 1 sn) kayıt satırını **dokunur**
  (mutex altında yalnız kendi satırını). `uptime = simdi - baslatZamani`.
- `bellekKB` — opsiyonel `GetProcessMemoryInfo` (PSAPI) `WorkingSetSize` → süreç kendi değerini
  heartbeat'te yazar (merkez OpenProcess ile de çekebilir; **süreç yazması** ACL/yetki sorunu
  yaratmaz, tercih edilir).

### 4.2 Ölü/yanıtsız tespiti
- **Ölü:** mevcut `pidCanli()` (`surec_kopru.cpp:33`) korunur — `OpenProcess(SYNCHRONIZE)`
  handle yoksa/sinyalliyse satır süzülür (`ayristirVeSuz`, `:64`). Zaten çalışıyor.
- **Yanıtsız (zombi UI):** süreç canlı ama heartbeat > eşik (örn. 5 sn) → `durum=Yanitsiz`
  (gri/uyarı). Kilitlenmiş ama process yaşayan pencereyi ayırt eder (görev yöneticisi hissi).

### 4.3 Canlı güncelleme
`surecler()` (`surec_kopru.cpp:156`) yeni alanları döner. Panel her kare (veya throttle'lı,
örn. 500 ms) okur. Kayıt okuma zaten mutex+`FILE_SHARE` ile güvenli. **Yeni disk I/O yükü yok**:
heartbeat = süreç-başına 1 sn'de bir küçük yazım; panel okuması throttle'lı.

---

## 5. SONLANDIRMA (Nazik + Zorla)

### 5.1 Nazik kapanış (`Kapat` çerçevesi)
1. Merkez → hedef `Kapat{zorla=false, sebep}` gönderir.
2. Hedef `beklemedekiKomutlar()` benzeri main-thread drain'de `Kapat`'ı görür → mevcut
   **kapanış akışını** tetikler: kaydedilmemiş değişiklik varsa **"kaydet?" sorusu** (mevcut
   `WM_CLOSE`/pencere kapanış yolu, `main.cpp:451-459`), kullanıcı onaylarsa `PostMessage(WM_CLOSE)`
   → temiz yıkım (`durdur()` kayıttan çıkar, `main.cpp:466`).
3. Kullanıcı iptal ederse süreç açık kalır; merkeze `Onay{iptal}` döner → panel "kullanıcı
   iptal etti" gösterir.

### 5.2 Zorla sonlandırma (fallback)
- Nazik istek zaman aşımına uğrarsa (örn. 5 sn `Onay` yok) veya kullanıcı "Zorla" derse:
  `OpenProcess(PROCESS_TERMINATE, pid)` → `TerminateProcess(h, 1)`. Kayıt satırı bir sonraki
  `ayristirVeSuz` turunda otomatik süzülür (ölü PID).
- **Not:** `CreateProcessW` sonrası hProcess kapatıldığından (`main.cpp:864-865`) handle PID'den
  yeniden açılır (`OpenProcess`). İzin: kullanıcı kendi süreçlerini sonlandırabilir (aynı oturum
  → yetki var).

### 5.3 Güvenlik guard'ları (kritik)
- **Kendini öldürme guard'ı:** `hedefPid == benimPid()` → sonlandırma butonu **devre dışı**
  (panelde "(ben)" satırı zaten işaretli, `fiko_panel.hpp:226`); yalnız "kaydet & kapat" izinli.
- **Ana süreç guard'ı:** ilk/ana süreç (kayıttaki en eski `baslatZamani` veya işaretli
  "ana") sonlandırılırsa **onay + uyarı** ("Ana süreç kapanınca X alt-belge etkilenir").
  Yanlışlıkla-öldürme ikinci-onay diyaloğu.
- **Yalnız fikocad:** hedef PID kayıt dosyasında **listeli** olmalı (rastgele sistem PID'i
  sonlandırılamaz). Ekstra: `TerminateProcess` öncesi hedefin `pipeAdi(pid)` named pipe'ının
  var olduğunu doğrula (fikocad imzası).
- **Onay diyaloğu:** her sonlandırma ImGui modal onayı (belge adı + "kaydedilmemiş değişiklik
  var" uyarısı). Mesajlar **Türkçe**.

---

## 6. Komut + PARAMETRE + Broadcast

### 6.1 Parametreli komut
- Mevcut `gonder(pid, ad)` (`surec_kopru.cpp:161`) korunur (Komut tipi).
- Yeni `gonder(pid, ad, params)` — `Parametre` çerçevesi. Alıcı main-thread drain'de
  `MenuOge`'yi ad ile bulur (`main.cpp:1870`) + parametreleri komuta iletir.
  - **Sorun:** bugünkü `komutCalistir(oge,"ipc")` parametre **taşımıyor** (`MenuOge.calistir`
    yalnız `Cekirdek&` alır). İki seçenek:
    - **(a)** Parametreleri **eşik/bağlam** olarak `Cekirdek`'e koy (örn. geçici "ipcParam"
      alanı) — komut okur. Minimal ama kirli.
    - **(b, önerilen)** IPC-özel komut yolu: parametreli çerçeveler makro/registry
      (`fiko.olay` / komut kaydı) üzerinden çözülür — **anayasa uyumu** (komut+param zaten
      makro sisteminin dili). `beklemedekiKomutlar()` → `beklemedekiCerceveler()` olur; drain
      döngüsü tip'e göre param'lı dispatch eder.
- Örnek kullanım: "belge aç" komutu + `{yol: "C:\...\parca.fikocad}"` parametresi → başka
  sürece belge açtır (görev dağıtımı).

### 6.2 Broadcast + hedefli
- `hepsineGonder(ad)` (`:172`) → `hepsineGonder(ad, params)` + `Broadcast` tipi. Zaten
  kendi-hariç fan-out yapıyor; parametre gövdesi eklenir.
- Hedefli: mevcut `hedefPid_` seçimi (`fiko_panel.hpp:229`). Broadcast = hedefPid 0.
- "Kendine" durumu doğrudan `komutCalistir` (mevcut `fiko_panel.hpp:253-255`) korunur.

---

## 7. OLAY / EVENT AKIŞI (Merkezi Takip)

### 7.1 Forward mekanizması
Her süreç, `OlayGunlugu`'na **köprü aboneliği** kurar (açılışta, `SurecKopru::baslat`):

- **Kaynak:** `OlayGunlugu::abone<...>()` her tür için değil — bunun yerine **halka tampon**
  (`kayitlar()`, `olay.hpp:517`) periyodik **delta** olarak forward edilir: `sonrakiSira()`
  (`:518`) imleci tutulur, her forward turunda yeni `OlayKaydi`'lar (`{sira,zaman,tur,varlik,
  ozet[48]}` — zaten POD, tahsissiz) `Olay` çerçevesine **batch** yazılır.
- **Neden delta+batch (abone-başına değil):** `yayinla` **sıcak yol** (zero-alloc, `:498`);
  her olayda pipe yazımı kabul edilemez (yüksek-frekans `HoverDegisti/FareJestiOldu/
  HesaplamaBitti` pipe'ı boğar). Delta okuma sıcak-yol dışı, batch tek yazım.
- **Kalıcılık filtresi yeniden kullanımı:** `OlayGunlugu::kalici(tur)` (`:530`) — diske
  yazılmayan yüksek-frekans türler **forward'a da girmez** (varsayılan süzme bedava gelir).
  Panelde "yüksek frekansı da göster" opsiyonu delta'yı ham okur.

### 7.2 Throttle / batch (pipe tıkanmasın)
- Forward periyodu: **200–500 ms** veya "N olay biriktiğinde" (hangisi önce). main-thread'de
  `beklemedekiKomutlar()` drain'inin yanında `olaylariForwardEt()` çağrısı.
- Batch üst sınırı (örn. 256 kayıt/çerçeve, 4096 halka kapasitesinin altında); taşarsa "N olay
  atlandı" özeti (panel bunu gösterir). Pipe yazımı **non-blocking best-effort** (merkez
  yoksa/dolu ise sessiz düş — süreç kendi işini yavaşlatmaz).

### 7.3 Merkezde birleştirme (tek-merkez izleme)
- Merkez `Olay` çerçevesi alınca: (a) panel akış tamponuna ekler (süreç-başına + birleşik
  görünüm), (b) yerel `OlayGunlugu`'na **`SurecOlayAlindi{kaynakPid, tur, varlik, ozet}`**
  olarak re-publish eder.
- **Sonuç:** `LisansSistemi` (`lisans.hpp:24` `KomutCalisti` dinler) gibi tüm merkezi
  dinleyiciler + makrolar + pluginler diğer süreçlerin olaylarını **aynı** akıştan görür.
  Lisans/audit **tek-merkez** hedefi (memory: fikatia-merkezi-olay-komut) böyle tamamlanır:
  hangi süreç hangi komutu çalıştırdı → `KomutCalisti` forward'ı ile merkeze düşer.

### 7.4 Yeni olay türleri (`OlayTuru` enum SONUNA — `olay.hpp:79` `SAYAC` öncesi)
```
SurecKatildi        {u32 pid}                       // yeni süreç kayda girdi
SurecAyrildi        {u32 pid}                        // süreç kapandı/öldü
SurecDurumDegisti   {u32 pid, u32 durum}             // aktif/meşgul/yanıtsız
SurecOlayAlindi     {u32 pid, u16 kaynakTur, u32 varlik}  // forward edilmiş olay (ozet taşır)
SurecKomutuAlindi   {u32 pid}                        // bize komut/param geldi (Kapat dahil)
```
Hepsi POD; `ozet[48]` insan-okur özet taşır (örn. `"B: VarlikEklendi #42"`). Yüksek-frekans
olabilecekler (`SurecOlayAlindi`) **kalıcı-değil** işaretlenir (diske yazılmaz;
`kaliciAyarla`, `olay.hpp:531`) — sonsuz döngü/disk şişmesi önlenir.

> **Döngü guard'ı:** `SurecOlayAlindi` re-publish'i **tekrar forward EDİLMEZ** (merkez kendi
> forward'ında bu türü atlar) — yoksa süreçler-arası olay fırtınası.

---

## 8. Merkezi Yönetim Paneli (Görev Yöneticisi UI)

`FikoSureclerPanel` (`fiko_panel.hpp:198`) → **`FikoSurecYoneticiPanel`** zengin dashboard.
FikoUi tema token'ları (memory: fikatia-ui-framework-plani — Koyu/Neon/Açık) + canlı animasyon.

### 8.1 Yerleşim (üç bölge)
```
┌──────────────────────────────────────────────────────────────┐
│ Süreçler: 3 canlı · 1 meşgul        [＋Yeni] [⟳Yenile] [filtre]│  ← üst bar
├──────────────────────────────────────────────────────────────┤
│ PID │ Belge        │ Uptime │ Durum   │ Bellek │  ← sıralanabilir tablo
│ 1234│ parca.fikocad│ 12:03  │ ● Aktif │ 180 MB │  (seçili satır)
│ 1235│ kalip (ben)  │ 08:41  │ ◐ Meşgul│ 240 MB │
│ 1236│ Adsız        │ 00:12  │ ○ Yanıt.│  --    │
├───────────────────────┬──────────────────────────────────────┤
│ Eylemler (seçili:1234) │  OLAY AKIŞI  ( ⦿seçili ○tümü ) [ara] │
│ [Sonlandır] [Zorla]    │  12:03.1  VarlikEklendi   #42         │
│ [Komut+Param ▾]        │  12:03.4  KomutCalisti    Pad         │
│ [Broadcast]            │  12:04.0  GorevBasladi    STEP import │
│ [Odakla]               │  … (auto-scroll, filtre: tür/metin)   │
└───────────────────────┴──────────────────────────────────────┘
```

### 8.2 Bileşenler
- **Süreç tablosu:** `ImGuiTableFlags_Sortable` (PID/uptime/bellek/durum sıralama —
  bugünkü tablo `fiko_panel.hpp:216` genişletilir). Satır seçimi mevcut `hedefPid_` deseni.
  Durum ikonu renkli (yeşil/sarı/gri), "(ben)" işareti (mevcut `:226`). Meşgulde spinner
  animasyonu.
- **Eylem paneli:** Sonlandır (§5, guard'lı `BeginDisabled` kendi/ana), Zorla, Komut+Param
  (mevcut komut filtre listesi `:239` + **parametre giriş alanları**), Broadcast (mevcut
  "Hepsine gönder" `:263`), **Odakla** (`SetForegroundWindow` hedef pencereye — kayıtta pencere
  HWND opsiyonel; yoksa `EnumWindows` PID eşleşmesi).
- **Olay akışı görünümü:** süreç-başına halka tampon (merkez tarafı, §7.3). `⦿ seçili / ○ tümü`
  toggle; filtre (tür + metin, mevcut `kucult` filtre deseni `:275`); auto-scroll; tür-renk.
  Birleşik "tümü" görünümü tüm süreç olaylarını zaman-sırasında harmanlar. **Virtual/clipper**
  (`ImGuiListClipper`) — binlerce satırda 60 FPS (performans anayasası).
- **Detay:** seçili sürecin workbench/kip/son komut/bellek grafiği (mini sparkline — FikoUi
  spark bileşeni mevcut).

### 8.3 Modülerlik (main.cpp şişmesin)
- Panel + IPC yönetim mantığı **yeni dosya** `uygulama/fikocad/surec_yonetici_panel.{hpp,cpp}`
  (bugünkü `FikoSureclerPanel` `fiko_panel.hpp`'den **taşınır**, oraya kod eklenmez). main.cpp
  yalnız kayıt (`main.cpp:1832-1839` deseni) + `g_surecKopru` yaşam döngüsü (bugünkü 3 çağrı).
- `SurecKopru` motora-yakın kalır (`uygulama/fikocad/`, mevcut yer) — saf Win32, UI-nötr;
  panel onu tüketir. **Mükerrer yapı yok** (`SurecKopru` genişler, ikinci köprü yaratılmaz).

---

## 9. Güvenlik

| Risk | Önlem |
|------|-------|
| Rastgele sürece komut/kill | Hedef PID kayıt dosyasında listeli olmalı + `pipeAdi(pid)` pipe var olmalı (fikocad imzası) |
| Kendini/ana süreci öldürme | UI guard (buton disable) + ana süreç ikinci-onay diyaloğu (§5.3) |
| Pipe'a yabancı bağlantı | Named pipe ACL: yalnız aynı kullanıcı/oturum (`CreateNamedPipe` SA ile owner-only); `SihirBayt` doğrulama (bilinmeyen sihir → çerçeve reddi) |
| Kötü-biçimli çerçeve (taşma) | `govdeUzunluk` üst-sınır kontrolü (pipe tampon 4096 → parça-okuma; aşırı → düşür), bilinmeyen `tip` no-op |
| Komut enjeksiyonu | IPC komutları `Cekirdek::komutCalistir` **lisans kapısından** geçer (`cekirdek.hpp:48`) → yetkisiz komut merkezde de reddedilir |
| Olay fırtınası (DoS) | Forward throttle/batch (§7.2) + `SurecOlayAlindi` re-forward yasağı (§7.4 döngü guard) |

Tüm bu doğrulamalar `SurecKopru` içinde; UI sadece izinli eylemleri gösterir.

## 10. Performans

- **Forward sıcak yolu yok:** `yayinla` (`olay.hpp:498`) dokunulmaz; forward main-thread'de
  delta okuma (`sonrakiSira` imleci) + batch tek pipe yazımı, 200–500 ms.
- **Kalıcılık filtresi bedava süzme:** yüksek-frekans türler (`HoverDegisti/FareJestiOldu/
  HesaplamaBitti/SketchCozuldu`) zaten `kalici=false` → forward'a girmez.
- **Panel:** `ImGuiListClipper` ile olay akışı; süreç okuma throttle (500 ms). Kayıt I/O =
  heartbeat süreç-başına 1 sn/küçük yazım (mutex kısa tutulur — yalnız kendi satırı).
- **Best-effort yazım:** merkez pipe dolu/yok → süreç sessiz düşer, kendi karesini bloklamaz
  (non-blocking `WriteFile` veya kısa timeout).
- **Bellek:** merkez olay tamponu süreç-başına sabit halka (örn. 2048) → sınırlı.

---

## 11. DALGA PLANI (uygulama sonraki ajanlarla)

### Dalga 1 — Protokol + canlı liste (temel)
1. `SurecCerceve` + `SurecMesajTip` + binary serileştirme (`surec_kopru.hpp/.cpp`). Eski
   `"komut\t"` biçimi geri-uyumlu okunur.
2. Pipe `INBOUND` → `DUPLEX` (`surec_kopru.cpp:122`); `sunucuDongusu` tip-güdümlü dallanma.
3. Kayıt şeması genişletme (belge adı, baslatZamani, durum, heartbeat, bellek) +
   `SurecBilgi` alanları (`surec_kopru.hpp:18`). Heartbeat main-thread'de periyodik.
4. Belge adı güncelleme kancası (`dosya_islemleri.cpp` aç/kaydet → kayıt satırı).
5. `Durum`/`Heartbeat` mesajları + yanıtsız tespiti.
6. Yeni olay türleri enum sonuna (`SurecKatildi/Ayrildi/DurumDegisti`).

### Dalga 2 — Sonlandırma + komut+param + broadcast
7. `Kapat` çerçevesi + nazik kapanış akışı (`WM_CLOSE` entegrasyonu) + `Onay`.
8. Zorla `TerminateProcess` fallback + tüm §5.3 guard'ları.
9. `Parametre`/`Broadcast` tipleri + `gonder(pid,ad,params)`/`hepsineGonder(ad,params)`;
   `beklemedekiKomutlar()` → `beklemedekiCerceveler()` param'lı dispatch (`main.cpp:1868-1871`).

### Dalga 3 — Dashboard UI + olay akışı
10. `FikoSureclerPanel` → `FikoSurecYoneticiPanel` yeni modül dosyasına taşı; sıralanabilir
    tablo + durum ikon/animasyon + eylem paneli (guard'lı).
11. Olay forward (delta+batch+throttle) + merkez birleştirme (`SurecOlayAlindi` re-publish) +
    `LisansSistemi`/makro entegrasyonu (tek-merkez takip).
12. Olay akışı görünümü (süreç-başına + birleşik, filtre, clipper) + Odakla + bellek sparkline.

### Dalga 4 (opsiyonel) — cila
13. Kalıcı kanal (protokol B) gerekirse; makro API `fiko.surec.*` (liste/gonder/sonlandir/
    olayDinle) — anayasa: makro+plugin erişimi. Merkezi audit `.fikolog`'a süreç-etiketli yazım.

---

## 12. Dosya Değişiklik Haritası (uygulama referansı)

| Dosya | Değişiklik |
|-------|-----------|
| `uygulama/fikocad/surec_kopru.hpp` | `SurecCerceve`/`SurecMesajTip`; `SurecBilgi` alanları; yeni API (`gonder` param, `beklemedekiCerceveler`, `olaylariForwardEt`, `heartbeat`, `sonlandir`) |
| `uygulama/fikocad/surec_kopru.cpp` | Duplex pipe; tip-güdümlü `sunucuDongusu`; binary ser/deser; kayıt şeması; heartbeat; kill+guard |
| `motor/cekirdek/include/fiko/cekirdek/olay.hpp` | Yeni `OlayTuru` (`SurecKatildi/Ayrildi/DurumDegisti/OlayAlindi/KomutuAlindi`) + POD struct'lar (enum SONUNA, `:79` öncesi) |
| `motor/cekirdek/src/olay.cpp` | `olayTuruAdi` yeni türler + varsayılan `kalici` (yüksek-frekans false) |
| `uygulama/fikocad/surec_yonetici_panel.{hpp,cpp}` | **YENİ** — dashboard (bugünkü `FikoSureclerPanel` buraya taşınır) |
| `uygulama/fikocad/fiko_panel.hpp` | `FikoSureclerPanel` **çıkar** (taşındı, `:198-286`) |
| `uygulama/fikocad/main.cpp` | Panel kayıt güncelle (`:1834`); drain param'lı (`:1868`); belge adı heartbeat kancası; forward çağrısı |
| `uygulama/fikocad/dosya_islemleri.cpp` | Aç/kaydet → `g_surecKopru` belge adı güncelle (`:78-82` `dosyaAdi` kullan) |

---

**Özet:** iskelet (`SurecKopru` named pipe + `%TEMP%` kayıt + mutex + main-thread drain +
merkezi komut/olay yeniden kullanımı) korunur; **tek yönlü/tek-tip protokol → duplex, tip-çerçeveli
protokol** yapılır; kayıt **heartbeat + belge adı + durum + bellek** ile canlanır; **sonlandırma
(nazik+zorla, guard'lı)** eklenir; **olaylar delta+batch+throttle ile merkeze akıp** yerel
`OlayGunlugu`'na re-publish edilerek `LisansSistemi`/makro/plugin **tek-merkez** izlemesiyle
birleşir; panel **görev yöneticisi dashboard'ına** evrilir. Tüm mantık `SurecKopru` +
yeni panel modülünde — **main.cpp şişmez**, mükerrer yapı yok.
