# MessageContextBuilder.build_context() — LLM-facing conversation context
# Silent session events (role='event') interleaved by timestamp.
# Note: llm_changed renders in context but is UI-hidden; export/audit
#       kinds never render at all.

User (09:00): What was revenue by month in 2025?
Assistant (09:01): Response: Here is monthly revenue for 2025. Tool: create_data (success) - 12 rows × 2 cols; cols: month, revenue
Event (09:02): The assistant's answer was thumbed down ("used calendar year, we run on fiscal")
Event (09:03): Model was switched from claude-sonnet to claude-opus-4-8
User (09:04): redo it on our fiscal calendar (Feb–Jan)
Assistant (09:05): Response: Recomputed on the fiscal calendar. Tool: create_data (success) - 12 rows × 2 cols; cols: fiscal_month, revenue
Event (09:06): Feedback on the assistant's answer changed to thumbs up ("perfect")
Event (09:07): targets_2025.xlsx was uploaded
Event (09:08): Agent scope changed — added Snowflake PROD
User (09:09): compare actuals vs the targets I just uploaded
Assistant (09:10): Response: Actuals vs targets by fiscal month. Tool: create_data (success) - 12 rows × 3 cols; viz_id: 7f3a1c2b
Event (09:11): "Revenue vs Targets" was shared with finance-team
Event (09:12): Suggested instruction "Always assume calendar year" was rejected — do not re-suggest it (rejected: we use a fiscal calendar)
User (09:13): great, schedule this to refresh every Monday
Assistant (09:14): Response: Scheduled a weekly refresh. Tool: create_scheduled_task (success)
