## [0.7.0] - 2026-09-25

Sunucu saati panelin her yerinde ortak kullanılıyor ve App Store uygulamaları
zamanlanmış görevle yedeklenip buluta gönderilebiliyor. Cron zamanlamalarının
okunduğu saat dilimi değiştiği için minor sürüm — yükseltmeden önce aşağıdaki
nota bakın.

### Yükseltme notu

- **Cron zamanlamaları artık sunucunun saat diliminde okunuyor, UTC'de değil.**
  Sunucunun saat dilimi UTC ise hiçbir şey değişmez. Başka bir dilimdeyse
  mevcut görevler o dilimin duvar saatine kayar: `0 3 * * *` daha önce UTC
  03:00'te çalışıyordu, artık yerel 03:00'te çalışır. Geçerli dilim
  Ayarlar → Sunucu saati'nde görünür.

### Eklenenler

- **Sunucu saati.** Ayarlar → Sunucu saati'nden sistem saat dilimi ve NTP
  eşitlemesi yönetiliyor. Tek kaynak host'un kendi saat dilimi
  (`/etc/localtime`); panel ayrı bir değer tutmuyor. Zamanlanmış görevler,
  yedek arşivlerinin adları ve arayüzdeki tüm tarihler (grafik eksenleri
  dahil) bu dilimi kullanıyor; tarihler artık tarayıcının saat dilimine göre
  gösterilmiyor. Değişiklik denetim kaydına yazılıyor.
- **Uygulama yedeği.** Zamanlanmış görevlere yeni tür: App Store kurulumları
  tek tek ya da "Tüm uygulamalar" olarak yedekleniyor ve diğer yedekler gibi
  buluta kopyalanabiliyor. Arşivler `backups/apps/<kurulum>/` altında.
  - Kendi döküm aracı olan uygulama onu kullanıyor ve çalışmaya devam ediyor.
    Gitea için `gitea dump` (depolar, veritabanı, ayarlar, ekler).
  - Diğerleri ve elle eklenen Compose kurulumları kısa süre durdurulup Compose
    dosyaları ve volume'larıyla tek bir `tar.gz`'ye alınıyor, ardından
    yeniden başlatılıyor.
- Plugin manifestlerine (şema 2) `[backup]` bölümü: uygulamanın arşivi
  stdout'a yazan kendi yedek komutu. Ayrıntı `docs/PLUGIN-YAZMA.md`'de.

### Değişenler

- Açık port uyarısı güvenlik duvarı kurallarını hesaba katıyor. Kuralla
  kapatılmış bir port (ör. "Yalnızca container" kapsamlı ret kuralıyla
  kapatılan bir veritabanı portu) artık "dışarıya açık" sayılmıyor, Dinlenen
  portlar listesinde "Duvarla kapalı" görünüyor. Bilinçli izin kuralı olan
  veritabanı dışı portlar (ör. SSH) uyarı üretmiyor; veritabanı portları izin
  kuralına rağmen uyarılmaya devam ediyor. Uyarı kutusu açık portları
  numaralarıyla listeliyor ve "Veritabanı portlarını kapat" düğmesi yalnız
  gerçekten açık bir veritabanı portu varken çıkıyor.

### Düzeltilenler

- "Tüm siteler" yedeği ters vekil sitelerini atlıyor. Dosyası olmayan bu
  siteler (panelin kendi alan adı için açılan site dahil) görevi her
  çalışmada "Site dizini bulunamadı" ile kısmen başarısız gösteriyordu. Görev
  formundaki site listesinde de artık yer almıyorlar.
- Bulut Yöneticisi'ndeki Hedefler ve uzak arşiv tablolarının başlık satırı
  kaymıştı.
- MCP: liste döndüren araçların `structuredContent` alanı nesneye sarılıyor
  (`{ "result": [...] }`). Spesifikasyon nesne istiyor; katı istemciler çıplak
  diziyi şema hatasıyla reddediyordu.

### Bilinen sınırlar

- Uygulama arşivleri Yedekler sayfasından henüz geri yüklenemiyor; indirme ve
  bulut kopyası çalışıyor. Elle geri yükleme adımları
  `docs/YEDEKLEME-GERI-YUKLEME.md`'de.
- Container'lar kendi saat dilimlerinde çalışmaya devam ediyor (çoğu imajda
  UTC). Sunucu saati ayarı host'u ve paneli kapsıyor.
- Saat dilimini değiştirmek host'ta `tzdata` paketini, NTP'yi yönetmek
  `timedatectl`'i (systemd) gerektiriyor.

