- handleSelectCallback: disabling RPG also disables League; enabling
League when RPG is off shows toast error via answerCbWithText
- handleLeagueToggleCmd (/leaguetoggle): rejects with message if RPG off
- leagueToggleCallback (inline): rejects with message if RPG off
- buildSettingsKeyboard: League status shows as 'off' when RPG is disabled
(even if the DB still has LeagueOptIn=true, since RPG disable forces it false)
- Fix nil pointer dereference in clock.go (guard GetOrCreateSettings and
GetOrCreateRPGStats errors before accessing fields)
- Fix timezone bug in handleSetBreakMsg (was using system time.Now()
instead of user's configured timezone)
- Remove dead code: sendExportMonthPicker (unused wrapper)
- Simplify xpForWorkSeconds (xpPerSecond=1, inline to just return sec)
- Extract computeStreakFromDates as pure testable function from
recalcAggregates; add 6 tests covering empty, current, gaps,
no-today, long streak, longest-not-current edge cases
- Update README with full feature documentation: RPG, League, Salary,
Burnout, Work Types, Inline History Editing, all missing commands
- Require both symbol+code in /setcurrency; add preset picker ($ USD,
T Toman, IRR Rial, EUR, GBP) in settings inline menu
- League: compact 2-line per entry for mobile; sort buttons in 2x2 grid
- Settings: 2-column layout with grouped buttons (timezone+calendar,
report+report time, break+accent, rpg+league, currency+rate)
- Burnout: cap break ratio at 100% to prevent nonsense values
- Add /setusername command (uses existing SanitizeDisplayName)
- Update /help with new/changed commands
- Add /summary [YYYY-MM] command for monthly work/break/day-off totals
- Add weekly totals row to main menu status
- Add /setbreak <minutes> for configurable daily break threshold
- Fix HandleMessage routing: extract command name instead of exact match (fixes /export YYYY-MM, /edit, /note, /summary, /setbreak)
- Update README with full command table and configurable break docs
- Replaced tgbotapi with go-telegram/bot (zero-dependency, context-aware, Bot API 10.0)
- All handler methods now accept context.Context; threading ctx through all sends/edits
- Changed from function-based (NewMessage/NewEditMessageText/NewInlineKeyboardMarkup) to struct-param API (SendMessageParams/EditMessageTextParams/InlineKeyboardMarkup)
- Added colored buttons: DEL buttons in calendar use Style: 'danger' (red)
- Both polling and webhook modes preserved with new library patterns
- Context-based shutdown (signal.NotifyContext) replaces stop channel