Kod Yerine Korece Şartname Commit Ediyorum — 3 Şartname Sayfasıyla PWA Uygulama + Sunucu
(github.com/SoliEstre)Yapay zekaya kod yazdırırken sürekli takıldığım bir şey vardı. Ortaya çıkan kod kalıyor, ama o kodu üreten konuşma ve niyet uçup gidiyor. Üç ay sonra "Bu kod neden böyle?" diye soracak bir yer kalmıyor.
Bu yüzden yönü tersine çevirmeyi denedim. Niyeti içeren şartnameyi git'e commit edip, kodu build çıktısı olarak ele almak. Bunu doğrulamak için küçük bir uygulamayı baştan sona yapıp yayımladım.
Rimlog adlı bir PWA; okuma ve öğrenme kayıtlarında yapay zeka eski notları birbirine bağlamaya yardımcı oluyor. Sunucu yok, üyelik yok, veriler yalnızca tarayıcıda duruyor.
Uygulamanın kendisi sıradan. Paylaşmak istediğim şey onu yapma biçimim.
Yöntem
Repo'daki eux/ klasöründe Korece 3 şartname sayfası var. Uygulama iskeletinin tamamı 40 satır, yapay zeka kart widget'ı 25 satır, insight sunucusu ise tek sayfa. Şu tür cümlelerden oluşuyor.
saveCapture : Yakalama formunu (kaynak adı·alıntı·benim düşüncem·etiketler) kaydet — captures listesinin en başına ekle + local storage'a yansıt + "Kaydedildi" toast'ı göster + kayıt sekmesine geç.
Bu dosyayı EstreUX adlı araca verdiğinizde kod çıkıyor (buna brew diyorlar). Üretilen koda şartnamenin hash'i işleniyor; yalnızca şartnameyi ya da yalnızca kodu değiştirirseniz pre-commit commit'i engelliyor. Şartnamenin eskidiği anda yalana dönüşmesi sorununu bir gate ile engellemiş oluyoruz.
Rakamları da ölçtüm. Framework'te zaten bulunan 152 satırlık sayısal tuş takımını 28 satırlık şartnameye geri döndürmek gibi gerçek ölçümler yaptığımda, insanın bakımını yaptığı satır sayısı %60-82 azaldı. Üretilen kodun kendisi özgününden daha uzun da olabiliyor. Azalan kısım, insanın okuyup düzelttiği taraf. Ölçüm kayıtları repoda duruyor.
Sunucu da tek sayfa şartname
Pages demosu serverless olduğu için yapay zeka yalnızca etiket çakışması fallback'iyle çalışıyor. Düzgün çalıştırmak için self-hosted bir sunucu ekledim; bu da tek bir şartname sayfasından brew edilmiş, 0 bağımlılıklı tek dosyalık bir node dosyası. Backend'i seçerek kullanıyorsunuz.
nvidia(varsayılan): build.nvidia.com'un ücretsiz API'si. Kart kaydı olmadan anahtar veriyor; OpenAI uyumlu ve dakikada yaklaşık 40 istek sunduğu için kişisel günlük için bol bol yeterliclaude-cli/codex-cli: Her istekteclaude -p/codex execkomutunu child process olarak çağırıyor. Zaten ödediğiniz Claude/ChatGPT aboneliğini API anahtarı olmadan yeniden kullanmanın bir yoluopenai/google: Sadece key proxy
Anahtarlar ve kimlik doğrulama yalnızca sunucuda duruyor, tarayıcıya çıkmıyor.
Henüz emin olmadığım şeyler
Şartname↔kod tutarlılığı kararını statik diff'e ek olarak property tabanlı dinamik kontrollerle genişletiyorum, ama ağırlık kalibrasyonu henüz hazır değil. Ayrıca headless DOM ortamında framework render'ının gerçek tarayıcıdan farklı çalıştığı bir false positive sınıfı keşfettim; doğrulama ortamını gerçek tarayıcıya yükseltmek de yapılacaklar arasında. Commit geçmişine en baştan bakarsanız scaffold→şartname→üretim→ince ayar süreci sırayla duruyor.
- Canlı: https://soliestre.github.io/Rimlog/
- Repo: https://github.com/SoliEstre/Rimlog
- Build kaydı (ayrıntılı): https://estreui.tistory.com/5
İki şeyi merak ediyorum. Şartnameyi SSoT olarak tutma yaklaşımının tuzakları sizce neler? Özellikle şartnamenin ifade gücünün kodu yakalayamadığı noktalarla nerede karşılaştığınızı merak ediyorum. Bir de claude -p'yi uygulama backend'i olarak kullanan bu aboneliği yeniden kullanma yolunda, gerçek kullanımda takılabilecek noktalar olur mu (rate limit, kullanım şartları, latency açısından)?
Henüz yorum yok.