# Geliştirme Planı

> 18.08.2026 · Bir günlük canlı çalıştırmadan sonra yazıldı.
> Mevcut durum için → [DURUM.md](DURUM.md)

Bu plan "yapılabilecek her şey" listesi değil. Canlı testte **neyin
eksikliğinin acıdığına** bakarak sıralandı.

---

## Öncelik mantığı

Bir günlük gerçek çalıştırma üç şeyi gösterdi:

1. **Hesap ölürse her şey ölür.** Kod 226 bayrağını yedik. Bu tek başına en
   büyük varoluşsal risk — diğer her özellik bunun üstüne kurulu.
2. **Metin tweetleri sıradan.** Her bot skor yazıyor. Bizi ayıran bir şey yok.
3. **Kör uçuyoruz.** Hangi tweet tuttu, hangisi boşa gitti bilmiyoruz.

Sıralama buradan çıktı.

---

## Faz 1 — Hesap güvenliği 🔴 (önce bu)

Ban riski teorik değil, **gerçekleşti**. Diğer her şey bunun üstüne kurulu.

| İş | Neden | Efor |
|---|---|---|
| **İkinci hesap ekle** | Rotasyon kodu zaten var ama tek hesapla anlamsız. İki hesap = yük yarıya iner, biri askıya alınırsa iş durmaz | Düşük |
| **İnsan ritmi profili** | Şu an sabit aralıkta rastgele bekleme — hâlâ makine deseni. Gerçek insan gece seyrek, maç saatinde yoğun, ara ara hiç yazmaz. Saat bazlı ağırlıklı dağılım | Orta |
| **Hesap sağlık paneli** | Gönderim başarı oranı, boş yanıt sayısı, son 24s hacim — eşik aşılınca **otomatik yavaşlama** | Orta |
| **Otomatik fren** | Boş yanıt/226 arka arkaya 2 kez gelirse paylaşımı kendiliğinden durdur (şu an elle yaptım) | Düşük |
| **Ara sıra "insan" davranışı** | Sadece yayın yapan hesap şüpheli. Ara sıra beğeni/yanıt (dikkatli, sınırlı) | Orta |

**Kritik nokta:** hacim artışı taleplerinde bu fazın sınırları hatırlanmalı.
Dün 36 tweet bayrak çektirdi.

---

## Faz 2 — Görsel içerik 🎨 (en büyük etkileşim kazancı)

Şu an tek görselimiz beIN'den aldığımız. **Kendi görselimizi üretmek**
hem etkileşimi katlar hem telif sorunu doğurmaz.

Görselli tweetler metin tweetlerinden belirgin şekilde daha çok etkileşim
alıyor — ve bu **tweet sayısını artırmadan** kazanılan bir kalite artışı,
yani ban riskini büyütmüyor. Faz 1'le çelişmiyor.

| Görsel | İçerik | Çözdüğü sorun |
|---|---|---|
| **Skor kartı** | Gol anında: takım renkleri, skor, golcü, dakika | Gol tweetleri sıradan metin |
| **İlk 11 grafiği** | Diziliş + oyuncu adları | **Mevcut hata:** 11'ler 280 karaktere sığmıyor, bot sadece "4-2-3-1" yazıp geçiyor |
| **Maç sonu istatistik kartı** | Topla oynama/şut/xG bar'ları, maçın en iyisi | Zengin veriyi metne sıkıştırıyoruz |
| **Puan durumu tablosu** | İlk 6 + hareket okları | Metin listesi okunmuyor |
| **Fikstür kartı** | Günün maçları | Thread'e bölünen uzun liste |

**Teknik:** Pillow ile sunucuda üretim. Dış servis yok, API maliyeti yok,
telif yok. Takım renkleri ve armaları SofaScore'dan alınabilir
(`/team/{id}/image`). `upload_media` zaten çalışıyor (beIN görsellerinde
kullanıyoruz).

---

## Faz 3 — Geri bildirim döngüsü 📊

Şu an hangi içeriğin tuttuğunu **bilmiyoruz**. Kör uçuyoruz.

- Kendi tweetlerimizin RT/beğeni/görüntülenme sayısını çek (beIN için
  kullandığımız aynı GraphQL yolu)
- Panelde: **içerik tipine / saate / lige göre** ortalama etkileşim
- Bunu **önem puanına besle** (`x_engine/importance.py`): tutan içerik
  tipine daha çok bütçe ayır
- Haftalık "en iyi 5 / en kötü 5 tweet" raporu

Bu faz kendi başına içerik üretmez ama **diğer tüm fazları yönlendirir.**
Faz 2'den sonra yapılmalı ki görsellerin etkisi ölçülebilsin.

---

## Faz 4 — Bağlam ve hafıza 🧠

Şu an her tweet bağımsız bir olay bildirimi. Gerçek bir ajans **hikâye**
anlatır: *"sezonun 5. golü"*, *"üst üste 4. galibiyet"*, *"2019'dan beri ilk"*.

| Özellik | Örnek çıktı | Kaynak |
|---|---|---|
| Oyuncu sezon istatistiği | "Icardi'nin bu sezon 5. golü" | SofaScore oyuncu istatistikleri |
| Takım serisi | "Üst üste 4. galibiyet" · "5 maçtır gol yemiyor" | Kendi maç geçmişimiz |
| Puan durumu bağlamı | "Bu galibiyetle zirveye yükseldi" | Standings (zaten çekiyoruz) |
| Kilometre taşları | Hat-trick, 50. gol, ilk Süper Lig golü | Sezon istatistikleri |
| Karşılaşma geçmişi | "Son 5 maçta Fener'e ilk galibiyet" | Head-to-head |

Bu, içeriği **ayırt edici** yapan şey. Skor herkeste var; bağlam yok.

---

## Faz 5 — Etkileşim 💬

Hesap şu an sadece yayın yapıyor. Konuşmaya katılmıyor.

- **Anket:** maç öncesi "Kim kazanır?" (X'in poll özelliği, twikit destekliyor)
- **Mention yanıtları:** LLM ile, sıkı sınırlarla (küfür/tartışma filtresi,
  günlük tavan, sadece soru içerenler)
- **Popüler içerik alıntılama:** beIN dışındaki kaynaklar da (kulüp resmi
  hesapları, muhabirler)

⚠️ Bu faz **ban riskini artırır** — otomatik yanıt X'in en hassas olduğu
davranış. Faz 1 sağlam oturmadan başlanmamalı.

---

## Faz 6 — Kapsam genişletme 🌍

- **Milli takım** maçları (ayrı turnuva id'leri)
- **Türkiye Kupası**
- **Transfer dönemi** özel içerik (dönem başı/sonu özetleri, kulüp bazlı takip)
- **Canlı puan durumu:** maç sonuçlarına göre sıralama değişimi anlık paylaşım

---

## Teknik borç (araya serpiştirilecek)

Canlı testte görülen, henüz kapatılmamış maddeler:

| Sorun | Etki |
|---|---|
| **Çift `ht` olayı** | Incident ve durum tabanlı yolların ikisi de tetikleniyor. `tam` kapsamlı maçta çift devre arası tweeti riski |
| **Maç öncesi "0-0"** | Başlamamış maçta skor yazmak anlamsız. `preview`/`lineup`'ta skor LLM'e gönderilmemeli |
| **X sessiz reddi** | Kök neden hâlâ bilinmiyor. Koruma var (yeniden dener) ama nedeni anlaşılmalı |
| **Otomatik test yok** | Tüm doğrulama elle. En azından sınıflandırma (`classify`, `_classify_incident`) ve metin işleme (`textutil`) için birim testleri |
| **Kaynak gecikmesi** | Skor akışı olay akışından ~4 dk önde. Skor değişip gol kaydı gelmemişse "gol bekleniyor" durumu tutulabilir |
| **`inGamePenalty` artığı** | Dünkü hatalı olay kaydı DB'de duruyor (tweet iptal edildi ama olay kaldı) |

---

## Önerilen sıra

```
1. Faz 1 (hesap güvenliği)      ← şimdi, her şeyin temeli
2. Teknik borç: çift ht + "0-0" ← hızlı, canlı hataları kapatır
3. Faz 2 (görseller)            ← en büyük görünür kazanç
4. Faz 3 (geri bildirim)        ← görsellerin etkisini ölç
5. Faz 4 (bağlam)               ← içeriği ayırt edici yap
6. Faz 5 (etkileşim)            ← Faz 1 sağlamsa
7. Faz 6 (kapsam)               ← en son, hacim artırır
```

**Mantık:** önce hayatta kal (1), sonra elindekini iyileştir (2-3),
sonra farklılaş (4), sonra büyü (5-6).

Hacim artıran her şey (Faz 5, 6) en sona bırakıldı — çünkü dün tam olarak
hacim yüzünden bayrak yedik.
