3.53.0 (2026-04-29)
New Features
- add bulk_actions, info_pages, news to PERMISSION_REGISTRY (06db393)
- per-category enable/disable for admin notifications (fb857d7)
- protect active paid subscriptions from bulk delete (51dfc3a)
- subscription request history API + RemnaWave panel method (e22beb7)
Bug Fixes
- add 5 missing payment providers to pending-payments model_map (a506c6b)
- add 6 missing payment providers to payment_utils availability checks (83efc21)
- add RollyPay, PayPear, Overpay, AuraPay to REAL_PAYMENT_METHODS (ff7b190)
- autopay renewing trial subscriptions at classic-mode pricing (2fbdbf5)
- backup completeness — add 15 missing tables, accept .tar.gz uploads (eafb243)
- backup import crash + upload handler hardening (5cf19c7)
- block/unblock endpoints — correct args, response schema, panel sync (0bcb804)
- cabinet /block endpoint now disables panel user in RemnaWave (735e16a)
- cabinet autopay endpoint — same NULL-safe is_trial guard (29e177d)
- cabinet purchase fails after panel user deletion — stale UUID (f37eb9a)
- callback.answer() before heavy operations to prevent query timeout (579e4f2)
- create locales directory with correct permissions in Dockerfile (74999fe)
- deadlock on user deletion — webhook handler never checked intentional mark (62e7ecb)
- device/traffic addon pricing — use ceil instead of floor for days_left (cf60ae2)
- downgrade Pal24 API validation errors from error to debug (c905fa6)
- false subscription expiry notifications — 4 bugs fixed (134e7fb)
- handle A018 error code as user-not-found fallback to create_user (c619dbc)
- handle A018 error code in admin_users sync endpoints (2 more locations) (59080f7)
- media upload leaks staging photo to admin chat (1110d0c)
- panel sync subscription duration — ceil for days_remaining (527c5b4)
- PayPear webhook signature — strip signature field before hashing + IP fallback (443a826)
- PollResponse has no created_at — use sent_at for ordering (768e0b6)
- promo group discount applied to restricted tariffs in autopay (4ab5928)
- referral links now clickable — remove <code> wrapping (43dd0fd)
- remaining pricing-critical .days floor calculations → math.ceil (bada41e)
- replace all late callback.answer() with edit_text for error feedback (c743fc8)
- retry queue action uses _should_create instead of stale subscription UUID (422844d)
- send admin notification on promo code activation from cabinet (1c38b31)
- subscription-request-history — correct API client usage, add ownership check (1fc04d8)
- traffic addon discount also bypassed tariff-promo-group check (47c7d45)
- traffic addon price mismatch — keyboard showed prorated, handler charged full month (a88e3c8)
- update cabinet_last_login on every request (throttled, 5 min) (91de6d0)
Refactoring
- remove unused EXTERNAL_ADMIN_TOKEN functionality (b9b6957)