- 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
- 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
- GenerateMonthlyReport now takes explicit Gregorian start/end range,
computed via monthGregorianRange, so Jalali/Hijri months spanning
two Gregorian months are fully covered in exports.
- Added loadLocation helper (UTC fallback on error) and replaced all
11 ignored-error call sites in handlers + export.
- Added periodicCleanup goroutine in NewHandler to prevent unbounded
growth of the rateLimit map.
- schemaPath is now read from SCHEMA_PATH env var (init), defaulting
to /app/db/schema.sql.
- Migrated sendDayView to use sendOrEdit helper, removing duplicated
send/edit branching.
- Removed dead code: userYearMonthToGregorian (unused), the old
startOffset function (replaced).
- Updated README with calendar docs, new env vars, full project tree.
- Updated .env.example and docker-compose.yml with SCHEMA_PATH.
- Simplified Makefile: added fmt, tidy, check, run-dev targets;
removed broken Make-glob prerequisite pattern.