« Tüm yayınlar

Refactyl'ın doğrulayıcısı, kodun kendisinden daha hatalıydı

Vue 2'den Vue 3'e geçiş yapan Refactyl, geçerli kodu hatalı diye reddeden bir doğrulayıcı hatası buldu. AST paylaşımının doğrulama araçlarında neden tehlikeli olduğunu anlatıyoruz.

Kod tabanlarını otomatik olarak dönüştüren Refactyl, Vue 2'den Vue 3'e geçişte üretilen her bileşeni Vue'nun kendi derleyicisiyle doğruluyordu. Ancak canlı bir migrasyonda, tamamen geçerli Vue 3 çıktısı bu doğrulayıcı tarafından reddedilmeye başladı. Sorun, performans için eklenen bir kısayoldaydı: parse() adımından elde edilen AST, compileTemplate() fonksiyonuna doğrudan aktarılıyordu. Ama compileTemplate(), belirli v-if ve slot yapılarında AST'nin taşımadığı meta veriler bekliyordu ve bu da kodu üretim aşamasında patlatıyordu.

Bu hatanın asıl tehlikesi görünmezliğiydi. Sistem, doğrulamadan geçemeyen dosyaları güvenli şekilde orijinal haliyle bırakıp işaretleyecek şekilde tasarlanmıştı — hiçbir şey çökmedi, hiçbir hata loglanmadı. Sonuç sadece dönüşüm oranının düşmesi ve işaretleme oranının artması olarak görüldü; bu da sistemin "dikkatli davrandığı" izlenimi verdi, aslında iyi kodu sessizce reddettiği değil. Ekip, çözümü hem parse() hem compileTemplate() adımlarını kaynak metinden, AST paylaşımı olmadan çalıştıracak şekilde yeniden yazdı.

Bu olay, doğrulama katmanı kuran her mühendis için genel bir ders çıkarıyor: yanlış geçişler (false pass) gürültülü ve kendini düzeltir, kullanıcı şikayet eder ve hata bulunur. Ama yanlış reddetmeler (false fail), tasarlanmış bir güvenlik mekanizması tarafından yutulur ve fark edilmez. Refactyl ekibi artık doğrulayıcıyı üretim kodu gibi test ediyor, geri dönüş (fallback) yollarını hata yolları gibi izliyor ve her zaman gönderilecek asıl çıktıdan doğrulama yapıyor — ara temsillerden değil.

» KaynakDev.to