fix(pl24): kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin #271

Open
root wants to merge 1 commits from dev into main
Owner

Yanlış alarm

Bugün 19:10 (İstanbul) Telegram "🔴 PL24 giriş yapılamıyor — hesap banlanmış olabilir" dedi. Hesap sağlam: kullanıcı tarayıcıdan giriş yapabildi, aynı gün telemetride 143 başarılı auth çağrısı ve 0 × 401 var.

Gerçek sebep alarmın kendi metninde yazıyordu: PL24 daily HTTP budget exhausted (user lane: 1205/1200). Yani upstream değil, bizim günlük tavanımız.

Zincir

attemptLogin → budget.consume() fırlatır
             → dış catch bunu { error } olarak DÜZLEŞTİRİR
             → loginWithLock  !result.sessionToken dalına girer
             → breakerFail() + noteLoginFailure()
             → 1 saat sonra "hesap banlanmış olabilir"

Kendi frenimiz hem login devre kesicisini tetikliyor hem de operatörü yanlış yere çağırıyor. İkisi de zararlı: devre kesici açılırsa bütçe sıfırlandıktan sonra bile giriş bloklanır.

Düzeltme

  • PL24BudgetExceededError artık attemptLogin ve authorizeServiceForAccount içinde olduğu gibi yukarı çıkıyor, giriş/yetkilendirme hatasına çevrilmiyor. Devre kesici tetiklenmiyor, kesinti sayacı başlamıyor, Telegram susuyor. Çağıran taraf PL24'ü atlayıp pcat/emex'e düşüyor — bugün de öyle oluyordu, ama artık sessizce ve doğru gerekçeyle.
  • Şerit bazlı sayaç: pl24:http:<gün>:{user,worker}. Paylaşılan toplam, tavanın NE ZAMAN dolduğunu söylüyordu ama KİMİN harcadığını söylemiyordu.

Kapasite bulgusu (ayrı karar gerekiyor)

Kilitlenme düzeltmesi (PR #268) canlıya çıkınca prefetch gerçekten çalışmaya başladı ve tavan ilk kez gerçek trafikle doldu:

gün pl24 HTTP yeni pl24 kategori not
09-19 425 745 prefetch kilitliydi
09-20 540 1.744 kilit çözüldü
09-21 977 + auth = 1207/1200 2.642 tavan doldu, 16:10 UTC'den sonra kullanıcı decode'ları reddedildi

Worker şeridi tavanın %60'ında (720) duruyor, kalan ~485'i gerçek kullanıcı harcadı ve duvara çarptı. Yani tavan artık bağlayıcı ve kullanıcıyı aç bırakıyor; arka plan backfill hâlâ KAPALI olduğu hâlde.

Bu PR tavanı değiştirmiyor — yalnız yanlış alarmı kesiyor ve tavanı veriyle boyutlandırmak için şerit ayrımını ölçmeye başlıyor. Ban geçmişi göz önüne alındığında tavan sayısı sizin kararınız.

Test

5 yeni test (bütçe hatasının yukarı çıkması, Telegram'ın susması, kesinti sayacının başlamaması, hata sınıfı ve mesajı). api paketi 650 test geçiyor.

🤖 Generated with Claude Code

## Yanlış alarm Bugün 19:10 (İstanbul) Telegram **"🔴 PL24 giriş yapılamıyor — hesap banlanmış olabilir"** dedi. Hesap sağlam: kullanıcı tarayıcıdan giriş yapabildi, aynı gün telemetride **143 başarılı auth çağrısı ve 0 × 401** var. Gerçek sebep alarmın kendi metninde yazıyordu: `PL24 daily HTTP budget exhausted (user lane: 1205/1200)`. Yani upstream değil, **bizim günlük tavanımız**. ## Zincir ``` attemptLogin → budget.consume() fırlatır → dış catch bunu { error } olarak DÜZLEŞTİRİR → loginWithLock !result.sessionToken dalına girer → breakerFail() + noteLoginFailure() → 1 saat sonra "hesap banlanmış olabilir" ``` Kendi frenimiz hem login devre kesicisini tetikliyor hem de operatörü yanlış yere çağırıyor. İkisi de zararlı: devre kesici açılırsa bütçe sıfırlandıktan sonra bile giriş bloklanır. ## Düzeltme - `PL24BudgetExceededError` artık `attemptLogin` ve `authorizeServiceForAccount` içinde **olduğu gibi yukarı çıkıyor**, giriş/yetkilendirme hatasına çevrilmiyor. Devre kesici tetiklenmiyor, kesinti sayacı başlamıyor, Telegram susuyor. Çağıran taraf PL24'ü atlayıp pcat/emex'e düşüyor — bugün de öyle oluyordu, ama artık sessizce ve doğru gerekçeyle. - **Şerit bazlı sayaç**: `pl24:http:<gün>:{user,worker}`. Paylaşılan toplam, tavanın NE ZAMAN dolduğunu söylüyordu ama KİMİN harcadığını söylemiyordu. ## Kapasite bulgusu (ayrı karar gerekiyor) Kilitlenme düzeltmesi (PR #268) canlıya çıkınca prefetch gerçekten çalışmaya başladı ve tavan **ilk kez gerçek trafikle** doldu: | gün | pl24 HTTP | yeni pl24 kategori | not | |---|---|---|---| | 09-19 | 425 | 745 | prefetch kilitliydi | | 09-20 | 540 | 1.744 | kilit çözüldü | | 09-21 | 977 + auth = **1207/1200** | 2.642 | tavan doldu, 16:10 UTC'den sonra kullanıcı decode'ları reddedildi | Worker şeridi tavanın %60'ında (720) duruyor, kalan ~485'i gerçek kullanıcı harcadı ve duvara çarptı. Yani **tavan artık bağlayıcı ve kullanıcıyı aç bırakıyor**; arka plan backfill hâlâ KAPALI olduğu hâlde. Bu PR tavanı değiştirmiyor — yalnız yanlış alarmı kesiyor ve tavanı veriyle boyutlandırmak için şerit ayrımını ölçmeye başlıyor. Ban geçmişi göz önüne alındığında tavan sayısı sizin kararınız. ## Test 5 yeni test (bütçe hatasının yukarı çıkması, Telegram'ın susması, kesinti sayacının başlamaması, hata sınıfı ve mesajı). api paketi **650 test geçiyor**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
root added 1 commit 2026-09-21 20:53:16 +03:00
fix(pl24): kendi bütçe frenimiz "hesap banlandı" alarmı üretmesin
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
41147f3f05
Prod 2026-09-21 19:10 (İstanbul) itibarıyla Telegram "🔴 PL24 giriş
yapılamıyor — hesap banlanmış olabilir" dedi. Hesap sağlamdı:
kullanıcı tarayıcıdan giriş yapabildi, aynı gün 143 başarılı auth
çağrısı ve **0 × 401** vardı. Gerçek sebep alarmın kendi metninde:
"PL24 daily HTTP budget exhausted (user lane: 1205/1200)" — yani
upstream değil, BİZİM günlük tavanımız.

Zincir: `attemptLogin` içindeki `budget.consume()` fırlatıyor → dış
`catch` bunu `{ error }` olarak düzleştiriyor → `loginWithLock`
`!result.sessionToken` dalına giriyor → `breakerFail()` + kesinti
sayacı → bir saat sonra ban alarmı. Yani kendi frenimiz hem devre
kesiciyi tetikliyor hem de operatörü yanlış yere çağırıyor.

- `PL24BudgetExceededError` artık `attemptLogin` ve
  `authorizeServiceForAccount` içinde olduğu gibi yukarı çıkıyor;
  giriş/yetkilendirme hatasına çevrilmiyor. Devre kesici tetiklenmiyor,
  kesinti sayacı başlamıyor, Telegram susuyor. Çağıran taraf PL24'ü
  atlayıp pcat/emex'e düşüyor — bugün de öyle oluyordu, ama artık
  sessizce ve doğru gerekçeyle.
- Şerit bazlı sayaç eklendi: `pl24:http:<gün>:{user,worker}`. Paylaşılan
  toplam tavanın NE ZAMAN dolduğunu söylüyordu ama KİMİN harcadığını
  söylemiyordu; tavanı veriyle boyutlandırmak için bu şart. Bugün
  toplam 1200'e vurdu ve 16:10 UTC'den sonra her kullanıcı decode'u
  reddedildi, ama ne kadarının ısıtma prefetch'i ne kadarının ekran
  başında bekleyen biri olduğu `proxy_logs`'tan çıkarılamıyordu.

5 yeni test. api 650 test geçiyor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Some checks are pending
QA Gate (P0/P1) / Test affected app (pull_request) Waiting to run
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin dev:dev
git checkout dev
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/sase.tr#271