File: src/mission/types/daily_login.rs:102-121
try_progress() mutates self.day (increments it) before returning. Then current_reward() does self.day.saturating_sub(1) to index into REWARDS. Result: the reward is always one day ahead. A user continuing a streak on day 1 gets the day-2 reward (10 coins instead of 5). On day 7, REWARDS[7] is out of bounds, hitting the unwrap_or_else fallback that returns REWARDS[0] (5 coins) instead of the intended 100-coin max reward.