codePulse
Git geçmişi ve import ilişkilerinden bakım risklerini çıkaran; terminal, JSON, Markdown ve görsel HTML raporu üreten yayınlanmamış TypeScript CLI paketi.
Neden yaptım?
Problem
Kod tabanında en riskli dosyalar, birlikte değişen parçalar ve tek kişiye bağımlı alanlar günlük geliştirme sırasında kolayca görünmez kalıyor.
Yaklaşım
Git geçmişini stream ederek değişim sıklığı, churn ve yazar dağılımını topladım; bunu statik import grafiğiyle birleştirdim. Tek bir sağlık puanı yerine hotspot, temporal coupling, bus factor, blast radius ve refactor önceliği gibi ayrı sinyaller ürettim.
Parçalar değil,
veri akışı.
Her katman tek bir sorumluluğu taşıyor; ürün davranışı sınırların arasında kaybolmuyor.
Zor kısımlar.
Sinyali gürültüden ayırmak
Lock dosyaları, üretilmiş çıktılar ve büyük toplu commit’ler sonucu kolayca bozabiliyor. Varsayılan filtreler, kullanıcı ignore dosyası ve eşiklerle analiz kapsamını açıkça yapılandırdım.
Büyük geçmişi tekrar tekrar okumamak
Git çıktısını belleğe bir defada almak yerine stream edip JSONL olarak cache’ledim. HEAD değişmediyse yeniden analizde geçmişi tekrar çağırmayan, ilerlediyse yalnızca yeni aralığı ekleyen bir akış kurdum.
Doğru iş için
doğru araç.
Dil ve framework bağımsız commit verisi toplarken büyük çıktıları tek seferde belleğe almamak için.
Commitleri satır bazında okuyup yalnızca yeni HEAD aralığını ekleyerek tekrarlı analiz maliyetini düşürmek için.
Hotspot, coupling, bus factor ve blast radius gibi farklı riskleri tek, açıklaması zor bir skora gömmemek için.
Path, tarih aralığı ve çıktı formatlarını küçük ama genişleyebilir bir CLI sözleşmesiyle sunmak için.
Aynı analiz sonucunu terminalde hızlı okuma, CI için JSON ve paylaşım için Markdown/HTML olarak kullanmak için.
Risk formülleri ve analizörlerin eşik davranışlarını hızlı, deterministik testlerle korumak için.
Öğrendiklerim.
Repository sağlığı tek bir kalite skoruna indirgenemez; farklı risk sinyalleri aynı dosyada kesiştiğinde anlam kazanır.
Git geçmişi dil bağımsız güçlü bir kaynak, import grafiği ise değişimin yayılma alanını anlamak için tamamlayıcıdır.
Geliştirici aracı çıktıyı terminal, CI ve paylaşılabilir rapor gibi farklı kullanım yerlerine taşıyabilmelidir.