"""Synthetic user personas for simulation.""" from dataclasses import dataclass @dataclass class Persona: name: str description: str # Feature preference weights — used by deterministic judge prefers_high_priority: float # 0–1: scales response to priority prefers_overdue: float # 0–1: scales response to overdue tasks morning_active: bool # higher engagement hours 6–10 evening_active: bool # higher engagement hours 18–22 recency_bias: float # 0–1: prefers recently-due tasks PERSONAS: list[Persona] = [ Persona( name="deadline-driven", description=( "Responds urgently to overdue and high-priority tasks. " "Most active in the morning. Dismisses low-priority tips." ), prefers_high_priority=0.9, prefers_overdue=0.85, morning_active=True, evening_active=False, recency_bias=0.3, ), Persona( name="evening-relaxed", description=( "Reviews tasks in the evenings. Neutral on priority. " "Snoozes morning recommendations." ), prefers_high_priority=0.5, prefers_overdue=0.4, morning_active=False, evening_active=True, recency_bias=0.5, ), Persona( name="low-priority-first", description=( "Clears small tasks first. Snoozes urgent items until deadline. " "Morning person." ), prefers_high_priority=0.2, prefers_overdue=0.6, morning_active=True, evening_active=False, recency_bias=0.7, ), Persona( name="consistent-responder", description=( "Engages consistently across hours and days. " "Acts on helpful tips regardless of priority." ), prefers_high_priority=0.6, prefers_overdue=0.6, morning_active=True, evening_active=True, recency_bias=0.5, ), Persona( name="overdue-ignorer", description=( "Avoids overdue tasks (stress avoidance). " "Focuses on future-due, high-priority items. Evening person." ), prefers_high_priority=0.8, prefers_overdue=0.1, morning_active=False, evening_active=True, recency_bias=0.2, ), ]