3.57.0 (2026-05-28)
New Features
- autopay: user-selectable renewal period for autopay charges (4c8705d)
- kassa_ai: pass success/fail/notification URLs into /orders/create (55e80e3)
- referral: tiered partner commission policy (4b48d51)
- start: parse subid from {campaign}subid{click_id} deeplink (f8b730c)
- yandex-conv: cover remaining paid endpoints missed by #558449 (85bfad2)
- yandex-conv: forward CID through purchase requests to close fire race (9ad9ac2)
Bug Fixes
- audit: close 3 real issues from post-merge review of 3a81fbd..4c8705d (2b9643b)
- autopay: skip inactive target tariffs and pluralize day count (4dfde86)
- cabinet-mode: Главное меню кнопка теперь всегда возвращает в bot-меню (0f5873a)
- channel-check: close the gap in monitoring_service direct caller (dca5cd8)
- channel-check: tri-state membership result to stop disabling paid subs on transient errors (91f9a2e)
- devices: cap addon prorate at one billing month (373c138)
- email: humanize datetime in template vars + admin-configurable format (25f864b)
- keyboards: break keyboards.inline ↔ handlers.subscription import cycle (7f34d8c)
- landing: backfill referral_code in guest_purchase flow (83994e3)
- logging: tolerate lowercase LOG_LEVEL — bot was crashing at startup (0460ee4)
- logo: auto-resize oversized vpn_logo.png via Pillow (ec72a0a)
- logo: validate vpn_logo.png at startup and fall back to text-only (7bd4509)
- mulenpay: verify webhook signature from body sign field per official SDK (a83e622)
- multi-tariff: autopay button on detail card + FSM sub_id resolution (c75166e)
- referral-network: let admin search find users not yet in the network (486e3bf)
- remnawave: email users get a unique username instead of constant 'user' (e78e0b6)
- sync: preserve hwidDeviceLimit=0 (unlimited devices) from panel (e5d0473)
- tariff_purchase: close cart-restore and cabinet renew-race paths (a527df2)
- tariff_purchase: pin target subscription_id at preview to kill renew-race (5cd53e4)
- traffic: align top-up expiry with panel reset to stop mid-cycle limit hits (c2f5839)
- webapi: subscription state sync with Remnawave + int32 overflow guard (061bd26)
- yookassa: close thread-pool leak that froze the bot during YK API degradation (c923c78)
- yookassa: tune defaults + make pool size operator-configurable (9913276)