· kaynak Hacker News – Front Page (native)
Linear, yapay zekâ ajanları kod doğrulamayı darboğaz haline getirdikten sonra CI hattını baştan kurdu
Yapay zekâ kodlama ajanları sayesinde Linear çok daha hızlı gönderim yapıyor, ancak CI bu hıza yetişemedi. Ekip, PR bekleme sürelerini nasıl kısalttığını ve TypeScript hattındaki test başına runner maliyetini nasıl yarıya indirdiğini anlatıyor.

Ajanlar, CI'nın doğrulayabildiğinden daha hızlı gönderim yapıyor
Hacker News'in ana sayfasına ulaşan Linear'ın mühendislik yazısına göre, yapay zekâ kodlama ajanları kodun gönderilme hızını artırdı; ancak doğrulama bu hıza ayak uyduramadı. Her pull request yine de CI'dan geçmek zorunda, bu yüzden geliştirme hızlandıkça CI kısıtlayıcı unsura dönüştü — altyapı maliyetlerini yukarı iterken hem geliştiricileri hem de ajanları geri bildiriği beklerken boş bıraktı.
Yazı, Linear'ın CTO'su Tuomas'ın "CI maliyetleri yüksek" başlıklı bir issue atamasıyla ve daha hızlı CI talebiyle başlıyor. Ekip başarıyı iki eksende ölçtü: bir PR'nin CI'da ne kadar beklediği ve ne kadar runner süresi tükettiği. Şirketin test suiteleri yıl başından bu yana neredeyse dört katına çıkmış olsa da, PR bekleme süresi altı dakikanın üzerindeken beş dakikanın hafif üzerine indi; test başına runner süresi ise kabaca yarıya düştü.
Yeniden çalışma dört alana ayrıldı: yükseltilmiş altyapı ve araç zinciri, optimize edilmiş kapı (gating) job'ları, azaltılmış tekrarlanan kurulum ve daha verimli test yürütme. Linear'ın kod tabanı çoğunlukla TypeScript olmasına rağmen ekip, değişikliklerin birçoğunun diğer diller ve araç zincirleri için de geçerli olduğunu belirtiyor.
Daha hızlı donanım ve yerel derleyici
Erken kazanılan bazı iyileştirmeler CI'nın kendisinde hiçbir değişiklik gerektirmedi. İş yüklerinin GitHub Actions'tan daha hızlı CPU'lara, daha yüksek performanslı depolamaya ve daha iyi cache altyapısına sahip üçüncü taraf runner'lara taşınması, geçiş öncesi ve sonrası birebir karşılaştırmada job'ları ortalama %34 hızlandırdı; tsc iş yüklerinde düşüş %52 oldu.
Araç zincirinin modernleştirilmesi de yardımcı oldu. Yerel TypeScript derleyicisi olan tsgo'ya geçiş, tsc kontrolünün haftalık medyanını %73 azalttı — typechecking darboğaz olmaktan çıkacak kadar.
Tip kontrolcüsü olmadan lint
Linear'ın birkaç özel lint kuralı TypeScript tip bilgisine dayanıyordu; bu da her lint çalışmasını tam tip grafiğini inşa etmeye zorluyor ve lint'i en çok bellek tüketen CI job'larından biri haline getiriyordu. Ekip bu kuralları, soyut sözdizimi ağacı üzerinde statik analiz kullanacak, fonksiyon benzeri yapıları ve guard kalıplarını hiçbir tip verisi olmadan tanıyacak şekilde yeniden yazdı.
Bu, ESLint'in TypeScript'i tamamen bırakmasını sağladı: API lint süresi %68, tüm depo lint süresi %55 düştü ve bellek kullanımında önemli bir azalma görüldü. Yalnızca sözdizimine dayalı kuralların taşınması kolay olduğundan, bu değişiklik sonrasında Oxlint'a geçişi de kolaylaştırdı ve lint'e harcanan runner-dakikalarını daha da azalttı.
Her şeyi kapatan job'ları kısaltmak
CI'yı bir sistem olarak görmek, diğer tüm işlerin önünde duran küçük job'lara dikkat çekti — bir PR'nin hangi yollara dokunduğuna ve aynı girdiler için aynı testlerin zaten geçip geçmediğine karar veren job'lara. Sekiz API test shard'ından hiçbiri bu kontroller bitmeden başlayamıyor, dolayısıyla en küçük gecikmeler bile orantısız maliyetli.
Fetch derinliğine sınır getirilmesi bu kapıların en yavaşını 94 saniyeden 20'ye indirdi; working tree'ye hiç ihtiyaç duymayan job'lar ise checkout kaldırıldıktan sonra 27 saniyeden 7'ye düştü. Push ve merge-queue olayları için, geçmişi sınırlı, seyrek (sparse) ve blob'suz checkout ek olarak yaklaşık 11 saniye kazandırdı. Değişiklik algılama job'ının medyan süresi 26'dan 8 saniyeye, p90'ı 31'den 12'ye, en yavaş çalışması ise 138'den 37'ye düştü.
Runner geçişi ayrıca checkout askıya kalmaları getirdi; sağlayıcı bunu, üçüncü taraf runner'ların GitHub'a erişmek için kullandığı doğrudan IP bağlantısındaki aralıklı bozulmaya bağladı. Linear, actions/checkout'ı kendi composite action'ıyla değiştirdi; bu action geri çekilmeli (backoff) yeniden deneme yapıyor, Git'in düşük hız ayarlarını kullanarak takılan bir bağlantıyı yaklaşık 30 saniye sonra iptal ediyor ve kalıcı bir Git mirror'unu yapışkan (sticky) diskte tutuyor.
Son olarak ekip, cache işaretleyici yazımlarını son pre-merge kontrolünden çıkardı; çünkü PR'ler testler geçtikten sonra bile merge kuyruğunda bekliyordu. Bu, her API pull request'i için merge yolundan 42 saniye, cache kaçırma durumunda ise zorunlu kontrolden kabaca bir dakika kısalttı.
Tekrarlanan kurulumu azaltmak
Bir runner'ı başlatmak, paketleri kurmak ve derleme bağımlılıklarını hazırlamak, birkaç saniyelik faydalı iş yapan job'ların tam dakikalarca altyapı süresi tüketebilmesi anlamına geliyordu. Üç değişiklik, shard başına kurulum süresini yaklaşık %44 azaltarak 110–140 saniyeden 67–73 saniyeye indirdi.
Daha önce her shard'da 7–8 saniyelik bir apt kurulumu olan Postgres istemcisi, Node ile birlikte bir CI base image'ına gömüldü. pnpm install, tüm monorepo workspace'i yerine yalnızca API paketi ve bağımlılıklarıyla sınırlandırılarak 44–73 saniyeden 16–18 saniyeye düşürüldü. node_modules cache'i ise testlerin onu yeniden oluşturmaktan daha yavaş olduğunu göstermesinin ardından kaldırıldı: bir cache isabeti yaklaşık 28 saniyede geri yüklenirken, filtrelenmiş bir kurulum kabaca 7,5 saniye sürüyordu.
Yazı ayrıca, yalnızca girdileri değiştiğinde yeniden çalıştırılması gereken kurulumlara dikkat çekiyor; örneğin API container'ları her çalışmada tam veritabanı migration geçmişini yeniden çalıştırıyor.
Neden önemli
Yapay zekâ tarafından üretilen kod yalnızca yazılımın yazılma şeklini değiştirmiyor; aşağı akıştaki her şeyin yük profilini de değiştiriyor. Ajanlar daha fazla değişiklik ürettikçe, doğrulama kapasitesi — insanın yazma hızı değil — hız sınırlayıcı hale geliyor ve CI faturaları hacimle birlikte büyüyor. Linear'ın yanıtı diğer ekiplerin kopyalayabileceği bir şablon sunuyor: daha hızlı donanımda çalışın, ucuz kontrollerden pahalı tip grafiği bağımlılıklarını çıkarın, kapı job'larını kritik yol mühendisliği olarak ele alın ve cache'ler ile tekrarlanan kurulumun gerçekten kendini amorti edip etmediğini denetleyin. Ajan güdümlü gönderim norm haline geldikçe, daha fazla mühendislik kuruluşunun yeniden tasarım yapması gereken kısıtın kod üretimi değil, doğrulama altyapısı olmasını bekleyin.
- #ci-cd
- #ai-coding-agents
- #typescript
- #devops
- #test-automation