- AccessService: одноразовые приглашения (128 бит, в БД только sha256, TTL 24 ч),
атомарный захват приглашения (условный UPDATE — из двух сканов одного QR проходит один),
антиперебор (> 5 неудач в час — молчание), отзыв (черновик и FSM удаляются), повторное приглашение
- ADMIN_IDS заводятся в БД при старте; дальше — только по приглашению
- AccessMiddleware: участники из БД (+ last_seen раз в 5 мин), новичкам — только /start <токен>
- «👥 Участники» для админов: список, QR (segno) + ссылка, отзыв с подтверждением
- один ответ на неверный/истёкший/использованный токен — без подсказок
Refs #25
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>