beast-agent 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/beast-agent.js +12 -0
- package/package.json +1 -1
- package/src/agent/engine.js +7 -7
- package/src/agent/llm.js +46 -34
- package/src/agent/scripts/stealthsearch.py +30 -0
- package/src/agent/searxng.js +325 -0
- package/src/agent/seeds/brainstorming/SKILL.md +90 -0
- package/src/agent/seeds/dispatching-parallel-agents/SKILL.md +120 -0
- package/src/agent/seeds/executing-plans/SKILL.md +60 -0
- package/src/agent/seeds/subagent-driven-development/SKILL.md +167 -0
- package/src/agent/seeds/systematic-debugging/SKILL.md +131 -0
- package/src/agent/seeds/test-driven-development/SKILL.md +152 -0
- package/src/agent/seeds/verification-before-completion/SKILL.md +63 -0
- package/src/agent/seeds/writing-plans/SKILL.md +162 -0
- package/src/agent/seeds/writing-skills/SKILL.md +229 -0
- package/src/agent/skills.js +39 -9
- package/src/agent/tools.js +2340 -2273
- package/src/main.js +7048 -7106
- package/src/preload.js +188 -192
- package/src/renderer/i18n.js +1186 -1226
- package/src/renderer/index.html +0 -6
- package/src/renderer/renderer.js +7389 -7480
- package/src/renderer/style.css +3383 -3430
- package/src/agent/obscura.js +0 -292
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dispatching-parallel-agents
|
|
3
|
+
description: Birbirinden bağımsız 2+ iş aynı anda yapılabilecekken kullan — farklı alt sistemlerdeki hatalar, farklı araştırmalar, farklı dosyalar; işler sıra gerektirmeden ve ortak durum paylaşmadan yürüyebiliyorsa.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Paralel Ajan Devri
|
|
7
|
+
|
|
8
|
+
## Genel Bakış
|
|
9
|
+
|
|
10
|
+
İşleri, bağlamı İZOLE alt-ajanlara devredersin. Talimatlarını ve
|
|
11
|
+
bağlamını hassas kurarak odaklarını ve başarısını garanti edersin. Onlar
|
|
12
|
+
senin oturum bağlamını asla görmez — ihtiyaç duydukları her şeyi SEN
|
|
13
|
+
inşa edersin. Bu, kendi bağlamını koordinasyon işine saklar.
|
|
14
|
+
|
|
15
|
+
**Çekirdek ilke:** Bağımsız her problem alanı için bir ajan. Paralel koştur.
|
|
16
|
+
|
|
17
|
+
## Ne Zaman
|
|
18
|
+
|
|
19
|
+
**Kullan:**
|
|
20
|
+
- Farklı kök nedenli 3+ test hatası
|
|
21
|
+
- Birbirinden bağımsız kırılmış alt sistemler
|
|
22
|
+
- Her sorun diğerinin bağlamı olmadan anlaşılabilir
|
|
23
|
+
- Araştırmalar arasında ortak durum yok
|
|
24
|
+
|
|
25
|
+
**Kullanma:**
|
|
26
|
+
- Hatalar ilişkiliyse (biri düzelince diğerleri de düzelebilir) — birlikte incele
|
|
27
|
+
- Tam sistem durumunu görmek gerekiyorsa
|
|
28
|
+
- Ajanlar birbirine karışacaksa (aynı dosyaları düzenliyorlarsa)
|
|
29
|
+
|
|
30
|
+
## Desen
|
|
31
|
+
|
|
32
|
+
### 1. Bağımsız Alanları Belirle
|
|
33
|
+
|
|
34
|
+
Sorunları neyin kırıldığına göre grupla:
|
|
35
|
+
- test-a.test.js: onay akışı
|
|
36
|
+
- test-b.test.js: batch tamamlama
|
|
37
|
+
- test-c.test.js: iptal davranışı
|
|
38
|
+
|
|
39
|
+
Her alan bağımsız — onay fix'i iptal testlerini etkilemez.
|
|
40
|
+
|
|
41
|
+
### 2. Odaklı Ajan Görevleri Yaz
|
|
42
|
+
|
|
43
|
+
Her ajana:
|
|
44
|
+
- **Spesifik kapsam:** tek dosya/alt sistem
|
|
45
|
+
- **Net hedef:** bu testler geçsin
|
|
46
|
+
- **Kısıt:** başka koda dokunma
|
|
47
|
+
- **Beklenen çıktı:** ne buldun + ne düzelttin özeti
|
|
48
|
+
|
|
49
|
+
### 3. Paralel Devret
|
|
50
|
+
|
|
51
|
+
Tüm devirleri AYNI cevapta ver — paralel koşarlar:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
run_background: "tests/a.test.js'deki 3 hatayı düzelt ..."
|
|
55
|
+
run_background: "tests/b.test.js'deki 2 hatayı düzelt ..."
|
|
56
|
+
run_background: "tests/c.test.js hatasını düzelt ..."
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Birden çok çağrı aynı turda = paralel. Tur başına bir çağrı = sıralı.
|
|
60
|
+
Bağımsız adımlar için `run_background_many` TEK ÇAĞRIDA fan-out yapar ve
|
|
61
|
+
bitince TEK birleşik rapor düşürür.
|
|
62
|
+
|
|
63
|
+
### 4. İncele ve Entegre Et
|
|
64
|
+
|
|
65
|
+
Ajanlar dönünce:
|
|
66
|
+
- Her özeti oku
|
|
67
|
+
- Fix'ler çakışıyor mu kontrol et (aynı kod düzenlenmiş mi?)
|
|
68
|
+
- Tam test suite'ini çalıştır — hepsi birlikte çalışıyor mu doğrula
|
|
69
|
+
- Ara sıra elle kontrol — ajanlar sistematik hata yapabilir
|
|
70
|
+
|
|
71
|
+
## Ajan Görev Metni Yapısı
|
|
72
|
+
|
|
73
|
+
İyi görev metinleri:
|
|
74
|
+
1. **Odaklı** — tek net problem alanı
|
|
75
|
+
2. **Kendine yeterli** — problemi anlamak için gereken TÜM bağlam
|
|
76
|
+
(dosya yolları, hata mesajları, test isimleri — ajan senin sohbetini göremez)
|
|
77
|
+
3. **Çıktıya spesifik** — ajan ne döndürmeli?
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
src/agents/abort.test.js'deki 3 hatayı düzelt:
|
|
81
|
+
|
|
82
|
+
1. "partial output ile abort" — 'interrupted at' bekleniyor
|
|
83
|
+
2. "mixed completed/aborted" — hızlı araç abort edilmedi
|
|
84
|
+
3. "pendingToolCount" — 3 beklenirken 0
|
|
85
|
+
|
|
86
|
+
Bunlar zamanlama/race sorunları. Görevin:
|
|
87
|
+
1. Test dosyasını oku, her testin ne doğruladığını anla
|
|
88
|
+
2. Kök nedeni bul — zamanlama mı, gerçek bug mı?
|
|
89
|
+
3. Düzelt:
|
|
90
|
+
- Keyfi timeout'ları event-beklemeliyle değiştir
|
|
91
|
+
- Bulunan gerçek bug'ları düzelt
|
|
92
|
+
- Davranış değiştiyse test beklentisini güncelle
|
|
93
|
+
|
|
94
|
+
SADECE timeout artırma — gerçek sorunu bul.
|
|
95
|
+
|
|
96
|
+
Dönüş: ne bulduğun ve ne düzelttiğin özeti.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Yaygın Hatalar
|
|
100
|
+
|
|
101
|
+
**❌ Çok geniş:** "tüm testleri düzelt" — ajan kaybolur
|
|
102
|
+
**✅ Spesifik:** "abort.test.js'yi düzelt" — odaklı kapsam
|
|
103
|
+
|
|
104
|
+
**❌ Bağlamsız:** "race condition'ı düzelt" — ajan nerede bilmiyor
|
|
105
|
+
**✅ Bağlamlı:** hata mesajlarını ve test isimlerini yapıştır
|
|
106
|
+
|
|
107
|
+
**❌ Kısıtsız:** ajan her şeyi refactor edebilir
|
|
108
|
+
**✅ Kısıtlı:** "sadece testleri düzelt, production koduna dokunma"
|
|
109
|
+
|
|
110
|
+
**❌ Belirsiz çıktı:** "düzelt" — ne değiştiğini bilemezsin
|
|
111
|
+
**✅ Spesifik:** "kök neden ve değişiklik özeti dön"
|
|
112
|
+
|
|
113
|
+
## Doğrulama
|
|
114
|
+
|
|
115
|
+
Ajanlar döndükten sonra:
|
|
116
|
+
1. **Her özeti incele** — ne değiştiğini anla
|
|
117
|
+
2. **Çakışma kontrolü** — ajanlar aynı kodu düzenledi mi?
|
|
118
|
+
3. **Tam suite çalıştır** — tüm fix'ler birlikte çalışıyor mu
|
|
119
|
+
4. **Rastgele kontrol** — ajan raporları iddiadır, kanıt değil
|
|
120
|
+
(verification-before-completion)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: executing-plans
|
|
3
|
+
description: Yazılı bir implementasyon planı bu oturumda uygulanacakken kullan — paralel ajan devri yapılmadan, plan adımları elle yürütülecekse.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan Yürütme
|
|
7
|
+
|
|
8
|
+
## Genel Bakış
|
|
9
|
+
|
|
10
|
+
Planı yükle, eleştirel incele, tüm görevleri uygula, bitince raporla.
|
|
11
|
+
|
|
12
|
+
**Not:** CEO modu / paralel ajan mümkünse subagent-driven-development daha
|
|
13
|
+
iyi sonuç verir — bu skill ajan devrinin olmadığı düz yürütme içindir.
|
|
14
|
+
|
|
15
|
+
## Süreç
|
|
16
|
+
|
|
17
|
+
### Adım 1: Planı Yükle ve İncele
|
|
18
|
+
1. Plan dosyasını oku (ve varsa gösterdiği spec dosyasını)
|
|
19
|
+
2. Eleştirel incele — plan hakkında soru/tereddüt var mı?
|
|
20
|
+
3. Tereddüt varsa: BAŞLAMADAN kullanıcıya bildir
|
|
21
|
+
4. Yoksa: todo_write ile plan görevlerini aç ve başla
|
|
22
|
+
|
|
23
|
+
### Adım 2: Görevleri Uygula
|
|
24
|
+
|
|
25
|
+
Her görev için:
|
|
26
|
+
1. todo_write'ta in_progress yap
|
|
27
|
+
2. Her adımı plan yazdığı gibi uygula (plan ısırık adımlar taşır — atlamak yok)
|
|
28
|
+
3. Belirtilen doğrulamaları çalıştır (run_command — komut çıktısıyla)
|
|
29
|
+
4. done yap, sıradakine geç
|
|
30
|
+
|
|
31
|
+
### Adım 3: Bitiş
|
|
32
|
+
|
|
33
|
+
Tüm görevler tamam ve doğrulandığında:
|
|
34
|
+
- 1-3 satırlık özet rapor: ne yapıldı + doğrulama kanıtları (ör. "npm test ✓ 154/154")
|
|
35
|
+
- verification-before-completion: "bitti" demeden önce taze kanıt şart
|
|
36
|
+
|
|
37
|
+
## Ne Zaman Durup Sorulur
|
|
38
|
+
|
|
39
|
+
Hemen dur:
|
|
40
|
+
- Engel ile karşılaşırsan (eksik bağımlılık, test fail, belirsiz talimat)
|
|
41
|
+
- Plan başlamayı engelleyen kritik boşluk içeriyorsa
|
|
42
|
+
- Bir talimatı anlamıyorsan
|
|
43
|
+
- Doğrulama tekrar tekrar fail ediyorsa
|
|
44
|
+
|
|
45
|
+
**Tahmin etmek yerine sor.**
|
|
46
|
+
|
|
47
|
+
## Ne Zaman Önceki Adıma Dönülür
|
|
48
|
+
|
|
49
|
+
- Kullanıcı planı güncellerse → Adım 1'e dön
|
|
50
|
+
- Temel yaklaşımın yeniden düşünülmesi gerekiyorsa → Adım 1'e dön
|
|
51
|
+
|
|
52
|
+
Engellere zorla geçme — dur, sor.
|
|
53
|
+
|
|
54
|
+
## Hatırla
|
|
55
|
+
|
|
56
|
+
- Planı önce eleştirel incele
|
|
57
|
+
- Plan adımlarını birebir takip et
|
|
58
|
+
- Doğrulamaları atlama
|
|
59
|
+
- Kendi başına plan değiştirme — plan hatalıysa kullanıcıya bildirip karar al
|
|
60
|
+
- Hiçbir doğrulama "elle yaptım" ile geçmez
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subagent-driven-development
|
|
3
|
+
description: Bağımsız görevlere bölünmüş bir implementasyon planı yürütülürken, görev başına taze paralel ajan devredilecekken kullan — CEO modunda planlı geliştirme işlerinde.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Alt-Ajan Destekli Geliştirme
|
|
7
|
+
|
|
8
|
+
Planı, görev başına TAZE implementer alt-ajanı devrederek yürüt; her
|
|
9
|
+
görevden sonra görev incelemesi (spec uyumu + kalite), sonda tüm işin
|
|
10
|
+
genel incelemesi.
|
|
11
|
+
|
|
12
|
+
**Neden alt-ajan:** Bağlamı izole, uzman ajanlara devredersin. Onlar senin
|
|
13
|
+
oturum bağlamını asla görmez — ihtiyaçları olan her şeyi sen kurarsın. Bu
|
|
14
|
+
senin bağlamını koordinasyona saklar ve her görevde taze, kiralanmamış
|
|
15
|
+
bağlam garanti eder.
|
|
16
|
+
|
|
17
|
+
**Çekirdek ilke:** Görev başına taze ajan + görev incelemesi + sonda geniş
|
|
18
|
+
inceleme = yüksek kalite, hızlı iterasyon.
|
|
19
|
+
|
|
20
|
+
**Kesintisiz yürütme:** Görevler arasında kullanıcıya "devam edeyim mi?"
|
|
21
|
+
diye DURMA. Planı sorana kadar yürüt. Durmanın sadece 4 sebebi var:
|
|
22
|
+
(1) geri döndürülemez/yıkıcı işlem, (2) güvenlik hassasiyetli işlem,
|
|
23
|
+
(3) worktree dışına dokunan yan etki (merge, push, publish), (4) plan o
|
|
24
|
+
kadar bozuk ki her yol tahmine dayanıyor.
|
|
25
|
+
|
|
26
|
+
**Karar ver, bekleme:** Çelişki, belirsizlik, plan kusuru — sen karar ver.
|
|
27
|
+
Spec bağlayıcı otoritedir, plan onun savunmasıdır. Her kararı defterine
|
|
28
|
+
`Karar: <neyi> — <neden> — <yanlışsa maliyeti>` olarak yaz ve devam et.
|
|
29
|
+
|
|
30
|
+
## Ne Zaman
|
|
31
|
+
|
|
32
|
+
- Implementasyon planı var mı? → yoksa önce writing-plans
|
|
33
|
+
- Görevler çoğunlukla bağımsız mı? → sıkı bağlıysa satır içi (executing-plans)
|
|
34
|
+
- CEO modu / paralel ajan mümkün mü? → evetse bu skill
|
|
35
|
+
|
|
36
|
+
## Kurulum
|
|
37
|
+
|
|
38
|
+
1. Planı BİR KEZ oku (ve varsa spec'i — çelişkiler spec'e göre çözülür)
|
|
39
|
+
2. todo_write ile her göreve bir madde aç
|
|
40
|
+
3. Defteri kur: `<workspace>/.sdd/<plan-adı>-progress.md` — ilk satır
|
|
41
|
+
`# SDD defteri — plan: <plan dosyası>` olsun. Bağlam sıkışırsa/kaybolursa
|
|
42
|
+
defter VE git log senin hafızandan güvenilirdir; tamamlanan görevleri
|
|
43
|
+
yeniden devretme.
|
|
44
|
+
4. Görev 1'den önce hızlı çelişki taraması: birbiriyle çelişen görevler,
|
|
45
|
+
görevlerin tanımladığı arayüzler tutarlı mı? Bulgu varsa kararını deftere yaz.
|
|
46
|
+
|
|
47
|
+
## Model Seçimi (agent: parametresi)
|
|
48
|
+
|
|
49
|
+
Her devirde en az güçlü yeterli modeli kullan — run_background'da
|
|
50
|
+
`agent:` ile tanımlı ajan ver (%APPDATA%\beast\agents\*.md) ya da görevde
|
|
51
|
+
model beklentisini belirt:
|
|
52
|
+
|
|
53
|
+
- **Mekanik iş** (izole fonksiyon, net spec, 1-2 dosya, plan kodu tam içeriyor):
|
|
54
|
+
hızlı/ucuz model
|
|
55
|
+
- **Entegrasyon/tyargı işi** (çok dosya, pattern eşleme, debug): standart model
|
|
56
|
+
- **Mimari/tasarım işi + FİNAL inceleme:** en güçlü model — final review
|
|
57
|
+
asla oturum varsayılanına düşük kalmamalı
|
|
58
|
+
- **Fix turları 4-5:** takılan implementer'dan bir tier güçlü model
|
|
59
|
+
|
|
60
|
+
## Görev Döngüsü
|
|
61
|
+
|
|
62
|
+
**Küçük aynı-kalıp işleri TOPLA:** plan birkaç küçük bağımsız aynı-tip edit
|
|
63
|
+
listeliyorsa görev başına ajan AÇMA — tek brief'te tüm dosyaları listele,
|
|
64
|
+
tek ajana ver, diff'ini tek unit olarak incele.
|
|
65
|
+
|
|
66
|
+
### 1. Implementeri devret
|
|
67
|
+
|
|
68
|
+
- **Görev brief'i:** görev metnini brief dosyasına yaz
|
|
69
|
+
(`<workspace>/.sdd/gorev-N-brief.md`) — tam değerler, kod, testler brief'te.
|
|
70
|
+
Devir metni şunu içersin: (1) görevin projedeki yeri tek cümle; (2) brief
|
|
71
|
+
dosyasının yolu ("önce bunu oku — gereksinimlerin burada, değerleri birebir
|
|
72
|
+
kullan"); (3) brief'in bilemeyeceği önceki görevlerin arayüz kararları;
|
|
73
|
+
(4) belirsizliklerin çözümü; (5) rapor dosyası yolu
|
|
74
|
+
(`gorev-N-rapor.md`).
|
|
75
|
+
- **Kritik kuralları GÖM:** alt-ajanlar skill OKUMAZ (skills taraması
|
|
76
|
+
arka-ajanlara girmez) — TDD/verification gibi şartları görev metnine tek
|
|
77
|
+
cümleyle göm: "Testten önce kod yok: RED→fail gör→GREEN→pass gör.
|
|
78
|
+
Bitti demeden önce test çıktısıyla kanıtla."
|
|
79
|
+
- **Alt-ajan alt-ajan AÇAMAZ** — bu normaldir: implementer inceleme de
|
|
80
|
+
devredemez; inceleme senden gelir.
|
|
81
|
+
- Aynı anda birden çok implementasyon ajanı devretme (çakışır) —
|
|
82
|
+
BAĞIMSIZ görevler run_background_many ile fan-out edilebilir.
|
|
83
|
+
- Report contract: ajan kısa döner — status + commit + tek satır test özeti +
|
|
84
|
+
endişeler; detay rapor dosyasına yazar (senin bağlamını şişirmez).
|
|
85
|
+
|
|
86
|
+
### 2. Raporu ele
|
|
87
|
+
|
|
88
|
+
- **DONE:** inceleme paketini hazırla, task reviewer devret (adım 3)
|
|
89
|
+
- **DONE_WITH_CONCERNS:** endişeleri oku; doğruluk/kapsam ise review'dan
|
|
90
|
+
ÖNCE ele al; gözlemse not al ve geç
|
|
91
|
+
- **NEEDS_CONTEXT:** eksik bağlamı ver, yeniden devret
|
|
92
|
+
- **BLOCKED:** bağlam sorunuysa bağlamla; akıl sorunuysa güçlü modelle;
|
|
93
|
+
iş büyükse böl; plan hatalıysa karar ver + deftere yaz + düzeltilmiş devir
|
|
94
|
+
|
|
95
|
+
Ajan takıldı dediysen aynı modelle aynı şartlarda TEKRAR deneme — bir şey
|
|
96
|
+
değişmeli.
|
|
97
|
+
|
|
98
|
+
### 3. Görevi incele
|
|
99
|
+
|
|
100
|
+
- **Task reviewer devret** (taze ajan): girdiler = brief dosyası + rapor
|
|
101
|
+
dosyası + diff dosyası. Diff'i kendin ÖZETLEME — `git diff BASE..HEAD` çıktısını
|
|
102
|
+
bir dosyaya yaz (BASE = devirden önceki commit) ve yolunu ver; reviewer tek
|
|
103
|
+
okumada commit listesi + stat + tam diff görür, senin bağlamına diff girmez.
|
|
104
|
+
- Reviewer'a planın Global Kısıtlarını BİREBİR kopyala — bu onun dikkat
|
|
105
|
+
merceğidir. Açık uçlu talimat ("tüm kullanımları kontrol et") EKLEME.
|
|
106
|
+
- Reviewer'a bulguyu ÖNCEDELEN yargılama — "şunu bayraklama" deme; bulgunu
|
|
107
|
+
çıkarsın, inceleme döngüsünde sen kararlaştırırsın.
|
|
108
|
+
- İki karar gereklidir: spec uyumu ✓ VE kalite onayı. Ajanın öz-incelemesi
|
|
109
|
+
task incelemesinin YERİNİ TUTMAZ.
|
|
110
|
+
- Reviewer "diff'ten doğrulanamıyor" işareti koyabilir — bunları kendin çöz:
|
|
111
|
+
plan + görevler-arası bağlam sende.
|
|
112
|
+
|
|
113
|
+
### 4. Fix döngüsü
|
|
114
|
+
|
|
115
|
+
Review spec ❌ veya Critical/Important bulgu bildirirse döngü başlar.
|
|
116
|
+
Minor bulgular döngüye girmez — deftere `Task N: minor (ertelendi): <tek satır>` yaz.
|
|
117
|
+
|
|
118
|
+
Tur başına: bir fix devri + bir scoped re-review. Görev başına MAK 5 tur:
|
|
119
|
+
|
|
120
|
+
- **Tur 1-3 — aynı implementer'a devam:** açık bulguları birebir gönder;
|
|
121
|
+
bağlamı duruyor. Aynı ajana mesaj atılamıyorsa taze implementer'a brief +
|
|
122
|
+
rapor + bulguları ver — rapor dosyası kalıcı hafızadır.
|
|
123
|
+
- **Tur 4-5 — taze implementer + güçlü model:** "Önceki implementer N kez
|
|
124
|
+
denedi; artık sen sahibin. Deneneni rapordan oku."
|
|
125
|
+
- Her turda: implementer kapsayan testleri yeniden çalıştırır, fix raporunu
|
|
126
|
+
AYNI rapor dosyasına ekler. Re-review scoped: SADECE fix diff'inde bulgular
|
|
127
|
+
ADDRESSED/NOT ADDRESSED + yeni kırılma var mı.
|
|
128
|
+
- Defteri her turda güncelle: `Task N: fix turu R/5 (X giderildi, Y açık)`.
|
|
129
|
+
|
|
130
|
+
**Kendin fix YAPMA** — bağlamın koordinasyon için temiz kalmalı ve senin
|
|
131
|
+
fix'in review'sız kalır.
|
|
132
|
+
|
|
133
|
+
**Sigorta (5. turda da açık bulgu):** devretmeyi durdur, her bulguyu kendin
|
|
134
|
+
kararla:
|
|
135
|
+
- Reviewer yanılıyorsa → park et: `Task N: park — <bulgu> — Karar: <kod neden duruyor>`
|
|
136
|
+
- Gerçek ama kimseye binmiyorsa → ertelendi olarak park et
|
|
137
|
+
- Gerçek ve yük taşıyorsa → en küçük açıcı değişikliğe karar ver, deftere yaz,
|
|
138
|
+
sonraki görevin devrine taşı
|
|
139
|
+
|
|
140
|
+
### 5. Görevi tamamla
|
|
141
|
+
|
|
142
|
+
Review temiz gelince (veya bulgular park edildiğinde): deftere
|
|
143
|
+
`Task N: complete (commits <base>..<head>, review clean)` yaz, todo done yap,
|
|
144
|
+
sıradaki görev.
|
|
145
|
+
|
|
146
|
+
## Final Review
|
|
147
|
+
|
|
148
|
+
Tüm görevler bitince TÜM işin incelemesini devret — en güçlü modelle:
|
|
149
|
+
`git diff <plan-başlangıç>..HEAD` diff dosyası + defterdeki ertelenen minor/
|
|
150
|
+
park satırlarıyla (hangi merge'i bloklar triage etsin). Bulgu dönerse TEK fix
|
|
151
|
+
ajanı devret (bulgu başına ayrı ajan değil) + TEK scoped re-review.
|
|
152
|
+
|
|
153
|
+
Bitirince defterdeki tüm `Karar:` satırlarını final mesajında kullanıcıya
|
|
154
|
+
listele — senin onun adına aldığın kararlar buraya kadar görünür olur.
|
|
155
|
+
|
|
156
|
+
## Yaygın Bahaneler
|
|
157
|
+
|
|
158
|
+
| Bahane | Gerçek |
|
|
159
|
+
|---|---|
|
|
160
|
+
| "Spec uyumu kabaca tamam" | Reviewer spec boşluğu buldu = bitmedi. Fix veya cap+karar — başka çıkış yok. |
|
|
161
|
+
| "Kendim fixleyeyim, devir maliyetli" | Senin fix'in review'sız kalır ve bağlamını kirletir. Implementer'a devam ettir. |
|
|
162
|
+
| "Bir tur daha yakınsar" | Cap sonrası turlar yakınsamaz — sorun yapısal. Kararlaştır. |
|
|
163
|
+
| "Reviewer zaten yeni bulgu çıkaracak" | Scoped re-review sadece fix'i doğrular; yeni bulgu deftere gider, döngüye değil. |
|
|
164
|
+
| "Bu bulgu bariz yanlış, düşüreyim" | Karar SADECE cap'te ve her karar deftere. Sessiz düşürme yasak. |
|
|
165
|
+
| "Fix küçük, re-review'sız geç" | Review'sız fix = regresyon kapısı. Her tur re-review ile biter. |
|
|
166
|
+
| "İnceleme döngüyü yavaşlatıyor" | Reviewsuz döngü doğrulanmamış efor. İnceleme fren ve direksiyondur. |
|
|
167
|
+
| "Defter yazımı maliyetli" | Defter bağlam sıkışmasından kurtulan tek şeydir. |
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: systematic-debugging
|
|
3
|
+
description: Herhangi bir bug, test hatası, beklenmedik davranış, build/entegrasyon sorunuyla karşılaştığında — ÇÖZÜM ÖNERMEDEN ÖNCE kullan; kök neden araştırması yapılmadan düzeltme denemesi yasak.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sistematik Hata Ayıklama
|
|
7
|
+
|
|
8
|
+
## Çekirdek ilke
|
|
9
|
+
|
|
10
|
+
**Her zaman kök nedeni bul, sonra düzelt. Belirtiye yama = başarısızlık.**
|
|
11
|
+
|
|
12
|
+
**Bu sürecin harfini ihlal etmek, ruhunu ihlal etmektir.**
|
|
13
|
+
|
|
14
|
+
## Demir Kanun
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
KÖK NEDEN ARAŞTIRMASI OLMADAN DÜZELTME YOK
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Faz 1 tamamlanmadıysa çözüm öneremezsin.
|
|
21
|
+
|
|
22
|
+
## Ne Zaman
|
|
23
|
+
|
|
24
|
+
Her teknik sorun: test hataları, prod bug'ları, beklenmedik davranış,
|
|
25
|
+
performans sorunları, build/entegrasyon hataları.
|
|
26
|
+
|
|
27
|
+
ÖZELLİKLE şunlarda kullan:
|
|
28
|
+
- Zaman baskısı varken (acele tahmini cezbeder)
|
|
29
|
+
- "Hızlı bir tek düzeltme" çok bariz görünüyorken
|
|
30
|
+
- Birden fazla düzeltme denedin ve olmadıysa
|
|
31
|
+
|
|
32
|
+
Basit görünen sorunlarda da atlama — basit bug'ların da kök nedeni var.
|
|
33
|
+
|
|
34
|
+
## Dört Faz
|
|
35
|
+
|
|
36
|
+
Her fazı bitirmeden sonrakine geçemezsin.
|
|
37
|
+
|
|
38
|
+
### Faz 1: Kök Neden Araştırması
|
|
39
|
+
|
|
40
|
+
HİÇBİR düzeltmeden ÖNCE:
|
|
41
|
+
|
|
42
|
+
1. **Hata mesajlarını DİKKATLE oku** — stack trace'i tamamen oku; satır
|
|
43
|
+
numarası, dosya yolu, hata kodu not al. Çözüm genelde mesajın içindedir.
|
|
44
|
+
2. **Tutarlı şekilde yeniden üret** — güvenilir tetikleyebiliyor musun?
|
|
45
|
+
Adımlar neler, her seferinde oluyor mu? Üretilemiyorsa veri topla, TAHMİN ETME.
|
|
46
|
+
3. **Son değişiklikleri kontrol et** — ne değişti? git diff, son commit'ler,
|
|
47
|
+
yeni bağımlılık/config değişikliği.
|
|
48
|
+
4. **Çok bileşenli sistemlerde kanıt topla** — her bileşen sınırında ne
|
|
49
|
+
girdiğini/ne çıktığını logla; HANGİ katmanın kırdığını gösteren tek bir
|
|
50
|
+
kanıt çalıştırması yap, sonra o bileşeni incele.
|
|
51
|
+
5. **Veri akışını izle** — bozuk değer nereden kaynaklanıyor? Kim bu değeri
|
|
52
|
+
gönderdi? Kaynağa kadar yukarı çıkar; kaynağında düzelt, belirtide değil.
|
|
53
|
+
|
|
54
|
+
### Faz 2: Desen Analizi
|
|
55
|
+
|
|
56
|
+
1. **Çalışan örnek bul** — aynı kod tabanında benzer ama ÇALIŞAN kod nerede?
|
|
57
|
+
2. **Referansla karşılaştır** — bir desen uyguluyorsan referans implementasyonu
|
|
58
|
+
TAMAMEN oku (göz gezdirme yok).
|
|
59
|
+
3. **Farkları listele** — çalışanla bozuk arasındaki her farkı, ne kadar küçük
|
|
60
|
+
olursa olsun yaz. "Bu fark önemli olamaz" deme.
|
|
61
|
+
4. **Bağımlılıkları anla** — hangi bileşen/ayar/ortam varsayımlarına dayanıyor?
|
|
62
|
+
|
|
63
|
+
### Faz 3: Hipotez ve Test
|
|
64
|
+
|
|
65
|
+
Bilimsel yöntem:
|
|
66
|
+
|
|
67
|
+
1. **Tek hipotez kur** — "X kök neden, çünkü Y" diye net yaz. Spesifik ol.
|
|
68
|
+
2. **Minimal test et** — hipotezi test eden EN KÜÇÜK değişikliği yap. Tek
|
|
69
|
+
değişken. Birden fazla şeyi birden düzeltme.
|
|
70
|
+
3. **Devam etmeden doğrula** — oldu mu → Faz 4. Olmadı mı → YENİ hipotez;
|
|
71
|
+
üstüne yama EKLEME.
|
|
72
|
+
4. **Bilmiyorsan söyle** — "X'i anlamıyorum" de; araştır, yardım iste.
|
|
73
|
+
|
|
74
|
+
### Faz 4: Uygulama
|
|
75
|
+
|
|
76
|
+
1. **Başarısız test üret** — en basit yeniden üretim; test framework varsa
|
|
77
|
+
otomatik test, yoksa tek seferlik script (test-driven-development skill'i
|
|
78
|
+
ilerler). Düzeltmeden ÖNCE şart.
|
|
79
|
+
2. **Tek düzeltme uygula** — belirlenen kök nedeni hedefle; "buradayken şu da"
|
|
80
|
+
iyileştirmesi YOK, paket refactoring YOK.
|
|
81
|
+
3. **Düzeltmeyi doğrula** — test geçti mi? Başka testler kırıldı mı? Sorun
|
|
82
|
+
gerçekten çözüldü mü? Başarı iddiasından önce verification-before-completion.
|
|
83
|
+
4. **Düzeltme işe yaramadıysa:** DUR. Kaç düzeltme denedin say. 3'ten azsa →
|
|
84
|
+
Faz 1'e dön, yeni bilgiyle yeniden analiz et. 3 ve üzeriyse → mimariyi
|
|
85
|
+
sorgula (aşağıda).
|
|
86
|
+
|
|
87
|
+
### 3+ Düzeltme Başarısızsa: Mimaride Hata Var
|
|
88
|
+
|
|
89
|
+
Desen: her düzeltme başka yerde yeni sorun çıkarıyor; düzeltmeler "büyük
|
|
90
|
+
refactoring" istiyor; her fix yeni belirti üretiyor.
|
|
91
|
+
|
|
92
|
+
DUR ve temel soruları sor: Bu desen sağlam mı? Devam etmek atalet mi?
|
|
93
|
+
Mimariyi refactor etmek mi, belirti düzeltmeye devam etmek mi? Kullanıcıya
|
|
94
|
+
danışmadan 4. düzeltmeyi deneme. Bu başarısız hipotez değil — yanlış mimaridir.
|
|
95
|
+
|
|
96
|
+
## Kırmızı Bayraklar — DUR ve Sürece Dön
|
|
97
|
+
|
|
98
|
+
Kendini şöyle düşünürken yakalarsan:
|
|
99
|
+
|
|
100
|
+
- "Şimdilik hızlı bir fix, sonra bakarız"
|
|
101
|
+
- "X'i değiştirip bakalım" (araştırma olmadan)
|
|
102
|
+
- "Birden fazla değişiklik yapayım, testleri çalıştırırım"
|
|
103
|
+
- "Testi atlayayım, elle doğrularım"
|
|
104
|
+
- "Muhtemelen X'tir, onu düzelteyim"
|
|
105
|
+
- "Tam anlamıyorum ama bu işe yarayabilir"
|
|
106
|
+
- Veri akışını izlemeden çözüm listesi sunmak
|
|
107
|
+
- 2+ başarısız denemeden sonra "bir fix daha"
|
|
108
|
+
- Her fix başka yerde yeni sorun açıyor
|
|
109
|
+
|
|
110
|
+
**Hepsi aynı anlama gelir: DUR. Faz 1'e dön.**
|
|
111
|
+
|
|
112
|
+
## Yaygın Bahaneler
|
|
113
|
+
|
|
114
|
+
| Bahane | Gerçek |
|
|
115
|
+
|---|---|
|
|
116
|
+
| "Sorun basit, sürece gerek yok" | Basit sorunların da kök nedeni var; süreç basitte hızlıdır. |
|
|
117
|
+
| "Acil, süreç için vakit yok" | Sistematik hata ayıklama, tahmin-check döngüsünden HIZLIDIR. |
|
|
118
|
+
| "Önce şunu deneyeyim, sonra araştırırım" | İlk fix deseni belirler; baştan doğru yap. |
|
|
119
|
+
| "Testi fix işe yaradıktan sonra yazarım" | Testsiz fix kalıcı değildir; test önce kanıtlar. |
|
|
120
|
+
| "Birden çok fixi birden yapsam zaman kazanırım" | Neyin işe yaradığını izole edemezsin; yeni bug üretir. |
|
|
121
|
+
| "Referans çok uzun, uyarlarım" | Kısmi anlayış bug garantidir. Tamamını oku. |
|
|
122
|
+
| "Sorunu görüyorum, düzelteyim" | Belirti görmek ≠ kök nedeni anlamak. |
|
|
123
|
+
|
|
124
|
+
## Hızlı Referans
|
|
125
|
+
|
|
126
|
+
| Faz | Anahtar işler | Başarı kriteri |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| 1. Kök neden | Hata oku, üret, değişiklikleri kontrol et, kanıt topla | NE ve NEDEN'i anladın |
|
|
129
|
+
| 2. Desen | Çalışan örnek bul, karşılaştır | Farkları belirledin |
|
|
130
|
+
| 3. Hipotez | Teori kur, minimal test et | Doğrulandı veya yeni hipotez |
|
|
131
|
+
| 4. Uygulama | Test üret, tek fix, doğrula | Bug çözüldü, testler geçti |
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-driven-development
|
|
3
|
+
description: Herhangi bir özellik veya bug fix uygulanırken, implementasyon kodu yazılmadan ÖNCE kullan — yeni özellik, davranış değişikliği, refactoring işlerinde test-önce disiplini zorunludur.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Test-Driven Development (TDD)
|
|
7
|
+
|
|
8
|
+
## Genel Bakış
|
|
9
|
+
|
|
10
|
+
Önce testi yaz. Başarısız olduğunu İZLE. Geçecek minimal kodu yaz.
|
|
11
|
+
|
|
12
|
+
**Çekirdek ilke:** Testin başarısız olduğunu izlemediysen, doğru şeyi
|
|
13
|
+
test ettiğini bilmezsin.
|
|
14
|
+
|
|
15
|
+
**Kuralın harfini ihlal etmek, ruhunu ihlal etmektir.**
|
|
16
|
+
|
|
17
|
+
## Demir Kanun
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
BAŞARISIZ TEST OLMADAN PRODUCTION KODU YOK
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Testten önce kod yazdıysan: SİL. Baştan başla.
|
|
24
|
+
|
|
25
|
+
**İstisna yok:**
|
|
26
|
+
- "Referans olarak tutma"
|
|
27
|
+
- Testleri yazarken "uyarlama"
|
|
28
|
+
- Bakma bile
|
|
29
|
+
- Silmek silmektir. Testten taze implemente et.
|
|
30
|
+
|
|
31
|
+
## Ne Zaman
|
|
32
|
+
|
|
33
|
+
**Her zaman:** yeni özellik, bug fix, refactoring, davranış değişikliği.
|
|
34
|
+
|
|
35
|
+
**İstisnalar (kullanıcıya sorarak):** atılacak prototipler, üretilmiş kod,
|
|
36
|
+
config dosyaları.
|
|
37
|
+
|
|
38
|
+
"Bu seferlik TDD'yi atlayayım" düşüncesi = bahane. DUR.
|
|
39
|
+
|
|
40
|
+
## RED-GREEN-REFACTOR
|
|
41
|
+
|
|
42
|
+
### RED — Başarısız Test Yaz
|
|
43
|
+
|
|
44
|
+
Bir minimal test yaz: ne OLMASI gerektiğini gösterir.
|
|
45
|
+
|
|
46
|
+
**Gereksinimler:**
|
|
47
|
+
- Tek davranış
|
|
48
|
+
- Açık isim (`retry 3 kereden sonra vazgeçer`, "retry works" değil)
|
|
49
|
+
- Gerçek kod (kaçınılmaz değilse mock yok)
|
|
50
|
+
|
|
51
|
+
### RED'i Doğrula — Başarısızlığını İZLE
|
|
52
|
+
|
|
53
|
+
**ZORUNLU. Asla atlama.**
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
run_command: node --test tests/ornek.test.js
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Doğrula:
|
|
60
|
+
- Test FAIL ediyor (error değil)
|
|
61
|
+
- Hata mesajı beklenen
|
|
62
|
+
- Eksik özellik yüzünden fail ediyor (typo değil)
|
|
63
|
+
|
|
64
|
+
**Test hemen geçti?** Mevcut davranışı test ediyorsun. Testi düzelt.
|
|
65
|
+
|
|
66
|
+
**Test error verdi?** Hatayı düzelt, doğru şekilde fail edene kadar tekrar.
|
|
67
|
+
|
|
68
|
+
### GREEN — Minimal Kod
|
|
69
|
+
|
|
70
|
+
Testi geçecek EN BASİT kodu yaz. Fazla özellik, gereksiz opsiyon,
|
|
71
|
+
"şimdiyken ekleyiver" YOK (YAGNI).
|
|
72
|
+
|
|
73
|
+
### GREEN'i Doğrula — Geçişini İZLE
|
|
74
|
+
|
|
75
|
+
**ZORUNLU.** Aynı komutu çalıştır:
|
|
76
|
+
- Test geçiyor
|
|
77
|
+
- Diğer testler hâlâ geçiyor
|
|
78
|
+
- Çıktı temiz (hata/uyarı yok)
|
|
79
|
+
|
|
80
|
+
**Test fail?** Testi değil KODU düzelt.
|
|
81
|
+
**Başka testler fail?** Şimdi düzelt.
|
|
82
|
+
|
|
83
|
+
### REFACTOR — Temizle
|
|
84
|
+
|
|
85
|
+
Sadece yeşilken: tekrar eden kodu kaldır, isimleri iyileştir, helper çıkar.
|
|
86
|
+
Testleri yeşil tut. Davranış EKLEME. Sonra sonraki failing test ile tekrarla.
|
|
87
|
+
|
|
88
|
+
## İyi Test
|
|
89
|
+
|
|
90
|
+
| Nitelik | İyi | Kötü |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| Minimal | Tek şey. İsmi "ve" içeriyorsa böl. | `email ve domain ve boşluğu doğrular` |
|
|
93
|
+
| Açık | İsim davranışı tarif eder | `test1` |
|
|
94
|
+
| Niyet gösterir | İstenen API'yi sergiler | Kodun ne yapacağını gizler |
|
|
95
|
+
|
|
96
|
+
- Gerçek davranışa assert et, mock davranışına asla
|
|
97
|
+
- Test yazmadan önce: bu testi FAIL eden production değişikliğini adlandırabilmeliyim
|
|
98
|
+
|
|
99
|
+
## Yaygın Bahaneler
|
|
100
|
+
|
|
101
|
+
| Bahane | Gerçek |
|
|
102
|
+
|---|---|
|
|
103
|
+
| "Test etmek için çok basit" | Basit kod da kırılır. Test 30 saniye. |
|
|
104
|
+
| "Sonra yazarım" | Sonradan yazılan test hemen geçer — bu bir şey KANITLAMAZ. Yanlış şeyi test edebilir, hatırladığın kenar durumları kapsar, unuttuğunları kaçırır. |
|
|
105
|
+
| "Testler sonra da aynı hedefe ulaşır" | Test-sonra "bu ne yapıyor?"u cevaplar; test-önce "bu ne YAPMALI?"ı cevaplar. Kod zaten yazılmışken test ondan biaslanır. |
|
|
106
|
+
| "Elle test ettim zaten" | Elle test kayıpsız tekrarlanamaz, kenar durumları kanıtlamaz. |
|
|
107
|
+
| "X saat kaybolacak, silmesem iyi olur" | Batık maliyet yanılgısı. Güvenemediğin kodu tutmak asıl kayıp. |
|
|
108
|
+
| "Keşif gerek önce" | Tamam — keşfi at, TDD ile baştan başla. |
|
|
109
|
+
| "Test yazması zor = tasarım kötü" | Teste dinle. Test etmek zor = kullanmak zor. |
|
|
110
|
+
| "TDD yavaşlatır" | TDD pragmatik yoldur: commit öncesi yakalar, regresyonu önler, korkusuz refactor sağlar. "Pragmatik" kısayol = prod'da debug. |
|
|
111
|
+
|
|
112
|
+
## Kırmızı Bayraklar — DUR, Baştan Başla
|
|
113
|
+
|
|
114
|
+
- Testten önce kod
|
|
115
|
+
- Implementasyondan sonra test
|
|
116
|
+
- Test anında geçti
|
|
117
|
+
- Testin neden fail ettiğini açıklayamıyorsun
|
|
118
|
+
- "Sonraya" eklenen testler
|
|
119
|
+
- "Sadece bu sefer" bahanesi
|
|
120
|
+
- "Elle test ettim zaten"
|
|
121
|
+
- "Ruha uygun, ritüele değil"
|
|
122
|
+
- "Referans olarak tutarım"
|
|
123
|
+
- "X saat boşa gideydi"
|
|
124
|
+
|
|
125
|
+
**Hepsi aynı anlama gelir: Kodu sil. TDD ile baştan başla.**
|
|
126
|
+
|
|
127
|
+
## Doğrulama Listesi
|
|
128
|
+
|
|
129
|
+
İşi tamamlanmış saymadan önce:
|
|
130
|
+
|
|
131
|
+
- [ ] Her yeni fonksiyonun testi var
|
|
132
|
+
- [ ] Her testi implementasyondan ÖNCE fail izledim
|
|
133
|
+
- [ ] Her test beklenen sebeple fail etti
|
|
134
|
+
- [ ] Her test için minimal kod yazdım
|
|
135
|
+
- [ ] Tüm testler geçiyor, çıktı temiz
|
|
136
|
+
- [ ] Kenar durumları ve hatalar kapsamlı
|
|
137
|
+
|
|
138
|
+
Tüm kutular dolmuyorsa TDD'yi atladın. Baştan başla.
|
|
139
|
+
|
|
140
|
+
## Takıldığında
|
|
141
|
+
|
|
142
|
+
| Sorun | Çözüm |
|
|
143
|
+
|---|---|
|
|
144
|
+
| Nasıl test edeceğimi bilmiyorum | İstediğin API'yi yaz, assertion'la başla, kullanıcıya sor |
|
|
145
|
+
| Test çok karmaşık | Tasarım karmaşık demektir. Arayüzü sadeleştir. |
|
|
146
|
+
| Her şeyi mock'lamam gerek | Kod fazla coupled. Bağımlılık enjeksiyonu kullan. |
|
|
147
|
+
| Test kurulumu devasa | Helper çıkar. Hâlâ karmaşıksa tasarımı sadeleştir. |
|
|
148
|
+
|
|
149
|
+
## Bug Bulunduğunda
|
|
150
|
+
|
|
151
|
+
Bug'ı yeniden üreten FAILING test yaz → TDD döngüsü → test hem fix'i
|
|
152
|
+
kanıtlar hem regresyonu önler. Testsiz bug fixi ASLA yapma.
|