3.63.0 (2026-07-12)
New Features
- add mobile support websocket v1 (2eb3769)
- bot: подсказка про права на каталоги в креш-репорте (PermissionError) (01db943)
- cabinet: add recurrent-payments legal document (8f4ecf2)
- coupons: cabinet API для купонов — партии, экспорт ссылок, погашение (605c024)
- coupons: партии одноразовых купонов на подписку для оптовой продажи (8a5cfaf)
- infra: Valkey 9 вместо Redis 7 для кэша и очередей (b0709ea)
- remnawave: локальная генерация happ crypt4 ссылок (d9042c2)
- remnawave: локальная генерация happ crypt4 ссылок (без внешнего API) (2ad0d57)
Bug Fixes
- audit support websocket mutations (3836a5b)
- backup: одиночный scheduler-цикл и BACKUP_TIME в локальной таймзоне (#3030) (e2bad81)
- backup: одиночный scheduler-цикл и BACKUP_TIME в локальной таймзоне (#3030) (b4ad4e6)
- bot: тексты длиннее лимита Telegram роняли показ правил и политики (197e096)
- cabinet: close refund-guard gaps — silent refund failure + extend double-benefit (f6395a6)
- cabinet: stop admin user search crashing on out-of-range numeric input (a95b7bc)
- cabinet: возврат средств при сбое покупки тарифа после списания баланса (#3031) (12f6e35)
- cabinet: возврат средств при сбое покупки тарифа после списания баланса (#3031) (c5ac200)
- coupons: закрыть double-tap на подтверждении партии и двойной answer в экспорте (8947a73)
- db: add migration for recurrent_payments table (missing on existing installs) (1ce9430)
- email: не тащить CSS/JS в text/plain версию письма (#2974) (7b9b7f1)
- email: не тащить CSS/JS в text/plain версию письма (#2974) (e4af7f2)
- harden mobile support websocket session guards (1dc4e9e)
- notifications: email-юзерам уведомления в flow "пополнение -> автопокупка" (#2952) (d527ce5)
- notifications: email-юзерам уведомления в flow «пополнение → автопокупка» (#2952) (083289d)
- notifications: label trial→paid auto-purchase as activation, not renewal; test real templates (551236e)
- platega: поддержка v2 API - поле url и настраиваемая версия эндпоинта (#2934) (681a1d2)
- platega: поддержка v2 API — поле url и настраиваемая версия эндпоинта (#2934) (7ff3b40)
- refresh admin user-messages list without a hand-built callback (3323b7f)
- reload daily subscription with user+tariff after commit (MissingGreenlet) (c0bfea7)
- remnawave: кэш локальных happ crypt4 ссылок (стабильность между вызовами) (0b54d59)
- restore happ crypto links on Remnawave 2.8.0 via official Happ API (31711d4)
- subscription: make TARIFF_SWITCH_RESET_FREE_DAYS actually reset the free/trial period (73050c3)
- support-ws: dedup idempotent retries, canonical reply status, telegram parity, send lock (0c58a49)
- tickets: писать id реального админа в ticket_messages.user_id (#3029) (eb326db)
- tickets: писать id реального админа в ticket_messages.user_id (#3029) (fc92019)
Refactoring
- coupons: единый build_coupon_deeplink вместо трёх копий формата ссылки (bc5dfcf)