4.2.0 (2026-08-27)
New Features
- activate gift codes in bot (81c5591)
- add idempotent gift balance service (6e87564)
- add native gift selection flow (8c90b76)
- add recoverable gift history (1128018)
- add sender gift history service (ef8cdb5)
- auth: добавить системный режим регистрации только по приглашениям (dce9336)
- cabinet: раздел grace-доступа в админке (f7010f2)
- expose canonical gifts in cabinet api (5bf8a9a)
- gift: QR-код подарка и готовый текст для отправки (810ed7f)
- gift: добавить дарение подписок между ботом и кабинетом (8d71f77)
- grace: allow configuring external squad via GRACE_ACCESS_EXTERNAL_SQUAD_UUID (e2d5f3e)
- mulenpay: передавать контакт клиента в поле client (b4a062a)
- purchase and share gifts from balance (7496ed5)
- referral: a level is unlocked by referral count, and says so (ea3b95e)
- referral: admin editor for reward levels (0e3b051)
- referral: expose levels and day rewards through the cabinet API (fbd20bb)
- referral: multi-level rewards in money and/or subscription days (c252439)
- referral: set the chain depth from the level editor, up to ten levels (5b14a65)
- referral: show subscription-day rewards across statistics and the user screen (0fb08fa)
- referral: выбор награды двоичный — деньги или дни (f733524)
- referral: называть ступени уровнями и отдавать их кабинету по частям (61c8d66)
- referral: показывать суммы сторон и спрашивать подписку только под дни (b7dc6d7)
- referral: пользователь выбирает вид награды и подписку для дней (85c17b6)
- referral: режим рангов — один уровень за число рефералов (dedf9fb)
- resume gift checkout after balance topup (3cf405b)
- rich: настройка вывода кнопок внутри полотна rich-сообщения (Bot API 10.3) (fbe3594)
- rich: пользовательские уведомления rich-сообщением с кнопками внутри (497064e)
- rich: уведомления в стиле rich-меню и охват рассылок (01d8f2c)
- rich: уведомления мониторинга тоже rich — логотип не теряется (9ebc17d)
- unify public gift codes (28b313c)
Bug Fixes
- address final review findings for gift security and telemetry (ad18226)
- admin: запретить блокировку аккаунтов из ADMIN_IDS/ADMIN_EMAILS (15613ee)
- auth: выровнять привязку подарка в двух путях завершения регистрации (96ad208)
- auth: закрыть находки ревью invite-only (830c484)
- auth: не пускать регистрацию на алиасе уже занятого ящика (c290a17)
- auth: не пускать регистрацию на алиасе уже занятого ящика (8fcdefd)
- auth: починить поиск двойника по ящику на SQLite и не прятать чужой аккаунт (b4fdc54)
- build secure shareable gift links (ce7dd46)
- cabinet: 'keep' во внешнем скваде сравнивать без учёта регистра (fbabcd0)
- cabinet: закрыть находки ревью раздела grace-доступа (58472a3)
- clean up duplicate exports in subscription handlers (0ff752c)
- config: закомментировать ключи grace в .env.example (c53540f)
- email: не ждать таймаут SMTP на каждом адресе рассылки (b934713)
- gift: address code review findings for gift subscription feature (e22dd8c)
- gift: address combined review findings for gift features (824b6a0)
- gift: harden purchase recovery and claim presentation (8464299)
- grace: реализовать обещанное 'keep' и починить тест внешнего сквада (40459b7)
- harden gift purchase recovery flows (f03fa56)
- logging: убрать зарезервированный kwarg event= из вызовов structlog (4d76382)
- maintenance: техработы включались сами после каждого перезапуска (44c7269)
- menu: приводить HTML страниц к разметке, которую понимает Telegram (5ce73e3)
- mulenpay: слать в client только подтверждённый email и не блокировать оплату (9ce44f9)
- notifications: кнопка продления в мультитарифе вела в бота, а не в кабинет (f0d0cec)
- referral: close five traps in the bot level editor (f7f4e65)
- referral: close the hazards an adversarial audit found in the levels scheme (72ae99b)
- referral: close what an adversarial review of the levels feature found (28aaf80)
- referral: close what an execution audit found in day granting and the editor (da1a820)
- referral: close what the UX review found in the bot (c08d42b)
- referral: finish the level surface — localization, depth, remaining totals (223a8dd)
- referral: make a fresh install and an upgraded one reach the same schema (01190d7)
- referral: repair a leaked mutation and close a verification pass (ecdaa68)
- referral: scope the payment cap to its level, and import the right percent (6e4556c)
- referral: send day rewards to the paid subscription, not whichever comes first (9bce186)
- referral: stop dropping tariff-targeted days for users subscribed elsewhere (1670d7f)
- referral: вернуть реферальным настройкам редактируемость из админки (8112f3c)
- referral: закрыть остальное, что нашла проверка фичи (104e595)
- referral: не обещать процент, который не может начислиться, и вернуть тариф в миниапп (3a8273e)
- referral: не оставлять взведённым ввод глубины и не врать про процент (889b5fd)
- referral: не терять ответ на callback и не врать про процент партнёра (40f746e)
- referral: применять лимит выплат к начислению той же секунды (43140f0)
- security: линейная проверка HTML вместо квадратичной (a248cea)
- security: линейная проверка HTML вместо квадратичной (38c0b06)
- security: линейное вырезание тегов вместо квадратичного (34879b1)
- settings: булеву настройку со списком вариантов нельзя было сохранить (1ee5f60)
- восстановить забытые импорты, падавшие NameError в проде (9bedd81)
- объявить литеральные пути уровней наград выше /{user_id} (94df5bb)