What's New
Gap-fill recovery
- Detects gaps in message ID sequences using SQL
LAG()window function - Recovers skipped messages from Telegram API automatically
- Available as CLI subcommand (
fill-gaps --chat-id --threshold) and scheduler option (FILL_GAPS=true) - Respects all backup config rules (CHAT_IDS, CHAT_TYPES, exclude lists)
- Robust error handling: continues on per-chat/per-gap errors, reports summary with error count
- Stats automatically recalculated after recovery
Token URL auto-login
- Shareable links with
?token=XXXparameter for direct viewer access - Token is stripped from URL after login via
history.replaceState - Warning note about token exposure in server access logs
UX improvements
- @username display in chat list and message headers
- Shareable link generation UI in admin panel
Testing
- 31 new tests for gap-fill (detect gaps, fill gaps, config, edge cases)
- Full async test coverage with real SQLite + AsyncMock for Telegram client