# FikoYT MVD — Çalışma Kuralları

## Kullanıcı tercihi (kalıcı, tüm projelerde geçerli)

**Sade ilerle. Kod ile her yeri doldurma.**

- Yeni bir özellik için **eklenmesi gereken minimum dosya/satırı** kullan.
- Bir bug'ı çözmek için **eskisini sil**, üstüne büyük blok ekleme.
- Dead code, yorum bloğu içinde tutulan eski sürümler **derhal silinir**, "referans için" tutulmaz.
- Yeni dosya açmak yerine **mevcut dosyayı düzenle** (uygunsa).
- Tek bir UI değişikliği için **3 ajan dispatch etme**. Önce kendin oku.
- Her sprint sonunda **toplam satır sayısı düşmeli veya yatay** kalmalı. Sürekli büyüyen dosya = kötü sinyal.

## Mimari kalıplar

- `_legacy.py` artık sadece refaktör için. Yeni Python kodu `nodes/character.py`, `nodes/visual.py`, `nodes/common.py`.
- HTTP route → `nodes/endpoints.py`. Domain özel olanlar `music_gen/`, `wan/`, `ltx/` altında.
- Frontend ana panel: `web/js/mvd/panel-render.js` + `panel-core.js` + `actions/*-actions.js`.
- Pro Studio (standalone): `web/js/mvd/pro-studios/{image,music,video}.js`.
- Toast: `window.fmvdToast.success/error/warn/info()`. Confirm: `await window.fmvdConfirm()`.

## Test akışı

- Her edit sonrası: `node --check` (JS), `python -c "import ast; ast.parse(open('x.py',encoding='utf-8').read())"` (Python), `python -c "import json; json.load(open('x.json',encoding='utf-8'))"` (JSON).
- ComfyUI restart gereken değişiklik varsa kullanıcıya açıkça söyle.
- Frontend cache için kullanıcıya **Ctrl+F5** hatırlat.

## Windows + torchcodec tuzakları

- `torchaudio>=2.11` import sırasında `libtorchcodec_core4.dll` yüklemeye çalışır → Windows'ta crash. `f5-tts/echo-tts` torchcodec'e bağımlı, **kaldırılamaz**.
- Subprocess'lerde wrapper kullan: `_demucs_runner.py` ve `_acestep_runner.py` örnek. `sys.modules['torchcodec*']` = sahte `ModuleType` + `__spec__=ModuleSpec(name, None)` + `__path__=[]`; ayrıca `torchaudio.load/save` → soundfile patch.
- python_embeded'da script-relative path otomatik `sys.path`'e eklenmez (pth davranışı). Subprocess'te `from acestep.X` gibi import için `sys.path.insert(0, ACE_STEP_ROOT)` zorunlu.
