Phase 6 part 2b:
- solitaire_data::weekly defines WeeklyGoalKind, WeeklyGoalDef,
WeeklyGoalContext, current_iso_week_key, and three starter goals
(5 wins, 3 no-undo wins, 3 fast wins).
- PlayerProgress gains weekly_goal_week_iso, roll_weekly_goals_if_new_week,
and record_weekly_progress (returns true exactly once per goal completion).
- WeeklyGoalsPlugin evaluates GameWonEvent against WEEKLY_GOALS, rolls the
week if needed, increments matching counters, awards WEEKLY_GOAL_XP for
newly-completed goals, persists progress, and fires
WeeklyGoalCompletedEvent.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>