Kalabalık git diff'ini incelenebilir bir PR açıklamasına çevir (ne / neden / nasıl test edildi)
Kutuya yapıştırabileceğin bir PR açıklaması: özet, gerekçe, dosya bazında ne değişti, nasıl test edildiği ve risk başlıkları hazır gelir.
PR'ı açtın, 40 dosya değişmiş, açıklama kutusu tek satır. İnceleyecek arkadaşın nereden başlayacağını bilmiyor; inceleme günlere yayılıyor, sen de sürekli "şuraya baksan yeter" diye mesaj atıyorsun.
Rolün: kıdemli bir kod inceleyicisi. Sana bir `git diff` (tek ya da birden çok commit'in diff'i) vereceğim. Görevin, bu diff'ten ekip arkadaşımın hızlıca inceleyebileceği bir PR açıklaması çıkarmak.
Kurallar:
- Sadece diff'te GÖRÜNEN değişikliğe dayan. Kodda olmayan bir amaç, gereksinim ya da etki uydurma; tahmin yürütme.
- Bir bilgiyi diff'ten çıkaramıyorsan o satıra "EKSİK: ..." yaz ve neyin gerektiğini belirt (örn. gerekçe görünmüyorsa "EKSİK: gerekçe").
- Teknik terimleri olduğu gibi bırak, süslemeye çalışma. Kısa ve madde madde yaz.
Şu başlıklarla üret:
1. Özet — 1-2 cümle: bu PR ne yapıyor.
2. Neden — bu değişiklik neyi çözüyor, neden gerekti. Diff'ten çıkmıyorsa "EKSİK: gerekçe" yaz.
3. Ne değişti — dosya/modül bazında madde madde: her madde "dosya yolu → ne değişti". Formatlama, otomatik üretilen ya da mekanik değişiklikleri ayrı bir "Önemsiz değişiklikler" maddesinde topla ki inceleyen zaman kaybetmesin.
4. Nasıl test edildi — diff'te test dosyası, çalıştırılan komut ya da adım varsa yaz. Yoksa "EKSİK: test adımı" yaz ve altına "Önerilen test" başlığında, bu değişikliği doğrulamak için inceleyene önerdiğin somut adımları ver.
5. Dikkat / risk — geriye dönük uyumluluğu bozan, veri göçü gerektiren ya da güvenlik/gizlilik etkisi olan noktalar. Yoksa "Belirgin risk görünmüyor" yaz.
6. İnceleyene not — diff'te kafa karıştırabilecek 1-2 nokta (örn. büyük ama mekanik değişiklik, bilerek sonraki PR'a bırakılan iş).
Diff aşağıda:
---
[buraya git diff çıktını yapıştır]
---
Kutuya yapıştırabileceğin bir PR açıklaması: özet, gerekçe, dosya bazında ne değişti, nasıl test edildiği ve risk başlıkları hazır gelir. Eksik kalan yerler "EKSİK:" olarak işaretli olduğu için neyi kendin eklemen gerektiğini de görürsün. Koca bir PR için birkaç dakika.
Net bir PR açıklaması ekibin inceleme süresini kısaltır; sen işini derli toplu bırakan, dikkatli çalışan biri olarak anılırsın.
AI yalnızca diff'te görüneni özetler; senin kafandaki "neden"i ve iş bağlamını bilemez, o yüzden "EKSİK" işaretli yerleri sen doldur. Kapalı/özel kodu ve sırları (anahtar, token) yapıştırmadan önce şirket politikanı kontrol et.
diff --git a/src/api/auth/login.js b/src/api/auth/login.js
index 4a1c2d..9f3b7e 100644
--- a/src/api/auth/login.js
+++ b/src/api/auth/login.js
@@ -1,6 +1,9 @@
const router = require('express').Router();
const bcrypt = require('bcrypt');
+const rateLimit = require('express-rate-limit');
+
+const loginLimiter = rateLimit({ windowMs: 15*60*1000, max: 5 });
-router.post('/login', async (req, res) => {
+router.post('/login', loginLimiter, async (req, res) => {
const { email, password } = req.body;
const user = await db.users.findByEmail(email);
- if (!user) return res.json({ error: 'yok' });
+ if (!user) return res.status(401).json({ error: 'gecersiz' });
const ok = await bcrypt.compare(password, user.hash);
diff --git a/config/default.json b/config/default.json
index 22aa..33bb 100644
--- a/config/default.json
+++ b/config/default.json
@@ -4,3 +4,4 @@
"port": 3000,
- "jwtExpiry": "1h"
+ "jwtExpiry": "1h",
+ "loginMaxAttempts": 5
}
diff --git a/src/api/auth/login.test.js b/src/api/auth/login.test.js
new file mode 100644
index 0000..77cc
+++ b/src/api/auth/login.test.js
@@ -0,0 +1,8 @@
+test('6. denemede 429 doner', async () => {
+ for (let i=0;i<5;i++) await agent.post('/login').send(bad);
+ const r = await agent.post('/login').send(bad);
+ expect(r.status).toBe(429);
+});
diff --git a/src/utils/format.js b/src/utils/format.js
@@ -12 +12 @@
- return x;}
+ return x;
+}Özet
/login uç noktasına deneme sınırlama (rate limit) eklendi: 15 dakikalık pencerede 5 denemeden sonra istek reddediliyor. Ayrıca kullanıcı bulunamadığında dönen yanıt 200 yerine 401 yapıldı.
Neden
EKSİK: gerekçe (diff'te bir issue referansı veya açıklama yorumu görünmüyor; büyük olasılıkla brute-force denemelerine karşı ama bunu diff doğrulamıyor).
Ne değişti
src/api/auth/login.js→express-rate-limiteklendi;loginLimiter(15 dk / max 5) tanımlanıp/loginroute'una middleware olarak bağlandı. Kullanıcı bulunamama yanıtıres.json({error:'yok'})yerineres.status(401).json({error:'gecersiz'})oldu.config/default.json→loginMaxAttempts: 5anahtarı eklendi. EKSİK: bu değer koda bağlanmıyor;login.jslimiti5olarak sabit (hard-coded) yazılmış, config'ten okunmuyor. (Olası tutarsızlık — inceleyen doğrulasın.)src/api/auth/login.test.js→ Yeni test dosyası: 6. denemede429döndüğünü doğruluyor.
Önemsiz değişiklikler
src/utils/format.js→ Sadece kapatma parantezinin ayrı satıra alınması; davranış değişikliği yok (formatlama).
Nasıl test edildi
src/api/auth/login.test.jsiçinde eklenen otomatik test: aynı hatalı girişle 5 istek yapıp 6.'da429bekliyor.- EKSİK: test adımı (limit penceresinin dolması, geçerli kullanıcının
401alması ve config değerinin etkisi kapsanmıyor).
Önerilen test
- Geçerli kullanıcıyla yanlış şifre →
401veerror: 'gecersiz'döndüğünü doğrula. - 5 başarısız denemeden sonra doğru şifreyle bile
429alındığını, 15 dk sonra kilidin açıldığını kontrol et.
Dikkat / risk
- Geriye dönük uyumluluk: Kullanıcı bulunamama yanıtı
200 {error:'yok'}→401 {error:'gecersiz'}olarak değişti. Bu yanıtın200gövdesine veya'yok'metnine bağlı bir istemci varsa kırılır. - Davranış: Rate limit tüm istemciler için
/login'i etkiler; paylaşımlı IP / proxy arkasında çok kullanıcı varsa yanlışlıkla engellenebilir.
İnceleyene not
- Config'e eklenen
loginMaxAttemptsile koddaki sabitmax: 5ayrı duruyor; bu bilinçli mi yoksa config bağlanması sonraki PR'a mı bırakıldı, PR sahibine sor. format.jsdeğişikliği tamamen mekanik; hızlı geçebilirsin.
ÜRETİM: TEM 2026 · CLAUDE Bu kayıt eşlenmiş örnek girdi ve çıktı içerir. Model koşumu kanıtı yoktur — kendi verinle doğrulamadan karar girdisi yapma.
Rolün: kıdemli bir kod inceleyicisi. Sana bir `git diff` (tek ya da birden çok commit'in diff'i) vereceğim. Görevin, bu diff'ten ekip arkadaşımın hızlıca inceleyebileceği bir PR açıklaması çıkarmak.
Kurallar:
- Sadece diff'te GÖRÜNEN değişikliğe dayan. Kodda olmayan bir amaç, gereksinim ya da etki uydurma; tahmin yürütme.
- Bir bilgiyi diff'ten çıkaramıyorsan o satıra "EKSİK: ..." yaz ve neyin gerektiğini belirt (örn. gerekçe görünmüyorsa "EKSİK: gerekçe").
- Teknik terimleri olduğu gibi bırak, süslemeye çalışma. Kısa ve madde madde yaz.
Şu başlıklarla üret:
1. Özet — 1-2 cümle: bu PR ne yapıyor.
2. Neden — bu değişiklik neyi çözüyor, neden gerekti. Diff'ten çıkmıyorsa "EKSİK: gerekçe" yaz.
3. Ne değişti — dosya/modül bazında madde madde: her madde "dosya yolu → ne değişti". Formatlama, otomatik üretilen ya da mekanik değişiklikleri ayrı bir "Önemsiz değişiklikler" maddesinde topla ki inceleyen zaman kaybetmesin.
4. Nasıl test edildi — diff'te test dosyası, çalıştırılan komut ya da adım varsa yaz. Yoksa "EKSİK: test adımı" yaz ve altına "Önerilen test" başlığında, bu değişikliği doğrulamak için inceleyene önerdiğin somut adımları ver.
5. Dikkat / risk — geriye dönük uyumluluğu bozan, veri göçü gerektiren ya da güvenlik/gizlilik etkisi olan noktalar. Yoksa "Belirgin risk görünmüyor" yaz.
6. İnceleyene not — diff'te kafa karıştırabilecek 1-2 nokta (örn. büyük ama mekanik değişiklik, bilerek sonraki PR'a bırakılan iş).
Diff aşağıda:
---
[buraya git diff çıktını yapıştır]
---
Yapıştırdığın veri tarayıcından çıkmaz — WhiteYaka'ya gönderilmez. Prompt panoya kopyalanır; açılan sohbete Ctrl/⌘ + V ile yapıştırırsın.
Bülten kaydı kapalı.
Bu sayfa e-posta adresi toplamaz ve liste kaydı başlatmaz. 160 hamlenin tamamı giriş yapmadan açık.