Methodology v1.0
23 Ağustos 2026 • By AICompatible Ekibi • 7 dk okuma

31 Blog Yazımız Sessizce Silinmişti: Bir Parser Hatasının Hikayesi

Sorunun Fark Edilişi: "Neden Bu Kadar Az Yazı Var?"

Geçen hafta rutin bir içerik güncellemesi sırasında, canlı sitemizdeki blog sayfasını açtığımda garip bir şey fark ettim: sadece 12 yazı görünüyordu. Oysa birkaç gün önce 40'ın üzerinde yazı olduğunu hatırlıyordum.

İlk başta tarayıcı cache'i veya sayfalama sorunu olduğunu düşündüm. Ama sayfayı yenilediğimde, farklı tarayıcılarda açtığımda hep aynı sonuç: 12 yazı. Yerel geliştirme ortamımdaki yedek posts.js dosyasını kontrol ettiğimde ise 43 yazı vardı.

31 yazı kaybolmuştu. Ve en kötüsü: hiçbir hata mesajı almamıştık.

Teşhis: Sessiz Hata Yutan Parser

Sorunu bulmak için otomatik yayın sistemimizin kodunu incelemeye başladım. Sistemimiz şöyle çalışıyordu:

  1. Yeni bir blog yazısı oluşturulduğunda, script mevcut posts.js dosyasını okuyor
  2. İçeriği JSON olarak parse ediyor
  3. Yeni yazıyı listeye ekliyor
  4. Güncellenmiş listeyi dosyaya geri yazıyor

Sorun, ikinci adımdaki parser kodundaydı:

// YANLIŞ KOD - Asla böyle yazmayın!
function loadPosts() {
  try {
    const content = fs.readFileSync('posts.js', 'utf8');
    const posts = JSON.parse(content);
    return posts;
  } catch (error) {
    console.log('Parse hatası, boş liste döndürülüyor');
    return []; // 🚨 Sessizce boş liste döndürüyor!
  }
}

Bir gün önce, manuel bir düzenleme sırasında posts.js dosyasına yanlışlıkla geçersiz bir karakter girmiştik (muhtemelen bir virgül veya tırnak işareti eksikti). Dosya artık geçerli bir JSON değildi.

Script çalıştığında JSON.parse() hata fırlattı, ama catch bloğu bu hatayı yakaladı ve sessizce boş bir dizi döndürdü. Sistem "mevcut yazı yok, sadece yeni yazıyı kaydet" diye düşündü ve dosyanın üzerine yazdı.

31 yazı bir anda yok oldu. Hiçbir uyarı, hiçbir log, hiçbir şey.

Kurtarma Operasyonu

1. Yedekten Geri Yükleme

Şanslıydık: yerel geliştirme ortamımda bir gün öncesine ait yedek vardı. Ama bu, son 24 saatte eklenen 2 yeni yazıyı kaybetmemiz anlamına geliyordu.

Git geçmişini kontrol ettim:

git log --all --full-history -- posts.js
git show abc123:posts.js > posts_recovered.js

Neyse ki, kaybolan 2 yazıdan biri hâlâ canlı sitedeydi (cache'de kalmıştı). Diğerini ise taslak klasöründen buldum. Manuel olarak birleştirdim ve 43 yazının tamamını geri getirdim.

2. Asla Sessizce Başarısız Olmayan Yeni Parser

Aynı hatayı tekrar yaşamamak için parser'ı baştan yazdım:

// DOĞRU KOD
function loadPosts() {
  const backupPath = `posts_backup_${Date.now()}.js`;
  
  try {
    const content = fs.readFileSync('posts.js', 'utf8');
    
    // Önce yedek al
    fs.copyFileSync('posts.js', backupPath);
    
    const posts = JSON.parse(content);
    
    // Temel doğrulama
    if (!Array.isArray(posts)) {
      throw new Error('posts.js bir dizi değil!');
    }
    
    if (posts.length === 0) {
      throw new Error('posts.js boş - bu muhtemelen bir hata!');
    }
    
    return posts;
    
  } catch (error) {
    console.error('❌ KRİTİK HATA: posts.js okunamadı!');
    console.error('Hata detayı:', error.message);
    console.error('Yedek dosya:', backupPath);
    
    // İşlemi DURDUR - veri kaybını önle
    process.exit(1);
  }
}

Yeni yaklaşımın özellikleri:

  • Otomatik yedekleme: Her okuma öncesi timestamp'li yedek
  • Doğrulama: Boş liste bile şüpheli sayılıyor
  • Açık hata mesajları: Neyin yanlış gittiği net bir şekilde loglanıyor
  • İşlemi durdurma: Hatalı veriyle devam etmek yerine sistem duruyor

Genel Ders: "Fail Fast" Prensibi

Bu olay bize önemli bir yazılım geliştirme prensibini hatırlattı: sessiz hata yutma, gizli veri kaybından çok daha tehlikelidir.

İçerik yönetim sistemlerinde özellikle dikkat edilmesi gerekenler:

  • Asla varsayılan değer döndürmeyin: Bir dosya okunamıyorsa, boş liste döndürmek yerine hata fırlatın
  • Beklenmedik durumları loglamak yetmez: Kritik hatalarda işlemi durdurun
  • Otomatik yedekleme zorunludur: Özellikle üzerine yazma işlemlerinden önce
  • Doğrulama katmanları ekleyin: "Dosya okundu" yeterli değil, "içerik mantıklı mı?" sorusunu sorun

Kendi Sitenizi Kontrol Edin

Benzer bir sorunu yaşamamak için şunları kontrol edin:

  1. İçerik yönetim scriptlerinizde catch bloklarını inceleyin
  2. Varsayılan değer döndüren (return [], return {}) kodları arayın
  3. Kritik dosyaların yedekleme stratejisini gözden geçirin
  4. Otomatik işlemlerin log çıktılarını düzenli kontrol edin

AICompatible.com'un site tarayıcısı, bu tür yapısal sorunları otomatik tespit ediyor. Özellikle içerik tutarlılığı kontrolü, beklenmedik içerik kayıplarını erken fark etmenize yardımcı olabilir. Ama en önemli savunma hattınız, kodunuzun hata durumlarında sessiz kalmak yerine yüksek sesle bağırmasını sağlamak.

Sonuç olarak: 31 yazıyı geri getirdik, sistemi daha sağlam hale getirdik ve değerli bir ders öğrendik. Bazen en iyi öğretmen, neredeyse kaybettiğiniz veridir.