Skip to main content

Tek komutla başla

Temiz bir klon. Yeni bir oturum. Düzeneğin (harness) ilk işi, ajanın “buraya nasıl gireceğim” sorusuyla bağlam yakmasını engellemektir. İyi kurulmuş bir ortam aparatı için ajanın ilk komutu hep aynıdır: make setup. Sonraki üç komut da sabittir: make dev, make test, make check. Bu dört hedef yerinde değilse her oturum bir keşif turuna başlar ve bağlam penceresi feature işine değil arkeolojiye gider. Bu sayfa, dört hedefli minimum Makefile’ı ve bunun yanına oturan idempotent init.sh bootstrap scriptini verir; bu ikisinin birlikte ürettiği şeye sıcak başlangıç (hot-start) denir.

Ne işe yarar

İki dosyanın ikisi de farklı zamanlarda koşar.
  • Makefile — her oturumda, her geliştiricide, her CI koşusunda koşar. make check düzeneğin tek komutluk doğrulama sözleşmesidir: lint + tip denetimi + test sırayla koşar, hepsi geçerse iş “doğrulandı” sayılır. CI’nin koştuğu komutla lokalde koştuğun komut aynıdır; sapma yoktur.
  • init.sh — proje doğduğunda tek bir kez koşar. Anthropic’in Effective harnesses for long-running agents yazısında tanımlanan üçlüyü üretir: init.sh + claude-progress.txt + ilk git commit. Bizim Türkçe karşılıklarımızda bu üçlü init.sh + progress.md/decisions.md + init: bootstrap complete commit’idir. Idempotenttir: ikinci kez koşulursa hiçbir şey kırmaz; ilk kez koşulursa repo “ajanın çalışabileceği” duruma gelir.
Makefile ile init.sh bir kuralı paylaşır: ajanın ne yapacağına dair tüm cevap dosyada olmalı, sohbette değil. Düzeneği /dersler/02-duzenek-gercekte-nedir “kendini açıklayan ortam” diye tanımlar; bu sayfa o aparatın somut çıktısıdır.

Şablon — Makefile

Aşağıdaki Makefile olduğu gibi kopyalanır ve repo köküne Makefile adıyla konur. Girintiler sekme karakteridir (make boşluk kabul etmez).
Dört zorunlu hedef: help hedefi öz-belgelidir: make yazınca her hedefin yanındaki ## ... yorumu ekrana basılır. Yeni gelen bir ajan (veya geliştirici) önce make yazar, sözleşmeyi okur.

Şablon — init.sh

Aşağıdaki init.sh repo köküne konur ve chmod +x init.sh ile çalıştırılabilir yapılır. Tek kez koşar; ikinci kez koşulursa hiçbir adımı tekrar etmez (idempotent).
Bu script üç sözleşmeyi karşılar:
  1. make setup başarıyla tamamlandı.
  2. make test en az bir smoke testi geçirdi.
  3. progress.md, decisions.md, features.json iskelet halinde mevcut ve init: bootstrap complete commit’i atıldı.
Ayrıntı için bkz. /dersler/06-baslangic-neden-kendi-fazina-sahip-olmali.

Konvansiyon

  • KonumMakefile ve init.sh her ikisi de repo kökünde. Alt dizinde değil.
  • İsimMakefile büyük M, uzantısız. init.sh küçük harf, .sh uzantısı, çalıştırılabilir bit.
  • setup — yeni bir klonda tek seferde tamamlanır; manuel müdahale veya tarayıcı adımı içermez.
  • dev — tek komutla servisi başlatır; ortam değişkeni gerektiriyorsa .env.example repoda olur.
  • test — tam test suitini koşar; alt küme değil.
  • check — CI ile birebir aynı komutu koşar. make check lokalde yeşilse PR yeşil olacaktır.
  • init.shset -euo pipefail zorunlu. Her adım idempotent.

Özelleştirme

Dil sözdizimleri değişir, sözleşme değişmez. Aşağıdaki üç varyant aynı dört hedefi farklı toolchain üstünde verir.
Monorepo durumunda kök Makefile üst düzey hedefleri tutar, alt paketlerin kendi Makefile’larına delege eder.
Kural: alt paket make check koşamıyorsa CI da koşamaz. Her paketin kendi dört hedefi tam olur.

Otomasyona bağlama

make check ve init.sh üretildikten sonra otomasyon ucuza biner. GitHub Actions — tek satırlık CI:
Pre-commitcheck hedefini commit anına asma:
pre-commit her commit’te bütün suit’i koşmasın diye stages: [pre-push] kullanıyoruz; hızlı geri bildirim için lint ve format ayrı hook’lara çıkarılabilir, ama “tam doğrulama” hep make check’in arkasında durur.

İlgili dersler