Günlük · Geliştirici yazısı
Stitchu'yu neden dört çalışma hattına böldük?
17 Ekim 2026'da Stitchu'nun kalıp motoru, web sitesi, yeni hesap servisi ve sitenin kendi sayfaları aynı anda, her biri kendi hattında geliştirildi; sonuçları tek bir entegratör birleştirdi. Bu yazı o günün kaydı ve hatların durum dosyalarından, mesajlarından ve test makbuzlarından yazıldı: kim ne yaptı, nerede birbirimizi bekledik, hangi sorunlar yeşil testlerden kaçtı ve ne hâlâ açık. Elbiselerin hiçbiri henüz dikilmedi.
- Önce: aynı anda tek elbise, tek yazar
- Kim ne yaptı
- Neden paralel
- Nerede birbirimizi bekledik
- Yeşil testlerden kaçan sorunlar
- Ne öğrendik
- Hâlâ çözülmeyenler
Önce: aynı anda tek elbise, tek yazar
Ekim ortasına kadar iş tek bir sırayla yürüdü. 27 Eylül'den beri kural, bir elbise tamamen bitmeden diğerine başlamamak ve aynı anda yalnız bir ajanın kod yazmasıydı. Kullandığımız iki yapay zekâ kodlama aracı sırayla çalıştı: 10–13 Ekim arasında Claude'un yönettiği bir koşu, ardından 14 ve 15 Ekim'de Claude koşusu olmadan Codex. 13 Ekim'deki devir notları tek elbise kilidini ve tek yazar kuralını, dosya sahipliğine göre ayrılmış hatlarla değiştirdi.
17 Ekim'de iki araç aynı koşuda çalıştı. Entegratör Root ve okuyucu hattı Codex'te çalışıyordu. Motor, web, hesap ve pazarlama hatları Claude oturumlarıydı. Claude oturumları Codex'e doğrudan mesaj gönderemiyordu; bu yüzden her hat diğerlerinin okuduğu iki dosyaya yazdı: bir durum dosyası (neyin sahibi, ne yapıyor, ne açık) ve numaralı mesajların durduğu bir giden kutusu.
Kim ne yaptı
Aşağıdakilerin hepsi hatların kendi dallarında. Bu yazı yazılırken hiçbiri canlı sitede değildi.
- Root (Codex), entegratör. Entegrasyon dalının, motorun yerel derlemesinin, ortak servis dosyalarının ve barındırma ayarlarının sahibi. Bir hattın commit'lerini ancak hattın makbuzundaki dosya özetlerini (hash) kontrol ettikten sonra birleştiriyor, sonra yeniden derleyip testleri yeniden koşuyor. Bağımsız kontroller için kendi alt ajanlarını başlatıyor: biri ilk gerçek kalıp paketini istekle karşılaştırdı, biri ortak başlığı, yükleme durumlarını ve sayfalar arası tutarlılığı denetledi, biri de servisin onarım döngüsünü inceledi.
- Okuyucu (Codex). Yazılı bir tarifi ya da fotoğrafı elbisenin yapılandırılmış bir okumasına çeviriyor. Ücretli model çağrıları bunlar. Herkese açık sitede bu adım henüz açık değil; oradaki atölye tek bir örnek tasarım üretiyor.
- Motor (Claude). C++ kalıp motoru (yerel ve tarayıcı için WebAssembly olarak derleniyor), çizimler ve dikiş rehberi metni. Bu yazı yazılırken 15 makbuz teslim etmişti; aralarında şunlar var: istek öyle diyorsa kalçanın kesinlikle altında bitmesi gereken bir fermuar açıklığı, her bedende düz kalan bir düz siluet, seçilen bedenin dizine göre boy kontrolü ve hangi dikişin ya da yüksekliğin hatalı olduğunu söyleyen hata mesajları. Gerçek paketleri de inceledi.
- Web (Claude). Atölye ve gardırop. Başarısız ya da yarıda kalan bir istek artık tarayıcı yeniden açılınca kaybolmuyor. Kayıtlı bir tasarım, kayıtlı okumasından tarayıcıda başka bir bedende yeniden üretilebiliyor; yeni model çağrısı gerekmiyor ve sürümler yan yana karşılaştırılabiliyor. Gardırop bir hesaba kaydedebiliyor ve servis yavaşken ya da çalışmıyorken hesabın durumunu gösteriyor. Günün ilerleyen saatlerinde ortak başlık, alt bilgi ve içeriğe geç bağlantısı da bu hatta geçti.
- Hesap (Claude). Stitchu'da hesap yoktu; giriş yapmayla ilgili tek satır kod yoktu. Hat ayrı bir Cloudflare Worker kurdu: kullanıcılar, oturumlar ve tasarım sürümleri için D1, dosyalar için R2. Bağımsız bir güvenlik incelemesi altı sorun buldu: dördü düzeltildi, biri maliyet kararına dönüştü (parola özetleme, ücretsiz Workers planının verdiğinden fazla işlemci süresi istiyor), biri de ancak site servise yönlendirilince kontrol edilebilir (barındırma platformunun istek boyutu sınırı). Kurulan servis 6 MB'lık bir fotoğraf yüklemesi dahil 11 testin 11'ini geçti. Henüz siteye bağlı değil.
- Pazarlama (Claude). Metinler, rehberler, günlük, yama notları, arama başlıkları ve paylaşım kartları. Henüz çalışmayan özelliklere dair iddiaları kaldırdı, kesimden önceki adımlar için beş rehber yazdı ve ücretsiz örneklerin Etsy'de satılıp satılamayacağına baktı; örnekler Etsy'nin dijital ürünlerin satıcı tarafından tasarlanmış olması kuralını karşılamıyor, bu yüzden mağaza açılmadı.
Neden paralel
Motor işi okuyucuya bağlıydı: her düzeltme gerçek model çıktısında denenmeliydi ve her model çağrısı dakikalar sürüyordu. Web sitesi, hesap servisi ve sitenin sayfaları bu sonuçlara bağlı değildi. Onları motor bitene kadar bekletmek, üç hattı günün çoğunda boşta bırakırdı; bu yüzden aynı anda çalıştılar ve Root'un birleştirmelerinde buluştular.
Nerede birbirimizi bekledik
- Canlı model çağrıları entegrasyonu dondurdu. İlk okuma 289 ile 309 saniye, onarım çağrıları 73 ile 142 saniye sürdü. Bir sonuç ancak çalıştığı kaynağa ve motor dosyalarına birebir bağlanabiliyorsa geçerli sayılıyor; bu yüzden Root çağrılar sürerken entegrasyon dalını dondurdu, hatlar kendi dallarında çalışmaya devam etti. Pazarlama hattının ilk turu bir dondurma sırasında incelendi ve ancak dondurma bitince birleştirildi.
- Her dosyaya tek yazar. Her hat dosyalarını kendi durum dosyasında listeledi ve her dosyanın tek yazarı vardı. Ortak dosyalar için izin gerekiyordu. Ana sayfa hem metin hem yerleşim istiyordu; pazarlama ve web hatları mesajla anlaştı: HTML işaretlemesini, metni, görselleri ve arama etiketlerini pazarlama yazar; ortak stil dosyasını, bileşenleri, yüklemeyi ve erişilebilirliği web yazar. Web'in stil dosyası gelene kadar pazarlama stillerini sayfanın içinde tuttu. Barındırma ayarları Root'un dosyası; her hat oraya yalnız bir satır ekleyebildi, kendi dalının önizleme yayınını kapatan satırı. Çünkü gönderilen her dal aksi hâlde bir önizleme derlemesi alıyor ve o gün ilk gönderimler bunu yaptı.
- Root'un birleştirme sırası. Hatlar commit'lerini bir makbuzla gönderiyor: commit özetleri, dosya özetleri, koşan testler ve kanıtın yeri. Root kontrol ediyor, birleştiriyor, motoru yeniden derliyor ve testleri yeniden koşuyor. Saat 14:50 UTC'de hesap, pazarlama ve web hatlarını ve kendi tutarlılık düzeltmelerini tek bir entegrasyon commit'inde birleştirdi. Bu yazı o akşam yazılırken, o birleştirmeden sonra gönderilmiş 77 hat commit'i hâlâ bekliyordu; hesap servisi bulutta çalışıyordu ama sitenin ona yönlendirilmesi için Root'u bekliyordu.
- 8 GB belleği olan tek bir dizüstü. Bütün hatlar tek bir makineyi paylaştı. Web hattı tarayıcı testlerini, Chrome ve yerel Workers çalışma ortamı üst üste binmesin diye makine genelindeki iki yuva üzerinden koştu; pazarlama hattı tarayıcı kontrollerini bir kilit altında teker teker koştu. Bir web test koşusunda yerel hesap worker'ı başlayamadı, çünkü başka bir oturumun worker'ı aynı hata ayıklama portunu (9229) tutuyordu; hesap hattı bundan sonra her worker'a kendi portunu verdi.
Yeşil testlerden kaçan sorunlar
Bunların her biri onu yapan hattın kontrollerinden geçti. İşi yapmamış bir inceleyici, başka bir hat ya da test sonucu yerine gerçek çıktıyı (PDF metnini, ekranı) okuyan biri buldu.
- Paylaşım kartları elimizde olmayan bir özelliği vaat ediyordu. Yaklaşık 20 sayfanın bağlantı önizlemesi şunu söylüyordu: “Bir elbisenin fotoğrafını çek. Gerçek bir dikiş kalıbı al. Elle yazılmış bir C++ motoru onu tam senin bedenine göre çizer.” Herkese açık atölye fotoğrafını okumuyor, bedenine göre kalıp da çizmiyor. Sayfa kontrolleri yeşildi; bağımsız bir inceleyici kartı kritik olarak işaretledi. Kart artık çizilmiş üç elbiseyi, ücretsiz EU36 PDF'leri ve “henüz dikilmedi” notunu gösteriyor; elbise yazılarının da kendi kartları var.
- Telefondaki başlık elbiseleri gizledi. 390 × 844'lük bir telefon ekranında ortak başlık 177 piksel kaplıyordu; ana sayfanın ilk ekranında hiç elbise görünmüyordu. Taşma da sayfa hatası da 0'dı. Web hattının tek satırlık başlığı 57 piksel; bir sonraki birleştirmeyi bekliyor.
- İlk gerçek paket, kontrollerinden geçtikten sonra incelemede kaldı. Diz üstünde biten, kolsuz, düz kesim ve arka ortası fermuarlı bir elbisenin kısa yazılı tarifinden, iş hattı altı dosyanın hepsini üretti; tarayıcı testleri geçti ve Root dosya özetlerini eşleştirdi. PDF'leri okuyan bir inceleyici şunları buldu: kalıp bele oturacak şekilde biçimlenmişti (bitmiş göğüs, bel ve kalça 90, 77 ve 96 cm), etek ucu dizdeydi ve yaka biyesi talimatı fermuar açıklığını kapatıp halkaya çeviriyordu. Motor ve okuyucu düzeltmelerinden sonra bir sonraki yeni paket üçünü de geçti: düz bir yan çizgi, dizin 40 mm üstünde biten etek ve fermuarda açık kalan biye. Bu bir iç testti; herkese açık atölye henüz tarif almıyor.
- Bir hesap hatası “yükleniyor” durumunda takıldı. Hesap servisi 404 döndürünce hesap sayfası yükleniyor durumunda kalıyor ve servisin reddettiğini söylüyordu. Root'un tutarlılık ajanı bunu bir tarayıcı koşusunda buldu. Hesap dalı artık yeniden deneme seçeneğiyle “kullanılamıyor” durumunu gösteriyor; birleştirmeyi bekliyor.
- Atölye örneği yayımlanmamış bir elbise üretiyor. Atölyedeki örnek tasarım, EU34–EU44 bedenlerinde dört PDF'iyle pembe ince çizgili, arkası fiyonklu mini; oysa günlük bu elbisenin PDF paketinin yayımlanmadığını söylüyordu. İki sayfa da kendi kontrollerinden geçmişti. Hikâye sayfası artık atölyenin ne ürettiğini ve elbisenin neden ücretsiz kalıplar arasında olmadığını söylüyor; örneğin yayımlanmış bir elbise olup olmayacağına Root karar verecek.
- PDF başlıkları siteyle uyuşmuyordu. Göğüs açıklıklı mininin PDF'lerinin başlığı “Bow Cap-Sleeve Mini Dress”, iki kruvaze mininin ikisi de “Draped Mini Dress”. İndirilen dosyalar artık elbisenin sitedeki adıyla kaydediliyor; pazarlama hattı hem site hem PDF kapakları için tek bir ad dosyası önerdi, motor hattı henüz yanıt vermedi.
- Pazarlama hattı başka bir hattın Chrome'unu kapattı. Bir tarayıcı kontrolü sırasında kendi takılmış tarayıcısı sandığı arayüzsüz (headless) bir Chrome'u kapattı. O tarayıcının üst süreci pazarlama hattına ait değildi; yani başka bir hattın testi olabilir. Bütün hatlara o saatte düşen tarayıcı testlerini yeniden koşmalarını söyledi. O zamandan beri yalnız kendi başlattığı süreçleri kapatıyor ve önce üst süreci kontrol ediyor.
Bir kez de tersi oldu. Bir tarayıcı testi, motorun WebAssembly paketinin Chrome'da başlamadığını bildirdi. Root bunu test sunucusuna kadar izledi: sunucu dosyaları UTF-8 karakter kümesi belirtmeden gönderiyordu; paket sağlamdı ve yeniden derlenmedi. Düzeltme, ilk mesajı okuyan her hatta ayrı bir mesaj olarak gitti.
Ne öğrendik
Bunların hiçbiri yeni bir yöntem değil. Dallar, kod sahipleri, birleştirme sırası ve bağımsız inceleme sıradan yazılım pratikleri. Gün, işin çoğunu yapay zekâ ajanları yaptığında bunların nerede önemli olduğunu gösterdi.
- Bağlam. Bir hat yalnız durum dosyasında ve kendisine gönderilen mesajlarda yazanı biliyor. Commit özeti ve kanıt yolu taşıyan mesajlar, alıcının bir iddiaya güvenmek yerine onu kontrol etmesini sağladı; Root hatların makbuzlarında bunu yaptı. Bir bilgi değiştiğinde, WebAssembly karakter kümesinde olduğu gibi, düzeltmenin ilk mesajı okuyan herkese ulaşması gerekti. Öğleden sonra motor, web ve pazarlama hatlarının her biri, deponun ayrı geçici kopyalarında çalışan uygulayıcı ajanlarla bir koordinatör olarak çalıştı: uygulayıcılar tek bir değişikliğin ayrıntısını, koordinatör ise birleştirmeyi, kontrolleri ve mesajları tuttu.
- İş bölümü. Dosyaya göre bölmek, dosyanın belli bir sahibi olduğunda işe yaradı. En yavaş olduğu yer kimsenin açıkça sahip olmadığı yerdi: ortak başlık, menü ve alt bilgi. 177 piksellik başlık 15:40 UTC'de bildirildi. O alan o sırada Root'un tutarlılık ajanındaydı; web hattı 16:32'de devraldı ve düzeltmeyi 18:12'de teslim etti, hâlâ birleştirmeyi bekleyen bir dalda.
- Entegrasyon. Her hattın testleri kendi dalında yeşildi. Yukarıdaki sorunlar hatların arasında ya da bir sayfayla bir dosyanın arasında duruyordu: paylaşım kartı ile atölye, atölye ile günlük, site ile PDF kapakları. Aynı paketin iki bağımsız incelemesi de birbirini tutmayabiliyor: Root'un inceleyicisi bir sonraki yeni paketi yazıcı denemesi ve terzi provası için uygun buldu; başka şeylere bakan motor inceleyicisi ise bitmiş yakanın 316 mm olduğunu, bedenin boyun çevresinin 360 mm olduğunu buldu: fermuar kapalıyken yaka boyun dibine oturamaz. Asıl darboğaz da birleştirmeydi: dört hat, tek bir entegratörün birleştirebildiğinden hızlı iş üretti ve her birleştirme motorun yeniden derlenmesi ve testlerin yeniden koşması demekti.
Hâlâ çözülmeyenler
- Hiçbir elbise dikilmedi ya da prova edilmedi. Beş ücretsiz EU36 kalıbı dijital örnek; kumaşını kesmeden önce bir prova (toile) dik.
- Yaka sorununun henüz kuralı yok. Kapalı bir yakanın en az bedenin boyun çevresi kadar olmasını isteyen kontrol kendi dalında hazır, ama motorun temel yakasıyla çizilen her yakayı kırmızıya çevirir (360 mm'lik boyna karşı 305–312 mm); ücretsiz beş kalıp dahil katalogdaki 20 giysinin 19'u bu kontrolden zaten geçiyor. Ölçü kuralına Root karar verecek.
- İkinci yeni istek, EU38 bedende penslerle bele oturan bir elbise, motorun doğrulayıcısında iki yaka–omuz birleşiminde ve motorun henüz ölçemediği bir yüzey boyunda kaldı. Paket çıkmadı.
- Hesaplar bulutta çalışıyor ama siteye bağlı değil.
- Atölye örneği, PDF başlıkları ve A4 birleştirme notu hâlâ açık. Not siyah köşe karelerinden söz ediyor; sayfalarda ise daire içinde artı işaretleri var.
- Çoğu sayfada Türkçe metin sayfa yüklendikten sonra yerleşiyor; arama motorları bu sayfaları yalnız İngilizce görüyor. Günlük yazılarının ve başvuru sayfalarının /tr/ altında Türkçe adresleri de var. Analitik kullanmıyoruz; kaç kişinin okuduğunu ya da indirdiğini bilmiyoruz.
- Bu yazı yazılırken 17 Ekim'deki işin hiçbiri canlı sitede değildi. Root'un birleştirmesini bekliyor.
İlgili: Bir kalıp nasıl yapılır: bir elbise, fotoğraftan PDF'e · yama notları · prova (toile) dikmek