{
    "date": "2026-08-17",
    "entries": [
        {
            "title": "Kullanım şartları artık panele giren herkese soruluyor — ve katılımcıya yazılmış metinler de soruluyor",
            "tickets": [
                "EGT-171",
                "OPS-17"
            ],
            "changes": {
                "musteri": {
                    "fixed": [
                        "Şirketinin panelde henüz bir yetki vermediği kişi, kullanım şartlarını onaylayamıyordu: sistem onu «önce şu belgeyi onaylayın» diye onay ekranına yolluyor, onay ekranı da panel yetkisi istediği için onu içeri almıyordu. Yani belgeyi onaylaması isteniyor, onaylayacağı sayfa reddediliyordu. Onay ekranı artık yetki değil yalnızca kimlik soruyor.",
                        "Panelde iki sınıf kullanıcı yoktur: kişi kısıtlı olsun olmasın panele giriş yapıyor. Yetki, o kişinin ne YAPABİLECEĞİNİ sınırlar — kullanım şartlarının ona uygulanıp uygulanmadığını değil.",
                        "Katılımcıya yazılmış zorunlu metinler kimseye sorulmuyordu. Onay kapısı yalnızca «müşteri» kitlesine yazılmış metinleri arıyordu; bugün kullanım şartları iki kitleye birden yazılı olduğu için eksiklik görünmüyordu, ama yalnız katılımcılara bir açık rıza metni yayımlandığı gün o metin hiç sorulmayacaktı. Artık kişi katılımcıysa katılımcı metinleri de soruluyor — bir hesap hem koordinatör hem katılımcı olabildiği için ikisi birleştiriliyor, biri diğerinin yerine geçmiyor."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "Şirketinin panelde iş vermediği kişiye gösterilen açıklama sayfası, hata izleme sistemine «production error» olarak düşüyordu: bir kişi 25 dakikada sekiz kez denedi ve otomatik bir arıza kaydı açıldı (OPS-17). Bu sayfa kapının çalışmasıdır, arıza değil; yanlış şifre, hız sınırı ve süresi dolmuş giriş bağlantısı için 12.08'de verilen kararla aynı listeye alındı. Uygulama günlüğünde iz kalmaya devam ediyor — alarm çalmıyor, kayıt duruyor."
                    ]
                }
            }
        },
        {
            "title": "Firma, henüz panele girmemiş personelini de eğitime ekleyebiliyor — rıza satırda «bekleniyor» diye görünüyor",
            "tickets": [
                "EGT-170"
            ],
            "changes": {
                "musteri": {
                    "fixed": [
                        "Eğitime personel eklerken «Ekle» düğmesine basılıyor, hiçbir şey olmuyordu. Sistem aslında reddediyordu — kişinin kayıtlı KVKK rızası yoktu — ama bu ret mesajı ekranda hiçbir yere bağlı değildi, dolayısıyla ekran susuyordu. Artık her ret sebebi, hangi başlıkla gelirse gelsin formun altında yazılıyor; sonradan eklenecek bir ret de sessizleşemez.",
                        "Asıl kural da değişti: firma, panele yeni eklediği ve henüz hiç giriş yapmamış personelini artık eğitime ekleyebiliyor. Eskiden ekleme tamamen reddediliyordu ve rıza ancak kişi kendi girip metni onayladığında oluştuğu için «personeli kursa yaz» işi «personel giriş yapsın» işini bekliyordu.",
                        "Rıza kaybolmadı, YERİ değişti: katılımcı listesinde o kişinin adının yanında «KVKK rızası bekleniyor» uyarısı duruyor. Firma içindeki bir liste bir ifşa değildir; adı firma dışına çıkaran adımlar (Bakanlık bildirimi, sertifika) rızanın sorulacağı yerdir."
                    ]
                },
                "planlama": {
                    "fixed": [
                        "Aynı kural ofis tarafında da değişti; eğitim katılımcı listesinde rızası olmayan kişinin adının yanında «KVKK rızası bekleniyor» uyarısı çıkıyor. İki taraf aynı kuralı uyguluyor — biri ekleyip diğeri reddetse, aynı kişi için iki farklı cevap üretilirdi."
                    ]
                }
            }
        },
        {
            "title": "Devralınan kayıtlarda arama artık başka firmanın personelini getirmiyor",
            "tickets": [
                "EGT-169"
            ],
            "changes": {
                "backoffice": {
                    "fixed": [
                        "Personel listesi ekranında bir firma adı aratıldığında başka firmaların kişileri de geliyordu. Sebebi: arama kutusu kişi adı ve firma adının yanında eğitimin YAPILDIĞI YERİ ve belge türünü de tarıyordu — ve yapıldığı yer çoğunlukla bir firmanın kendi tesisidir. Canlıda ölçüldü: «kotekna» araması 89 satır getiriyordu, 23'ü Kotekna'nın tesisinde eğitim almış BAŞKA firmaların personeliydi.",
                        "Arama kutusu artık kişi adı ve listedeki firma adına bakıyor. Kimlik numarası da aranabiliyor: kutuya 11 haneli bir numara yazılırsa o kişinin satırı geliyor (numara şifreli saklandığı için normal metin araması ona hiç ulaşamıyordu).",
                        "Kaybolan hiçbir soru yok, ikisi de filtre oldu: «Listedeki firma adı» ve «Eğitimin yapıldığı yer» için ayrı filtreler eklendi. Firma filtresi kesin eşleşme yapar — «Kotekna» seçildiğinde Saybolt'un personeli çıkmaz. Zaten var olan «Bağlı firma» filtresi bağlama YAPILDIKTAN sonrasını sorar; bağlama işinin kendisinde ise ham liste adı gerekiyordu."
                    ]
                }
            }
        },
        {
            "title": "Postmark kancalarının paylaşılan sırrı adresten çıktı — erişim loguna yazılmayı bıraktı",
            "tickets": [
                "EGT-167"
            ],
            "changes": {
                "altyapi": {
                    "fixed": [
                        "Gelen posta ve teslim geri bildirimi kancaları, paylaşılan sırlarını ADRESİN İÇİNDE taşıyordu (/posta/{sır}). Doğrulama sağlamdı; taşıma biçimi değildi: nginx her isteğin tam adresini erişim kaydına yazar. Ölçüldü — geri bildirim kancasına 143 istek gelmiş ve sır, kayıtların sıkıştırılmış arşivlerine 143 kez düz metin olarak düşmüş. Yani bu «olacak» değil, olmuş bir sızıntıydı: kayıt dosyasını okuyabilen herkes kancayı çağırabilir hâle gelmişti.",
                        "Sır artık «Authorization» başlığında taşınıyor; nginx başlıkları kaydetmez. Bu, sağlayıcının kendi tavsiyesi ve mevcut tek yol: Postmark imza doğrulaması desteklemiyor (resmî dokümandan doğrulandı, 17.08.2026), önerdiği yöntem HTTP temel kimlik doğrulaması.",
                        "Karşılaştırma yine sabit zamanlı ve yanlış kimlik yine 404 alıyor — yanlış çağrılan bir ucun «buradayım» demesi, tahmin etmeyi aramaya çevirir. Kimlik başlığı hiç yoksa da cevap aynı.",
                        "Sırlar döndürüldü: kayıtlara düşmüş olan eski değerler artık hiçbir kapıyı açmıyor.",
                        "Geçiş, posta akışı hiç kesilmeden yapıldı: önce iki adres birden çalışır hâlde yayımlandı, sağlayıcı tarafındaki üç kanca adresi (gelen posta, geri dönen posta, açılma bildirimi) yeni biçime çevrildi, canlıda doğrulandı ve ancak ondan sonra sırrı adresinde taşıyan eski adresler kaldırıldı. Bugün o adreslere gelen bir istek 404 alır."
                    ]
                }
            }
        },
        {
            "title": "Tutarsız test kayda geçti ve kök nedeni bulundu: rastgele üretilen ad, aranan adla çakışıyordu",
            "tickets": [
                "EGT-164"
            ],
            "changes": {
                "altyapi": {
                    "fixed": [
                        "Bir test, tam koşularda seyrek olarak sertifikaları boş görüyordu. Sebep veri sızması ya da zamanlama değil, rastgelelikti: test verisi üreten kütüphane Türkçe adlar üretiyor ve her yetmiş addan birinde «Onur» geçiyor — testin aradığı ad da «Onur» olduğu için arama iki kişi buluyor, ekran ilk satıra bakıyor ve o satır sertifikasız koordinatör oluyordu. Koordinatörün adı sabitlenerek çakışma kaldırıldı; kırılma önce bilerek yeniden üretildi, sonra düzeltildi.",
                        "Aynı testte sessiz bir tuzak daha kapatıldı: reddedilen bir form da yönlendirme döndürdüğü için, kayıt hiç yazılmasa bile test o adımı geçiyor ve hata üç satır sonra «beklenen 2, gelen 0» diye görünüyordu — bozuk sorgu gibi okunan bir hata. Artık formun reddedilmediği de doğrulanıyor."
                    ]
                }
            }
        },
        {
            "title": "Panele davet edilen kişi artık bir yere girebiliyor: «Eğitimlerim» ekranı herkese açık",
            "tickets": [
                "EGT-172",
                "EGT-151"
            ],
            "changes": {
                "katilimci": {
                    "fixed": [
                        "Davetle gelen, şifresini belirlemiş ama henüz bir eğitime yazılmamış kişi hiçbir yere giremiyordu: sol menü tamamen boştu, panelin ana sayfası «panel size açılmadı» duvarı veriyordu, kendi eğitim ekranı ise sayfa bulunamadı hatası döndürüyordu. Yani sisteme girmiş ama hiçbir şey göremeyen bir insan vardı.",
                        "Artık «Eğitimlerim» ekranı imzalı giriş yapan herkese açık. Kişi bir eğitime kayıtlıysa eğitimin günü, yeri, programı, oturumları ve sertifikaları görünür; kayıtlı değilse «şu anda dahil olduğunuz bir eğitim yok» yazar ve bir eğitime kaydedildiğinde neyin görüneceğini anlatır. Sertifikaları varsa yine altta durur.",
                        "Panelin ana sayfası, panelde yetkisi olmayan kişiyi duvara çarptırmak yerine doğrudan kendi eğitim ekranına götürüyor.",
                        "Kişinin KENDİ ekranları yetki istemiyor: Bilgilerim, Güvenlik ve Bildirim tercihleri. Bunlar kişinin kendi hesabıyla ilgilidir; şirketin ona panelde bir iş verip vermemesi, kendi şifresini değiştirip değiştiremeyeceğini belirlemez. Önceden üçü de reddediliyordu.",
                        "Sol menüde «Eğitimlerim» kalemi artık herkeste görünüyor — eğitimi olmayanda da. Arkasında açıklama yazan bir kapı, hiçbir kalemi olmayan boş bir menüden iyidir."
                    ]
                },
                "musteri": {
                    "changed": [
                        "Şirket verisi gösteren ekranlarda sınır aynen duruyor: teklifler, faturalar, personel listesi ve organizasyon, yetkisi olmayan kişiye kapalı kalmaya devam ediyor. Açılan şey kişinin kendi ekranlarıdır, şirketin ekranları değil."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "«Katılımcıya davet maili ulaşmadı» kaydı (EGT-151) ölçüldü: mail gönderilmiş ve Gmail tarafından KABUL EDİLMİŞ. Postmark kaydında 16.08 17:48'de teslim edildiği ve Gmail sunucusunun «250 OK» cevabı verdiği görünüyor. Gönderen tarafı da sağlam: alan adının DKIM ve dönüş yolu doğrulaması tamam, SPF ve DMARC kayıtları yerinde. Yani sistemde bir arıza yok; mailin spam ya da «Tanıtımlar» kutusuna düşmüş olması bekleniyor."
                    ]
                }
            }
        },
        {
            "title": "Devralınan kaydı firmaya bağlama reddedildiğinde ekran artık sebebini söylüyor",
            "tickets": [
                "EGT-149"
            ],
            "changes": {
                "backoffice": {
                    "fixed": [
                        "«Firmaya bağla» penceresi, işlem reddedildiğinde hiçbir şey söylemeden kapanıyordu: satırlar seçiliyor, firma seçiliyor, onaylanıyor ve ekranda hiçbir değişiklik olmuyordu. Sebep, reddin formda karşılığı olmayan bir başlığa yazılmasıydı — mesaj üretiliyor ama gösterilecek bir yeri yoktu. Artık ret, kırmızı bir bildirim olarak ve sebebiyle birlikte ekranda duruyor.",
                        "Bu, gerçek bir yanlış anlamaya yol açmıştı: bir kişinin firmaya bağlandığı bildirildi, oysa bağlama hiç gerçekleşmemişti — işlem kaydında da izi yoktu.",
                        "⚠ Reddin kendisi doğru bir kuraldır ve değişmedi: bir kayıt, belge adının hangi eğitime karşılık geldiği eşlenmeden firmaya bağlanamaz. Eşlenmemiş bir ad, firmanın ekranında kaydedemeyeceği bir satır demektir. Değişen tek şey, bu kuralın artık sessiz olmaması."
                    ]
                }
            }
        },
        {
            "title": "Boş bırakılmış bir not alanı ekranı komple çökertiyordu",
            "tickets": [
                "OPS-18"
            ],
            "changes": {
                "planlama": {
                    "fixed": [
                        "Tedarikçi kartı açılırken sayfa bomboş kalıyordu. Sebep, notu hiç yazılmamış bir tedarikçiydi: uzun metin kutusunun altındaki karakter sayacı, boş bırakılmış alanın uzunluğunu okumaya çalışıyor ve tüm ekranı düşürüyordu. Artık boş alan boş kabul ediliyor, sayaç «0/500» diyor."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "Aynı kusurun taşıyıcısı olan diğer üç kontrol de düzeltildi: maskeli alan, saat alanı ve tarih-saat alanı. Hepsi aynı sebeple kırılıyordu — bir alan hiç doldurulmamışsa arayüze «boş metin» değil «değer yok» olarak geliyor ve kontrolün kendi varsayılanı bu durumda devreye girmiyor.",
                        "Tekrarını önleyen bir kural yazıldı: metin alan kontrolleri, kendisine verilen değeri doğrudan okuyamaz — önce boş sayılması gerekir. Kural, düzeltmeler geri alındığında gerçekten kırıldığı görülerek doğrulandı.",
                        "Hatanın yeri, üretimdeki sıkıştırılmış dosyadan kaynak haritasıyla çözülerek bulundu: tarayıcı «Toast-DIeL-TGe.js satır 91» diyordu, harita onu tek bir kaynak satırına kadar götürdü."
                    ]
                }
            }
        },
        {
            "title": "Dışa aktarılan tablolar Excel'de düzgün açılıyor; tedarikçi pasifleştirme artık gerçekten çalışıyor",
            "tickets": [
                "EGT-176",
                "EGT-175"
            ],
            "changes": {
                "planlama": {
                    "fixed": [
                        "Personel sorgulama ekranından indirilen tablo Excel'de bozuk karakterlerle açılıyordu. Dosya doğru yazılıyordu ama Excel'e «bu dosya hangi alfabede» diyen üç baytlık işaret konmuyordu; Excel de onu makinenin eski alfabesi sanıp Türkçe harfleri bozuyordu. Artık işaret konuyor ve isimler doğru görünüyor.",
                        "Aynı dosyada ikinci bir sorun daha vardı: Türkçe Windows'ta Excel sütunları virgülden değil noktalı virgülden ayırır, yani tablo tek sütuna düşüyordu. Ayırıcı değiştirildi; dosya hem Excel'de hem diğer tablo programlarında sütunlu açılıyor.",
                        "Tedarikçi kartındaki «Pasifleştir» düğmesi onaylandığında hiçbir şey olmuyordu. Sebep, onay kutusunun çağırdığı işlevin hiç yazılmamış olmasıydı — düğme çiziliyor, basılıyor ve sessizce hiçbir şey yapmıyordu. Sunucu tarafı ve yetki kontrolü baştan beri hazırdı; eksik olan yarım satırdı. Artık pasifleştirme ve yeniden açma çalışıyor.",
                        "Onay kutusunun kendisi de yanındaki düğmelerin üstüne taşıyordu, yani ne yazdığı okunamıyordu. Kutu artık açıldığı düğmeye sağdan hizalanıyor ve satırın üstüne değil, içine doğru açılıyor."
                    ]
                },
                "satis": {
                    "fixed": [
                        "Mali tablo dışa aktarması da aynı iki kusuru taşıyordu ve birlikte düzeltildi."
                    ]
                },
                "altyapi": {
                    "fixed": [
                        "Tablo indirmesi tek bir ortak yere taşındı; bundan sonra yazılacak üçüncü bir dışa aktarma alfabe işaretini ve ayırıcıyı kendiliğinden alır — «unutmamak» bir kural olmaktan çıktı.",
                        "Ekranda çağrılan ama hiç yazılmamış bir işlevi yakalayan bir kural eklendi. Böyle bir düğme hiçbir uyarı vermeden ölü durur; kuralın işe yaradığı, düzeltme geri alınıp kuralın kırıldığı görülerek doğrulandı."
                    ]
                }
            }
        },
        {
            "title": "Eğitimi olmayan kişiye rıza metni sorulması geri alındı",
            "tickets": [
                "EGT-173"
            ],
            "changes": {
                "katilimci": {
                    "fixed": [
                        "«Eğitimlerim» ekranı bugün herkese açıldıktan sonra, hiçbir eğitime kayıtlı olmayan kişiye de katılımcı aydınlatma metni ve «Açık rıza ver» düğmesi gösterilmeye başlamıştı. Düğmeye basınca sayfa bulunamadı hatası çıkıyordu, çünkü rıza kaydı bir eğitime kayıtlı olmayı gerektiriyor — haklı olarak.",
                        "Yani kişiden onaylaması istenen bir belge gösteriliyor, onaylayacağı yol kapatılıyordu. Bu, aynı gün başka bir ekranda düzeltilen hatanın aynısıydı ve bu kez düzeltmenin kendisi üretmişti.",
                        "Artık rıza kartları yalnız bir eğitime kayıtlı kişiye görünüyor. Kayıtlı olmayan kişi ekranı açar, «şu anda dahil olduğunuz bir eğitim yok» yazısını ve varsa sertifikalarını görür — onaylayamayacağı bir belge görmez. Bir eğitime eklendiği anda rıza kartı ekranında belirir."
                    ]
                }
            }
        },
        {
            "title": "Müşteri paneline Yardım Merkezi geldi: 13 makale, hepsi gerçek ekran görüntüleriyle",
            "tickets": [
                "EGT-174"
            ],
            "changes": {
                "musteri": {
                    "added": [
                        "Panelin içinde Yardım Merkezi açıldı. Sol menünün altındaki adınıza tıklayıp «Yardım Merkezi» derseniz açılır; solda arama ve makale listesi, sağda okuduğunuz makale ve içindekiler durur. Ofis tarafındaki yardım merkezinin aynısıdır — biri kullanan diğerini de bilir.",
                        "On üç makale, firma yetkilisinin işi yapma sırasına göre dizildi: panele ilk girişte ne yapılır, firma profili ve yetki belgeleri, lokasyonlar, organizasyon ve yetki matrisi, personel ekleme, 3E'den daha önce eğitim almış personelin devralınması, teklif isteği, teklifi okuyup onaylamak ve çerçeve sözleşme, eğitimler ve katılımcı listesi, açık eğitimler, sertifikalar ve faturalar, sözleşmeler, kendi hesabınız.",
                        "Her adımın yanında o ekranın FOTOĞRAFI var — çizim değil, panelin kendisinden alınmış görüntü. Ekran değiştiğinde görüntü de yenilenir; böylece yardım metni ekranı yanlış anlatamaz.",
                        "Makaleler firmanın kendi diliyle yazıldı: neyin neden istendiği, hangi adımın neyi tetiklediği ve bilinçli olarak yapılmayan şeyler (personel eklemek davet göndermez, teklif isteği sipariş değildir, kaydedene kadar kimse oluşmaz) açıkça söyleniyor.",
                        "Yardım Merkezi hiçbir yetki istemez: şirketin panelde henüz bir iş vermediği kişi de açabilir. Paneli en çok tanıması gereken kişi zaten odur."
                    ]
                },
                "altyapi": {
                    "added": [
                        "Yardım ekran görüntüleri artık Playwright ile tek komutta alınıyor: müşteri panelinin 22 ekranı sırayla açılıyor, 1440×900 fotoğraflanıyor ve her ekranın tarayıcı hataları toplanıyor. Böylece yardım görüntülerini yenilemek, aynı zamanda panelin tamamını gezmek oluyor.",
                        "İlk koşuda 22 ekranın hepsi hatasız çizildi.",
                        "Yardım makalesinde adı geçen her ekran görüntüsünün gerçekten var olduğunu doğrulayan bir test eklendi. Eksik görüntü, okuyucuya bozuk bir çerçeve gösterir ve ekranın bozuk olduğunu düşündürür."
                    ]
                }
            }
        }
    ]
}
