{
    "date": "2026-08-18",
    "entries": [
        {
            "title": "Talepten planlanan eğitim satışa açılamıyordu: seçilen il eğitime yazılmıyordu",
            "tickets": [
                "EGT-179"
            ],
            "changes": {
                "planlama": {
                    "fixed": [
                        "Bir planlama talebinden eğitim planlarken, planlamacının ekranda seçtiği il eğitime hiç yazılmıyordu. Sistem ili talebin kendi kaydından okuyordu; oysa müşteri ya da satışçı talep açarken il girmiyor — canlıdaki beş talebin beşinde de bu alan boştu. Sonuç: eğitim ilsiz kaydediliyordu.",
                        "«Kaydet ve Planlandı'ya al» düğmesi bu yüzden çalışmıyor görünüyordu. Plan gerçekten kaydediliyor, ama satışa açma adımı «il ve kontenjan girilmelidir» diyerek reddediliyor, bu ret hiçbir yere yazılmadan yutuluyordu. Ekranda hiçbir şey olmuyordu; canlıda arka arkaya altı kez denenmiş.",
                        "Eğitim taslakta kaldığı için teklif ekranındaki «Kalem Ekle» listesinde de görünmüyordu — teklif yalnız satışa açılmış eğitimlere kesilir. Yani üç ayrı şikâyetin tek sebebi buydu.",
                        "Satışa açma reddedilirse artık sebebi ekranda yazıyor: plan kaydedildi, eğitim taslak duruyor, eksik şu — eksik tamamlanınca eğitim ekranından satışa açılır.",
                        "Planlama ekranı sunucudan gelen bütün ret mesajlarını basıyor. Eskiden yalnız il, adres, harita ve not alanlarının hatası çiziliyordu; hiçbir alana ait olmayan bir ret (talep zaten planlanmış, plan en az bir eğitim ister) sessizce düşüyordu.",
                        "Planlama kuyruğunda artık yalnız açık talepler duruyor. Planlanmış bir talep, üzerinde «Talepten Eğitim Planla» düğmesiyle kuyrukta kalmaya devam ediyordu; düğmeye basınca da hiçbir şey olmuyordu, çünkü bir talep iki kez planlanamaz. Planlanmış ve reddedilmiş talepler Planlama → Talepler ekranındaki kendi sekmelerinde durmaya devam ediyor.",
                        "Hiçbir firmaya atanmamış bir ofis kullanıcısı bir talebi planlamaya kalktığında sunucu hatası alıyordu; bu da düzeldi."
                    ]
                }
            }
        },
        {
            "title": "Geliştirme makinesi artık delil deposuna mühür yayımlamıyor",
            "tickets": [
                "EGT-99"
            ],
            "changes": {
                "altyapi": {
                    "fixed": [
                        "İşlem günlüğünün bütünlük zinciri, dışarıdan doğrulanabilsin diye herkese açık bir depoya mühürlenir; o depo gerektiğinde bilirkişiye gösterilecek dış tanıktır. Örnek ayar dosyası production değerlerini taşıdığı için geliştirme makinesi de aynı depoya yazıyordu: 26.07–10.08 arasında 24 mühür oraya düşmüş ve depo silmeye kapalı olduğu için orada kalmış.",
                        "Asıl sebep anahtar zorunluluğuydu: tanık, anahtarsız çalışmayı reddediyordu ve elde tek anahtar delil deposunun anahtarıydı — yani geliştirmede tanığı denemenin tek yolu gerçek depoya yazmaktı. Artık diskteki bir depo için anahtar istenmiyor; uzaktaki bir adres için istenmeye devam ediyor, çünkü anahtarsız uzak adres tam da yakalanması gereken yanlış ayardır.",
                        "Geliştirme kurulumu artık kendi diskindeki boş bir depoya mühürlüyor. Mühürleme hattı aynen çalışıyor — yani bozulduğunda geliştirmede fark edilir — ama hiçbir şey dışarı çıkmıyor. Örnek ayar dosyası da güvenli varsayılanla geliyor, sonraki kurulumlar doğru başlıyor.",
                        "Depoda duran 24 girdiye dokunulmadı ve dokunulamaz: production zinciri onların üzerine kurulu, kökleri koparmadan silinemezler. Bu bilinçli bir bırakmadır."
                    ]
                }
            }
        },
        {
            "title": "Sorgulama ekranı artık kişinin bütün eğitimlerini gösteriyor — ve gizlenen personel geri geldi",
            "tickets": [
                "EGT-178"
            ],
            "changes": {
                "planlama": {
                    "fixed": [
                        "Sorgulama ekranı, bir kişiyi yalnızca EN UZUN süren sertifikasına bakarak değerlendiriyordu. Beş ayrı eğitimi olan bir kişinin 2031'e kadar geçerli bir belgesi varsa, aynı kişinin bu ay dolmuş belgesi görünmüyordu — kişi listeye hiç girmiyordu. Canlıda ölçüldü: sertifikası olan 42 kişinin 14'ü, süresi dolmuş ya da 60 gün içinde dolacak bir belgesi olmasına rağmen ekranda yoktu. Yeni devralınan bir firmanın personelinin tamamı bu yüzden görünmüyordu.",
                        "Artık her eğitim ayrı ayrı değerlendiriliyor. Kişi yine tek satırdır; «İhtiyaç» sütununda o kişinin bütün eğitimleri küçük rozetler halinde durur: eğitim adı, bitiş tarihi ve durumu. Kırmızı süresi dolmuş, amber yaklaşıyor, gri hâlâ geçerli. Satırın tarihi ve durumu ise en acele olanı gösterir — telefonu açtıran şey odur.",
                        "Geçerli belgeler de gösteriliyor, çünkü karar tüm resimle veriliyor: «Görev 8 dolmuş, Görev 2 2031'e kadar geçerli» tek bir görüşmenin konusudur.",
                        "Devralınan belge işareti artık eğitim başına: aynı kişinin bir belgesi eski kayıtlardan devralınmış, diğeri bizim verdiğimiz olabilir. Hangisinin tarihinin hesapla bulunduğu rozetin yanında yazıyor.",
                        "«Eğitim türü» filtresi de düzeldi: bir kişi, o eğitim en acele ihtiyacı olmasa bile aranan eğitime ihtiyacı varsa sonuçta çıkıyor. Süresi dolmamış bir belge ise ihtiyaç sayılmıyor — geçerli belge, o eğitimi arayan bir sorgunun cevabı değildir.",
                        "Üstteki «En yoğun ihtiyaç» sayıları da artık bütün ihtiyaçları sayıyor; eskiden yalnız kişinin en acele ihtiyacı sayıldığı için bir eğitimin gerçek yükü olduğundan az görünüyordu.",
                        "Dışa aktarılan dosyaya «Tüm eğitimler» sütunu eklendi; ekranda rozet olarak görünen bilgi dosyada da var."
                    ]
                }
            }
        },
        {
            "title": "Müşteriye satışçı atama reddediliyordu: pasifleştirilmiş bir firma iki satışçıyı tamamen kilitlemişti",
            "tickets": [
                "EGT-177"
            ],
            "changes": {
                "satis": {
                    "fixed": [
                        "Müşteri kartından satışçı atanamıyordu; ekran hiçbir açıklama vermeden «yetkiniz yok» diyordu. Yetki tamdı. Sebep şuydu: bir firma canlıya iki kez kaydedilmiş, kopyası pasifleştirilmişti. Pasif bir firma hiç kimsenin erişebildiği listede olmaz — ekran ise kaydederken satışçının BÜTÜN firma listesini geri gönderiyor ve sistem listedeki her firmayı yeniden denetliyordu. Sonuç: o pasif firmayı hâlâ taşıyan iki satışçı, hiçbir firmaya atanamaz hale gelmişti.",
                        "Kural artık yalnız DEĞİŞEN satır için işliyor: kendi erişemediğiniz bir firmayı başkasına devredemezsiniz — bu aynen duruyor — ama dokunulmamış eski bir atama, devretme sayılmıyor.",
                        "Aynı kusurun sessiz yarısı da kapandı: kişi ekranından kaydederken, sizin göremediğiniz bir firma o kişinin listesinden sessizce siliniyordu (ekran çizemediği firmayı geri gönderemez). Artık görünmeyen atamalar yerinde kalıyor — kimsenin seçmediği ve kimsenin göremeyeceği bir silme olmuyor."
                    ]
                }
            }
        },
        {
            "title": "Teklif geçerlilik hatırlatması hiç ulaşmıyordu: mektup şifreli bir adrese gönderiliyordu",
            "tickets": [
                "OPS-21"
            ],
            "changes": {
                "satis": {
                    "fixed": [
                        "«Teklifinizin geçerliliği yaklaşıyor» hatırlatması müşteriye hiç ulaşmıyordu. Hatırlatmayı üreten günlük tarama, alıcının e-posta adresini veritabanından ham hâliyle okuyordu; o adres kişiye özel anahtarla şifreli saklandığı için mektuba alıcı olarak okunamaz bir metin yazılıyor, posta sağlayıcısı da «bu geçerli bir adres değil» diyerek reddediyordu.",
                        "Hiçbir yerde uyarı çıkmıyordu, çünkü şifreli metin de sonuçta bir metindir: kayıt yazılıyor, iş kuyruğa giriyor ve ret ancak saatler sonra sağlayıcıdan geliyordu. Canlıda ölçüldü — hatırlatma bugüne kadar tek bir teklifte tetiklenmiş ve o mektup da bu sebeple düşmüştü.",
                        "Adres artık müşteri kullanıcısı kaydı üzerinden okunuyor. Bekleyen tek mektup gönderilmedi ve gönderilmemesi doğru: o kayıt canlıda duran demo verisidir, alıcı adresi hiçbir zaman posta alamayan bir deneme adresidir. Yani bu hata yüzünden gerçek bir müşteriye giden hiçbir mektup kaybolmadı."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "Aynı hatanın tekrarını yakalayan bir test eklendi: hatırlatma mektubunun alıcı satırında gerçek e-posta adresinin durduğu doğrulanıyor. Testin işe yaradığı, düzeltme geri alınıp testin gerçekten kırıldığı görülerek doğrulandı."
                    ]
                }
            }
        },
        {
            "title": "Teklif ve yazışma mektupları canlıda gönderilemiyordu — mektup artık diğer tüm e-postaların kabuğunda",
            "tickets": [
                "OPS-19"
            ],
            "changes": {
                "satis": {
                    "fixed": [
                        "Müşteriye giden yazışma mektubu — teklifin kendisi, muhasebe bildirimi ve teklif geçerlilik hatırlatması — canlıda gönderilemiyordu: posta işçisi mektubu yazmaya çalışırken çöküyor, mektup kuyrukta kalıyordu. Aralıklı görünüyordu, çünkü kırılma işçinin o ana kadar hangi mektupları yazdığına bağlıydı.",
                        "Sebep: bu mektup, çerçevesi için hazır bir bileşen çağırıyordu ama o bileşen ancak başka türden bir mektup yazıldıktan sonra tanımlı hâle geliyor. Yani mektup, kendisinden önce gönderilen başka bir mektubun yan etkisine bağımlıydı.",
                        "Mektup artık ürünün kendi e-posta kabuğunu kullanıyor: üstte 3E Akademi adı, beyaz kart, altta şirket satırı — panelden çıkan diğer bütün e-postalarla aynı. Referans kodu mektubun başında rozet olarak duruyor, yani destek hattının konuştuğu kod okuyanın da gözünün önünde.",
                        "Mektubun düz metin karşılığı da oluştu. Metni önce gösteren istemciler (saat, ekran okuyucu, HTML'i temizleyen kurumsal geçitler) bu mektupta şimdiye kadar hiçbir şey göremiyordu."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "Hatayı hiçbir test yakalamamıştı: bildirim testlerinin tamamı posta göndericisini taklit ediyor ve taklit gönderici şablonu hiç çizmiyor. Artık mektubu gerçekten çizen bir test var — kırılma tam olarak orada oluşuyordu."
                    ]
                }
            }
        }
    ]
}
