""" Pre-written message bank for the CrisisInbox environment. 95+ messages across 48 simulated hours from 15+ sender profiles: - National Weather Service / FEMA / Sacramento County (government) - Mom & Dad (family) - Sister / Emma & Jake (family) - Boss / HR / Coworker Sarah (employer) - State Farm Insurance / GEICO (insurance) - Delta Airlines (travel) - Oakwood Elementary (school) - Neighbor Dave / Mrs. Chen (community) - Red Cross / Mutual Aid / Church (aid organizations) - CVS Pharmacy / Dr. Patel (medical) - Scam/misinformation senders (traps the agent should deprioritize) Messages are organized by arrival time and designed to create realistic cognitive overload with conflicting obligations, dependency chains, moral dilemmas, scams/misinformation, and community interdependence. """ from models import Channel, Message, Urgency # --------------------------------------------------------------------------- # All messages in the 48-hour scenario, ordered by timestamp_hours # --------------------------------------------------------------------------- ALL_MESSAGES: list[Message] = [ # ========== HOUR 0-2: INITIAL CRISIS WAVE ========== Message( id="msg_001", sender="National Weather Service", channel=Channel.GOVERNMENT_ALERT, subject="Mandatory Evacuation Order - Zone A", content=( "A mandatory evacuation order has been issued for Zone A effective immediately. " "All residents must evacuate within 6 hours. Failure to comply may result in " "inability to receive emergency services. Evacuation shelters are open at " "Lincoln High School and the Convention Center." ), urgency=Urgency.CRITICAL, timestamp_hours=0.0, deadline_hours=6.0, ), Message( id="msg_002", sender="Mom", channel=Channel.SMS, subject="Are you safe?", content=( "Honey are you ok?? Just saw channel 3 and they're showing your neighborhood. " "I'm shaking. Your father keeps pacing. PLEASE call us the second you see this. " "We will drive down right now if you need us. I don't care about the roads. " "I love you so much please be safe." ), urgency=Urgency.HIGH, timestamp_hours=0.5, ), Message( id="msg_003", sender="Sister", channel=Channel.SMS, subject="Can you take the kids?", content=( "Hey I need a huge favor. My idiot boss is making us come in even with " "the storm. Can you PLEASE pick up Emma and Jake from Oakwood by 3pm? " "They're doing early dismissal and I literally have no one else. " "Emma gets scared during storms so just tell her it's an adventure ok? " "I owe you big time." ), urgency=Urgency.HIGH, timestamp_hours=0.75, deadline_hours=3.0, ), Message( id="msg_004", sender="State Farm Insurance", channel=Channel.EMAIL, subject="Important: File your claim within 72 hours", content=( "Dear Policyholder, if you have experienced property damage due to the " "recent disaster, please file your claim within 72 hours to ensure timely " "processing. You will need: policy number, photos of damage, and a list " "of damaged items. File at statefarm.com/claims or call 1-800-STATE-FARM." ), urgency=Urgency.HIGH, timestamp_hours=1.0, deadline_hours=73.0, ), Message( id="msg_005", sender="Boss", channel=Channel.EMAIL, subject="Tomorrow's status - need you in office", content=( "Team,\n\n" "I realize the weather situation isn't ideal but the Meridian presentation " "is Thursday and the client isn't going to reschedule. I need everyone in the " "office tomorrow morning, full stop. If you ABSOLUTELY cannot make it, submit " "PTO through the portal. I shouldn't have to remind you this is a career-defining " "account.\n\n" "Confirm your status by tonight.\n\n" "— Greg" ), urgency=Urgency.MEDIUM, timestamp_hours=1.5, deadline_hours=12.0, ), Message( id="msg_006", sender="HR Department", channel=Channel.EMAIL, subject="Remote work policy during emergency", content=( "Due to the declared state of emergency, all employees in affected areas " "may work remotely. Please log into the HR portal and submit your emergency " "status form by end of day tomorrow. If you are unable to work, file for " "emergency leave. Contact your manager with your status." ), urgency=Urgency.MEDIUM, timestamp_hours=2.0, deadline_hours=26.0, ), Message( id="msg_007", sender="Neighbor Dave", channel=Channel.SMS, subject="Need help boarding windows", content=( "Hey it's Dave from next door. My back went out yesterday and I can't " "board up these windows by myself. I know you've got your own stuff going on " "but if you've got 20 min I've got the plywood and drill ready to go. " "I'll owe you a case of beer when this is all over." ), urgency=Urgency.MEDIUM, timestamp_hours=2.0, ), # --- New: Elderly neighbor, misinformation, scam --- Message( id="msg_084", sender="Mrs. Chen (neighbor)", channel=Channel.PHONE, subject="Missed call from 555-0134", content=( "Voicemail: '[frail voice, wind noise in background] Hello, this is Linda Chen " "from 418 Elm. I'm so sorry to bother you but I can't reach my daughter and my " "wheelchair won't fit in my car. The water is coming into my garage. I don't know " "what to do. I tried calling 911 but the line was busy for 20 minutes. If you get " "this please help me. I'm on the first floor. I'm scared.'" ), urgency=Urgency.CRITICAL, timestamp_hours=1.5, deadline_hours=4.0, escalation_trigger="msg_084e", escalation_delay_hours=1.0, ), # Escalation: Mrs. Chen's follow-up if not helped Message( id="msg_084e", sender="Mrs. Chen (neighbor)", channel=Channel.PHONE, subject="Missed call from 555-0134 (2)", content=( "Voicemail: '[voice shaking, sounds like she's been crying] It's Linda again. " "The water is in my living room now. I moved to the kitchen counter but I can't " "stay up here much longer. My arms are giving out. If anyone gets this message " "please send someone. Please.'" ), urgency=Urgency.CRITICAL, timestamp_hours=5.0, ), Message( id="msg_085", sender="Unknown Number", channel=Channel.SMS, subject="FEMA disaster relief deposit", content=( "FEMA ALERT: You have been pre-approved for $2,500 in emergency disaster relief. " "To receive your deposit within 24 hours, verify your identity at " "fema-disaster-relief-verify.com. You will need your Social Security number and " "bank routing number. This offer expires in 4 hours. Sincerely, FEMA Region IX." ), urgency=Urgency.LOW, timestamp_hours=1.5, ), Message( id="msg_086", sender="Community Facebook Group", channel=Channel.SOCIAL_MEDIA, subject="BREAKING: Folsom Dam about to fail???", content=( "Post from Sacramento Emergency Updates (14K members): " "'My cousin works at Folsom Dam and says they're doing emergency releases and the " "dam could fail. GET OUT NOW. Share this with everyone you know!!!' " "[427 shares, 89 comments. Top comment from @SacCountyOES: 'This is FALSE. " "Folsom Dam is operating normally. Please rely on official sources only.']" ), urgency=Urgency.MEDIUM, timestamp_hours=2.0, ), # ========== HOUR 2-6: ESCALATION ========== Message( id="msg_008", sender="Delta Airlines", channel=Channel.APP_NOTIFICATION, subject="Flight DL1847 Cancelled", content=( "Your flight DL1847 on March 10 has been cancelled due to airport closure. " "You may rebook at no charge or request a full refund. Rebooking must be " "completed within 48 hours. Call 1-800-221-1212 or use the Delta app." ), urgency=Urgency.MEDIUM, timestamp_hours=3.0, deadline_hours=51.0, ), Message( id="msg_009", sender="Oakwood Elementary", channel=Channel.EMAIL, subject="School closure and early pickup", content=( "Dear Parents, due to the severe weather advisory, Oakwood Elementary will " "close at 2:00 PM today for early dismissal. All children must be picked up " "by 3:00 PM. After-school care is cancelled. If you cannot pick up your child, " "please call the front office at 555-0142 to arrange alternate pickup." ), urgency=Urgency.HIGH, timestamp_hours=3.0, deadline_hours=3.0, dependencies=["msg_003"], ), Message( id="msg_010", sender="FEMA", channel=Channel.GOVERNMENT_ALERT, subject="Emergency shelter locations updated", content=( "FEMA has activated emergency shelters at the following locations: " "Lincoln High School (500 Oak Ave), Sacramento Convention Center (1400 J St), " "and Natomas Community Center (2921 Truxel Rd). Bring ID, medications, and " "essential documents. Pet-friendly shelter at Natomas only." ), urgency=Urgency.HIGH, timestamp_hours=3.5, ), Message( id="msg_011", sender="Mom", channel=Channel.PHONE, subject="Missed call from Mom", content=( "You have a missed call from Mom. Voicemail: '[sounds like she's been crying] " "Baby please call me back. I can't stop watching the news. Your dad talked to " "Uncle Rick and he says come to Tahoe, he's got plenty of room. But honey we " "need to leave SOON before the roads get worse. Please please call me. I love you.'" ), urgency=Urgency.HIGH, timestamp_hours=4.0, ), Message( id="msg_012", sender="Neighbor Dave", channel=Channel.SMS, subject="Water rising on our street", content=( "Dude the water is coming up FAST on Elm. My basement already has 6 inches. " "Get anything you care about upstairs RIGHT NOW. I'm not trying to scare you " "but this is way worse than they said it would be. I think I'm heading to " "the shelter. You should too." ), urgency=Urgency.HIGH, timestamp_hours=4.5, ), Message( id="msg_013", sender="State Farm Insurance", channel=Channel.APP_NOTIFICATION, subject="Document your property NOW", content=( "Important reminder: Take photos and video of any damage to your property " "before cleanup begins. Documentation taken before repairs is critical for " "claim approval. Upload directly through our app for fastest processing." ), urgency=Urgency.MEDIUM, timestamp_hours=5.0, dependencies=["msg_004"], ), Message( id="msg_014", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Boil water advisory", content=( "A boil water advisory is in effect for the following areas: zones A, B, and C. " "All tap water must be boiled for at least one minute before drinking, cooking, " "or brushing teeth. Bottled water is available at shelter locations." ), urgency=Urgency.HIGH, timestamp_hours=5.5, ), # --- New: Gas shortage, volunteer dilemma, medical complication --- Message( id="msg_087", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Fuel supply advisory", content=( "Due to pipeline disruptions, fuel supply in Sacramento County is limited. " "Residents are advised to conserve fuel. The following stations still have " "supply: Chevron on Arden Way, Shell on Howe Ave (expect 1-2 hour wait). " "Priority fuel access for emergency and medical vehicles only at all other stations." ), urgency=Urgency.HIGH, timestamp_hours=5.0, ), Message( id="msg_088", sender="Shelter Volunteer Coordinator", channel=Channel.SMS, subject="Urgent: Need volunteers at Lincoln High shelter", content=( "Hi, this is Maria from Red Cross. We got your number from the shelter sign-in. " "We're critically short-staffed tonight — 200+ people and only 4 volunteers. " "We need someone to help distribute meals and blankets from 6pm-10pm. I know " "you're dealing with your own stuff but if you can spare even 2 hours it would " "make a huge difference for families with little kids here." ), urgency=Urgency.MEDIUM, timestamp_hours=5.5, deadline_hours=10.0, conflicts_with="msg_089", ), Message( id="msg_089", sender="Dr. Patel's Office", channel=Channel.PHONE, subject="Missed call from Dr. Patel's office", content=( "Voicemail: 'This is Dr. Patel's office calling. We received the refill request " "for your father's Lisinopril. However, reviewing his chart we noticed his last " "blood panel showed elevated potassium. We need to do a quick phone consultation " "before authorizing the refill — it may need a dosage adjustment. Please call us " "back between 6pm and 8pm tonight. After that the office closes for the storm.'" ), urgency=Urgency.HIGH, timestamp_hours=5.5, deadline_hours=8.0, conflicts_with="msg_088", ), # ========== HOUR 6-12: POST-EVACUATION CHAOS ========== Message( id="msg_015", sender="Boss", channel=Channel.SMS, subject="Did you get my email?", content=( "Still waiting on your status. Yes or no on tomorrow? I've got half the team " "going dark on me. The Meridian deck won't finish itself and I'm not going to " "be the one explaining to Jacobs why we weren't prepared." ), urgency=Urgency.MEDIUM, timestamp_hours=6.5, deadline_hours=12.0, dependencies=["msg_005"], ), Message( id="msg_016", sender="Sister", channel=Channel.SMS, subject="Did you get the kids?", content=( "Hey the school keeps calling me and I can't pick up because I'm in this " "stupid meeting. Did you get them?? Emma's teacher said she was crying. " "Please just text me back one word. PLEASE. I'm losing it over here." ), urgency=Urgency.CRITICAL, timestamp_hours=7.0, dependencies=["msg_003"], ), Message( id="msg_017", sender="PG&E", channel=Channel.SMS, subject="Power outage notification", content=( "PG&E: A power outage has been reported in your area. Estimated restoration: " "24-48 hours. For updates, visit pge.com/outages or call 1-800-743-5000. " "Do not use generators indoors." ), urgency=Urgency.MEDIUM, timestamp_hours=7.5, ), Message( id="msg_018", sender="Neighbor Dave", channel=Channel.SMS, subject="Left my cat - can you check?", content=( "Man I feel awful. I evacuated to Lincoln High but I had to leave Whiskers " "behind. She's in the upstairs bathroom — I left food and water but she was " "meowing so loud when I shut the door. If you're still on the street can you " "just peek in and make sure she's ok? The spare key is under the gnome." ), urgency=Urgency.MEDIUM, timestamp_hours=8.0, ), # --- New: Car flooded, welfare check request --- Message( id="msg_090", sender="Auto Insurance (GEICO)", channel=Channel.APP_NOTIFICATION, subject="Vehicle flood damage - act within 24hrs", content=( "GEICO Notice: If your vehicle has sustained flood damage, do NOT attempt to " "start the engine — this can cause irreversible damage and void your coverage. " "File a comprehensive claim within 24 hours. Take photos of the water line on " "the vehicle, interior damage, and the VIN plate. Towing to an approved shop " "is covered. Call 1-800-841-3000." ), urgency=Urgency.HIGH, timestamp_hours=7.5, deadline_hours=31.5, ), Message( id="msg_091", sender="Unknown Number", channel=Channel.SMS, subject="Contractor available for storm damage repair", content=( "STORM DAMAGE? We can tarp your roof TODAY. Licensed contractor, insurance " "accepted. $500 deposit required upfront to hold your spot. Cash or Venmo only. " "We're booking fast — 3 spots left today. Text YES to reserve. — Apex Roofing LLC" ), urgency=Urgency.LOW, timestamp_hours=8.0, ), Message( id="msg_092", sender="Neighbor Dave", channel=Channel.SMS, subject="Mrs Chen from 418 - did she evacuate?", content=( "Hey have you seen Mrs. Chen? The lady in the wheelchair at 418? I just realized " "nobody's seen her since yesterday and her lights are off. She doesn't have family " "nearby. I'd go check but I'm at the shelter. Can you call in a welfare check " "on the non-emergency line? I'd hate to think she's stuck in there alone." ), urgency=Urgency.HIGH, timestamp_hours=8.5, dependencies=["msg_084"], ), Message( id="msg_019", sender="Red Cross", channel=Channel.EMAIL, subject="Emergency assistance available", content=( "The American Red Cross is providing emergency assistance in your area. " "Services include: temporary shelter, meals, health services, and mental " "health support. Visit redcross.org/disaster or call 1-800-RED-CROSS. " "Case workers are available at all shelter locations." ), urgency=Urgency.LOW, timestamp_hours=8.5, ), Message( id="msg_020", sender="Mom", channel=Channel.SMS, subject="Uncle Rick says come to Tahoe", content=( "OK so Uncle Rick says absolutely yes, come up. He's got 3 bedrooms and says " "stay as long as you need. Your sister and the kids too. Dad and I are packing " "the car now. Honey PLEASE come. I won't be able to sleep tonight if you're " "still down there. The roads north are clear, we checked. Can you be ready by morning?" ), urgency=Urgency.HIGH, timestamp_hours=9.0, ), Message( id="msg_021", sender="Bank of America", channel=Channel.EMAIL, subject="Disaster relief: payment deferrals available", content=( "Dear Customer, Bank of America is offering payment deferrals for customers " "affected by the recent disaster. Mortgage, auto loan, and credit card payments " "may be deferred for up to 90 days. Contact us at 1-844-219-0690 or visit " "your local branch to apply. Proof of residence in affected area required." ), urgency=Urgency.LOW, timestamp_hours=9.5, ), Message( id="msg_022", sender="Coworker Sarah", channel=Channel.SMS, subject="Are you okay?", content=( "Hey just saw the news about your area. Are you and the family safe? " "Don't worry about the Meridian deck, I can cover your slides if you need. " "Just let me know." ), urgency=Urgency.LOW, timestamp_hours=10.0, ), Message( id="msg_023", sender="Oakwood Elementary", channel=Channel.EMAIL, subject="School closed indefinitely", content=( "Dear Parents, Oakwood Elementary will remain closed until further notice " "due to facility damage from the storm. Virtual learning will begin on " "Monday if the closure extends. Meal pickup will be available at Lincoln " "High School from 11 AM to 1 PM daily. We will send updates as available." ), urgency=Urgency.MEDIUM, timestamp_hours=10.5, ), Message( id="msg_024", sender="FEMA", channel=Channel.EMAIL, subject="Apply for FEMA disaster assistance", content=( "If you have been affected by the declared disaster, you may be eligible for " "FEMA assistance including temporary housing, home repairs, and other needs. " "Apply online at DisasterAssistance.gov, call 1-800-621-3362, or visit a " "Disaster Recovery Center. You will need your Social Security number, address, " "and insurance information. Application deadline: 60 days from declaration." ), urgency=Urgency.MEDIUM, timestamp_hours=11.0, deadline_hours=48.0, ), # ========== HOUR 12-20: SETTLING IN / CONFLICTING DEMANDS ========== Message( id="msg_025", sender="Boss", channel=Channel.EMAIL, subject="RE: Tomorrow's status - updated guidance", content=( "Team,\n\n" "Spoke with leadership. Fine — if you're in an evac zone, work remote. " "But the Meridian deck is still due Thursday 5 PM, no exceptions. I don't care " "if you're working from a shelter, a Starbucks, or your car. Claim your slides " "in the shared doc by end of day or I'll reassign them.\n\n" "— Greg" ), urgency=Urgency.MEDIUM, timestamp_hours=12.0, deadline_hours=41.0, dependencies=["msg_005"], ), Message( id="msg_026", sender="Landlord", channel=Channel.EMAIL, subject="Property damage assessment", content=( "Dear Tenant, I need to schedule a damage assessment for your unit within " "the next 48 hours for insurance purposes. Please confirm a time when I can " "access the property, or let me know if you've already documented the damage. " "Photos of any damage would be helpful." ), urgency=Urgency.MEDIUM, timestamp_hours=13.0, deadline_hours=48.0, ), Message( id="msg_026b", sender="Emma (niece)", channel=Channel.SMS, subject="from emmas phone", content=( "hi its emma. jake took the big pillow and wont share. also when is mommy " "coming. are we having a sleepover?? can we have mac and cheese for dinner. " "i miss mr buttons. love you" ), urgency=Urgency.LOW, timestamp_hours=12.5, ), Message( id="msg_027", sender="Sister", channel=Channel.SMS, subject="Kids are asking about their stuff", content=( "Emma won't stop crying about Mr. Buttons — that's her stuffed bunny she left " "in her cubby at school. Jake is being Jake, just wants his tablet. Did you " "happen to grab their backpacks? My office FINALLY let us leave. I can come " "get them around 8 if the roads are ok. Thank you for doing this. Seriously." ), urgency=Urgency.LOW, timestamp_hours=13.5, dependencies=["msg_003"], ), # --- New: Phone battery anxiety, community mutual aid, moral dilemma --- Message( id="msg_093", sender="Community Mutual Aid", channel=Channel.SOCIAL_MEDIA, subject="Mutual aid coordination spreadsheet", content=( "DM from @SacMutualAid: 'Hi! We're coordinating disaster relief for your " "neighborhood. We have a Google Sheet tracking who needs what — water, meds, " "rides, pet supplies, etc. Can you add what you need AND what you can offer? " "Also if you know any elderly or disabled neighbors who can't access the internet, " "please add them. Link: [spreadsheet]. Every entry helps.'" ), urgency=Urgency.MEDIUM, timestamp_hours=13.0, ), Message( id="msg_094", sender="Unknown Number", channel=Channel.SMS, subject="Your SSN may be compromised", content=( "ALERT: Due to the disaster, your personal information may have been compromised " "from damaged mail or documents. Protect yourself NOW. Visit " "identityprotect-disaster.com to freeze your credit for FREE. This government " "program expires in 48 hours. Don't wait — identity theft spikes 400% after " "natural disasters." ), urgency=Urgency.LOW, timestamp_hours=14.0, ), Message( id="msg_095", sender="Local Church (St. Matthew's)", channel=Channel.SMS, subject="Hot meals available - need headcount", content=( "Hi, this is Pastor Jim from St. Matthew's. We're cooking hot meals for anyone " "affected by the storm. Serving at the church (900 Freeport Blvd) at 6pm tonight " "and tomorrow. If you're coming or know people who need a meal, can you reply with " "a rough headcount? We want to make sure we have enough. All welcome, no questions asked." ), urgency=Urgency.LOW, timestamp_hours=14.5, ), Message( id="msg_028", sender="Pharmacy - CVS", channel=Channel.SMS, subject="Prescription ready - pickup by Friday", content=( "Your prescription for Lisinopril is ready for pickup at CVS #4521 (Florin Rd). " "Please pick up by Friday or it will be returned to stock. If your pharmacy " "is closed due to the emergency, call 1-800-746-7287 to transfer." ), urgency=Urgency.HIGH, timestamp_hours=14.0, deadline_hours=48.0, ), Message( id="msg_029", sender="National Weather Service", channel=Channel.GOVERNMENT_ALERT, subject="Flash flood warning extended", content=( "Flash flood warning extended through Friday 6 AM for Sacramento County. " "Additional 2-4 inches of rain expected tonight. Avoid low-lying areas and " "do not attempt to drive through flooded roads. Turn around, don't drown." ), urgency=Urgency.CRITICAL, timestamp_hours=15.0, ), Message( id="msg_030", sender="Mom", channel=Channel.SMS, subject="Dad's medication", content=( "Honey I don't want to add to your plate but your dad just realized he left " "his heart medication on the kitchen counter. We're already past Folsom. " "Can you PLEASE call Dr. Patel tomorrow morning and ask them to call in a " "refill to a pharmacy in Truckee? I'm trying not to panic but you know " "he can't miss more than a day. His number should be in dad's phone under P." ), urgency=Urgency.HIGH, timestamp_hours=16.0, deadline_hours=26.0, ), Message( id="msg_031", sender="Comcast", channel=Channel.EMAIL, subject="Service disruption in your area", content=( "We are aware of service disruptions in your area due to the recent storm. " "Our crews are working to restore service. Estimated restoration: 3-5 business " "days. You will receive a credit for the outage period automatically. " "For updates, visit xfinity.com/support/status." ), urgency=Urgency.LOW, timestamp_hours=16.5, ), Message( id="msg_032", sender="Delta Airlines", channel=Channel.EMAIL, subject="Rebooking options for DL1847", content=( "We have found the following rebooking options for your cancelled flight DL1847: " "Option A: DL2103 on March 12, 2:15 PM (same route). " "Option B: DL1590 on March 13, 8:40 AM (connecting through Denver). " "Option C: Full refund to original payment method (7-10 business days). " "Reply with your preference or call us to discuss." ), urgency=Urgency.MEDIUM, timestamp_hours=17.0, deadline_hours=51.0, dependencies=["msg_008"], ), Message( id="msg_033", sender="Neighbor Dave", channel=Channel.SMS, subject="Shelter is packed", content=( "The Lincoln High shelter is getting really full. If you haven't come yet, " "try the Convention Center instead. Also they're saying the Natomas shelter " "is the only one taking pets, so if you have your dog..." ), urgency=Urgency.MEDIUM, timestamp_hours=18.0, ), Message( id="msg_034", sender="FEMA", channel=Channel.GOVERNMENT_ALERT, subject="Curfew in effect", content=( "A curfew is in effect from 9 PM to 6 AM in evacuation zones A and B. " "Only emergency vehicles and authorized personnel are permitted in these " "areas during curfew hours. Violators may be subject to citation." ), urgency=Urgency.HIGH, timestamp_hours=19.0, ), Message( id="msg_034b", sender="Emma (niece)", channel=Channel.SMS, subject="im scared", content=( "the lights went off and its really dark. jake is pretending hes not scared " "but he is. when is mommy coming?? you said she was coming. " "i dont like the wind noise. can you come sit with us" ), urgency=Urgency.MEDIUM, timestamp_hours=19.0, ), Message( id="msg_035", sender="Sister", channel=Channel.PHONE, subject="Missed call from Sister", content=( "Missed call from Sister. Voicemail: '[car horn honking in background] Hey it's me, " "I'm trying to get to you but Florin is completely underwater and my GPS keeps " "rerouting me in circles. I think I need to turn back. Can you keep them tonight? " "Emma's probably already asleep, just — tell her Mommy loves her. I'm so sorry. " "I'll figure it out in the morning. [voice cracks] Thank you.'" ), urgency=Urgency.MEDIUM, timestamp_hours=19.5, dependencies=["msg_003"], ), # ========== HOUR 20-30: DRIFT EVENTS & COMPLICATIONS ========== Message( id="msg_036", sender="State Farm Insurance", channel=Channel.EMAIL, subject="UPDATED: Claim deadline changed to 48 hours", content=( "IMPORTANT UPDATE: Due to the volume of claims, State Farm has shortened " "the initial claim filing deadline from 72 hours to 48 hours for expedited " "processing. Claims filed after 48 hours will still be accepted but may " "experience significant processing delays of 30-60 days. Please file ASAP." ), urgency=Urgency.CRITICAL, timestamp_hours=20.0, deadline_hours=48.0, drift_flag=True, supersedes="msg_004", ), Message( id="msg_037", sender="National Weather Service", channel=Channel.GOVERNMENT_ALERT, subject="EXPANDED: Evacuation zones now include Zone B", content=( "URGENT UPDATE: The mandatory evacuation order has been expanded to include " "Zone B. All Zone B residents must evacuate within 4 hours. This includes " "the downtown corridor, Midtown, and East Sacramento. All previously listed " "shelters remain active." ), urgency=Urgency.CRITICAL, timestamp_hours=21.0, deadline_hours=25.0, drift_flag=True, supersedes="msg_001", ), Message( id="msg_038", sender="Boss", channel=Channel.SMS, subject="Office is in Zone B - disregard earlier email", content=( "Well, our office is in Zone B. So obviously disregard the 'come in tomorrow' " "thing. But I STILL need those slides. Can you work on them from wherever " "you are? Sarah said she can pick up some of the slack but I need to know " "what you can deliver. This client won't wait for a hurricane." ), urgency=Urgency.MEDIUM, timestamp_hours=21.5, dependencies=["msg_005", "msg_025"], ), Message( id="msg_039", sender="Mom", channel=Channel.SMS, subject="We made it to Tahoe", content=( "We're at Uncle Rick's. Roads were fine once we got past Folsom. The cabin " "has power and wifi. There's plenty of room. Please come when you can. " "Rick says the guest room is ready. Love you." ), urgency=Urgency.LOW, timestamp_hours=22.0, ), Message( id="msg_040", sender="HR Department", channel=Channel.EMAIL, subject="UPDATED: Emergency leave policy expanded", content=( "UPDATE: Due to the expanded evacuation zones, the emergency leave policy " "has been extended. Employees in Zones A and B are granted 5 days of paid " "emergency leave effective immediately. You do NOT need to use PTO. " "Please still submit the emergency status form on the HR portal." ), urgency=Urgency.MEDIUM, timestamp_hours=22.5, drift_flag=True, supersedes="msg_006", ), Message( id="msg_041", sender="Neighbor Dave", channel=Channel.SMS, subject="Someone broke into houses on our street", content=( "Hey bad news. Talked to a cop here at the shelter and he said there have been " "break-ins on Elm and Oak. People are the worst — looting during a disaster. " "If you left anything valuable at your place you should probably file a report. " "Non-emergency line is 555-0199. Guy two cots over from me said they got his TV " "and laptop. Unbelievable." ), urgency=Urgency.HIGH, timestamp_hours=23.0, ), # --- New: School device request, stranger asking for help --- Message( id="msg_096", sender="Oakwood Elementary", channel=Channel.EMAIL, subject="Device & internet survey for virtual learning", content=( "Dear Parents/Guardians, as we prepare for virtual learning, please complete " "this brief survey by tomorrow: Does your child have access to a device " "(laptop/tablet/Chromebook)? Do you have reliable internet access at your " "current location? If not, we can arrange a device pickup and provide a WiFi " "hotspot. Reply to this email or call the office at 555-0142." ), urgency=Urgency.MEDIUM, timestamp_hours=23.0, deadline_hours=36.0, ), Message( id="msg_097", sender="Unknown Number", channel=Channel.SMS, subject="Please help - stranded family", content=( "Hi this number was given to me at the shelter. My name is Rosa, I have 3 kids " "and we lost everything. We don't have insurance and I don't speak English very " "well. Someone said you know how to file for FEMA? Can you help me fill out the " "forms? I don't understand what they're asking. I can meet you at the shelter " "anytime. God bless you." ), urgency=Urgency.MEDIUM, timestamp_hours=23.5, ), Message( id="msg_042", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Road closure updates", content=( "The following roads are closed due to flooding: Highway 99 (Elk Grove to " "downtown), Florin Rd (Freeport Blvd to Stockton Blvd), I-5 southbound " "(downtown to Laguna). Use I-80 East for evacuation routes north. " "Check 511.org for real-time updates." ), urgency=Urgency.HIGH, timestamp_hours=24.0, ), Message( id="msg_043", sender="Delta Airlines", channel=Channel.APP_NOTIFICATION, subject="UPDATED: Free rebooking window extended to 7 days", content=( "Good news: Delta has extended the free rebooking window for all cancelled " "flights to 7 days (previously 48 hours). You now have until March 17 to " "rebook at no additional charge. Refund option remains available." ), urgency=Urgency.LOW, timestamp_hours=24.5, drift_flag=True, supersedes="msg_008", ), Message( id="msg_044", sender="Landlord", channel=Channel.SMS, subject="RE: Property damage - urgent", content=( "I drove by the property. There is significant water damage on the first floor. " "I need you to confirm whether you moved your belongings upstairs. My insurance " "adjuster is coming tomorrow at 10 AM. Can you be there or give me permission " "to enter?" ), urgency=Urgency.HIGH, timestamp_hours=25.0, deadline_hours=34.0, dependencies=["msg_026"], ), Message( id="msg_045", sender="Coworker Sarah", channel=Channel.EMAIL, subject="Meridian deck - I took your slides", content=( "Hey, I know you've got a lot going on so I went ahead and drafted your " "sections of the Meridian deck. Can you review when you get a chance? " "No rush, just want to make sure the numbers are right. Link in the " "shared drive. Stay safe." ), urgency=Urgency.LOW, timestamp_hours=25.5, dependencies=["msg_025"], ), # ========== HOUR 26-36: RECOVERY PHASE ========== Message( id="msg_046", sender="FEMA", channel=Channel.EMAIL, subject="Disaster Recovery Center opening", content=( "A Disaster Recovery Center will open tomorrow at Sacramento Convention Center " "from 8 AM to 6 PM. FEMA specialists will be available to help with: " "disaster assistance applications, SBA loan information, insurance questions, " "and other recovery needs. Bring ID and proof of address." ), urgency=Urgency.MEDIUM, timestamp_hours=26.0, ), Message( id="msg_047", sender="Mom", channel=Channel.SMS, subject="Did you call Dr. Patel?", content=( "Sweetheart did you call Dr. Patel?? Dad hasn't had his medication in over " "24 hours now and I can tell his blood pressure is up. He won't admit it " "but he's been dizzy. The pharmacy in Truckee says they need the doctor to " "call it in — they can't just refill it. I know you have a million things " "going on but this one really scares me." ), urgency=Urgency.CRITICAL, timestamp_hours=27.0, dependencies=["msg_030"], ), Message( id="msg_048", sender="Oakwood Elementary", channel=Channel.EMAIL, subject="Virtual learning setup instructions", content=( "Dear Parents, virtual learning will begin Monday. Students will need: " "a device with internet access, their student login (sent home in September), " "and headphones. Classes will run 9 AM - 12 PM daily. If your child does not " "have a device, contact the school to arrange a Chromebook pickup." ), urgency=Urgency.MEDIUM, timestamp_hours=28.0, ), Message( id="msg_049", sender="State Farm Insurance", channel=Channel.EMAIL, subject="Claim #SF-2847291 received", content=( "We have received your initial claim filing. Your claim number is SF-2847291. " "An adjuster will be assigned within 5-7 business days. In the meantime, " "please continue documenting damage and keep all receipts for temporary " "living expenses. Do NOT begin permanent repairs until the adjuster visits." ), urgency=Urgency.MEDIUM, timestamp_hours=29.0, dependencies=["msg_004"], ), Message( id="msg_050", sender="Sister", channel=Channel.SMS, subject="I'm coming to get the kids", content=( "Roads are clear enough now. I'm heading your way to get Emma and Jake. " "Should be there in about 45 minutes. Mom says we should all go to Tahoe. " "What do you think? I can fit everyone in the minivan." ), urgency=Urgency.MEDIUM, timestamp_hours=30.0, dependencies=["msg_003"], ), Message( id="msg_051", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="UPDATED: Boil water advisory lifted for Zone C", content=( "The boil water advisory has been lifted for Zone C. Zones A and B remain " "under the advisory until further testing is completed. Water quality test " "results will be posted at SacCounty.gov/water." ), urgency=Urgency.MEDIUM, timestamp_hours=30.5, drift_flag=True, supersedes="msg_014", ), Message( id="msg_052", sender="Neighbor Dave", channel=Channel.SMS, subject="Whiskers update", content=( "Hey, a volunteer rescue team came through the neighborhood and got Whiskers! " "She's at the Natomas shelter. Thank you for checking on her earlier, it " "meant a lot. How are you holding up?" ), urgency=Urgency.LOW, timestamp_hours=31.0, ), # --- New: Mold warning, generator dilemma, mental health --- Message( id="msg_098", sender="Sacramento County Health Dept", channel=Channel.GOVERNMENT_ALERT, subject="URGENT: Mold prevention after flooding", content=( "Health advisory: Mold can begin growing within 24-48 hours after flooding. " "If your home was flooded, take immediate action: remove wet materials " "(carpet, drywall, insulation), increase ventilation, and apply mold-killing " "solutions. Wear N95 masks during cleanup. Residents with asthma or respiratory " "conditions should NOT enter flood-damaged buildings. Free mold test kits " "available at all shelter locations." ), urgency=Urgency.HIGH, timestamp_hours=31.0, deadline_hours=48.0, ), Message( id="msg_099", sender="Neighbor Dave", channel=Channel.SMS, subject="Can I borrow your generator?", content=( "Hey so I know this is a big ask but the family two houses down — the Rodriguezes — " "their baby is on a breathing monitor that needs power. PG&E says maybe tomorrow " "for restoration. I told them you have a generator. Would you be willing to let them " "use it for the night? I know you need it too but this kid is like 4 months old " "and the parents are panicking." ), urgency=Urgency.HIGH, timestamp_hours=31.5, deadline_hours=35.0, ), Message( id="msg_100", sender="Employee Assistance Program", channel=Channel.EMAIL, subject="Free crisis counseling available", content=( "Dear colleague, we understand the past 48 hours have been incredibly stressful. " "Your employer's EAP program offers free, confidential crisis counseling — no " "copay, no referral needed. Sessions available by phone or video 24/7. If you're " "feeling overwhelmed, anxious, or having trouble sleeping, please reach out. " "Call 1-800-555-0123 or text CRISIS to 741741. You don't have to do this alone." ), urgency=Urgency.LOW, timestamp_hours=32.0, ), # ========== HOUR 32-40: ONGOING MANAGEMENT ========== Message( id="msg_053", sender="Bank of America", channel=Channel.EMAIL, subject="Disaster deferral application received", content=( "We've received your request for disaster-related payment deferral. " "Your mortgage payment due on March 15 has been deferred. You will receive " "confirmation within 3-5 business days. No late fees will be assessed." ), urgency=Urgency.LOW, timestamp_hours=32.0, dependencies=["msg_021"], ), Message( id="msg_054", sender="Boss", channel=Channel.EMAIL, subject="Meridian presentation postponed", content=( "OK update — Meridian called and pushed the presentation to next Wednesday. " "Turns out half their team is dealing with the storm too. Go figure.\n\n" "Take the emergency leave. Focus on your family. I know I was being intense " "earlier, I'm dealing with this too. We'll regroup Monday.\n\n" "— Greg" ), urgency=Urgency.LOW, timestamp_hours=33.0, dependencies=["msg_025"], ), Message( id="msg_055", sender="FEMA", channel=Channel.GOVERNMENT_ALERT, subject="FEMA documentation requirements updated", content=( "IMPORTANT UPDATE: FEMA disaster assistance applications now require " "additional documentation. In addition to standard requirements, applicants " "must provide: utility bills from the last 3 months, a signed letter from " "landlord confirming tenancy (for renters), and photos of damage with " "timestamps. Updated forms available at DisasterAssistance.gov." ), urgency=Urgency.HIGH, timestamp_hours=34.0, deadline_hours=48.0, drift_flag=True, supersedes="msg_024", ), Message( id="msg_056", sender="Mom", channel=Channel.SMS, subject="Dad's doing better", content=( "Oh thank God — Dr. Patel called in the prescription to the Rite Aid in Truckee " "and dad picked it up an hour ago. He's already looking better, the color is " "back in his face. Thank you honey. Now PLEASE come up here. Rick made up the " "guest room and everything. We miss you. Mom loves you." ), urgency=Urgency.LOW, timestamp_hours=34.5, dependencies=["msg_030"], ), Message( id="msg_057", sender="PG&E", channel=Channel.SMS, subject="Power restoration update", content=( "PG&E Update: Power has been restored to approximately 60% of affected " "customers. Your area (Zone A) is estimated for restoration by tomorrow " "evening. We appreciate your patience." ), urgency=Urgency.LOW, timestamp_hours=35.0, ), Message( id="msg_058", sender="Landlord", channel=Channel.EMAIL, subject="Insurance adjuster visit confirmed", content=( "The insurance adjuster visited today. Significant water damage confirmed " "on the first floor. I'm filing my claim. You should file your renter's " "insurance claim if you have coverage. The unit will need at least 2-3 weeks " "of repairs. You may need to find temporary housing." ), urgency=Urgency.HIGH, timestamp_hours=36.0, dependencies=["msg_026", "msg_044"], ), Message( id="msg_059", sender="Red Cross", channel=Channel.EMAIL, subject="Temporary housing assistance", content=( "Based on your shelter registration, you may be eligible for temporary " "housing assistance through the Red Cross. This can include hotel vouchers " "for up to 14 days. Please visit the service desk at your shelter location " "or call 1-800-RED-CROSS to apply." ), urgency=Urgency.MEDIUM, timestamp_hours=36.5, ), Message( id="msg_060", sender="Coworker Sarah", channel=Channel.SMS, subject="Boss told everyone about the postponement", content=( "Hey just wanted to let you know the Meridian thing is pushed. Don't stress " "about the deck. Take care of yourself and the family first. Let me know if " "you need anything - I'm in Folsom so not affected." ), urgency=Urgency.LOW, timestamp_hours=37.0, ), # ========== HOUR 38-44: LATE-STAGE DECISIONS ========== Message( id="msg_061", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Evacuation order downgraded for Zone A", content=( "The mandatory evacuation order for Zone A has been downgraded to a voluntary " "evacuation advisory. Residents may return home at their own risk. Emergency " "services remain limited. Zone B evacuation order remains in effect." ), urgency=Urgency.HIGH, timestamp_hours=38.0, ), Message( id="msg_062", sender="Neighbor Dave", channel=Channel.SMS, subject="Going home to check damage", content=( "Zone A evac is lifted!! I'm heading back to see how bad it is. Want to come " "with me? Safety in numbers and all that. Cops said they caught the guys who " "were breaking in so it should be safe. I can swing by in 20 if you're in." ), urgency=Urgency.MEDIUM, timestamp_hours=38.5, dependencies=["msg_041"], ), Message( id="msg_063", sender="Sister", channel=Channel.SMS, subject="We're at Tahoe", content=( "We made it to Uncle Rick's. The kids are already outside throwing snowballs " "like the last 24 hours never happened. Kids are incredible. Mom immediately " "started making chicken soup because of course she did. There's room for you. " "For real, come up when you can. You deserve a break after everything." ), urgency=Urgency.LOW, timestamp_hours=39.0, ), # --- New: Identity docs, price gouging, cleanup coordination --- Message( id="msg_101", sender="Sacramento County", channel=Channel.EMAIL, subject="Replacing lost documents after disaster", content=( "If you lost important documents (birth certificate, Social Security card, " "passport, etc.) in the disaster, expedited replacement is available at no cost " "through the Disaster Recovery Center. Bring any surviving ID and proof of " "affected address. DMV is waiving fees for replacement driver's licenses " "through March 31. Visit any DMV office or the Recovery Center." ), urgency=Urgency.MEDIUM, timestamp_hours=39.0, ), Message( id="msg_102", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Report price gouging - it's illegal", content=( "The Attorney General has received reports of price gouging in disaster-affected " "areas. It is ILLEGAL to raise prices more than 10% on essential goods during a " "declared emergency. If you see inflated prices on water, gas, food, lodging, or " "building materials, report it: call 1-800-952-5225 or file at oag.ca.gov/report. " "Violators face fines up to $10,000 per incident." ), urgency=Urgency.LOW, timestamp_hours=39.5, ), Message( id="msg_103", sender="Neighbor Dave", channel=Channel.SMS, subject="Neighborhood cleanup crew forming", content=( "Hey a bunch of us from the block are organizing a cleanup crew for Saturday. " "Everyone helps everyone, one house at a time. We've got the Rodriguez family, " "the Parkers, and a few others. I told them you'd probably be in. You in? " "Bring gloves if you have them. I'm bringing the beer." ), urgency=Urgency.LOW, timestamp_hours=39.5, ), Message( id="msg_064", sender="State Farm Insurance", channel=Channel.EMAIL, subject="Adjuster assigned to claim #SF-2847291", content=( "An adjuster has been assigned to your claim. Adjuster: Maria Chen, " "phone: 555-0187. She will contact you within 24 hours to schedule an " "inspection. Please have your policy number and damage documentation ready." ), urgency=Urgency.MEDIUM, timestamp_hours=40.0, dependencies=["msg_004"], ), Message( id="msg_065", sender="Pharmacy - CVS", channel=Channel.SMS, subject="Prescription returned to stock", content=( "Your prescription for Lisinopril at CVS #4521 has been returned to stock. " "To have it refilled, please call your doctor or visit any CVS location. " "Note: CVS #4521 (Florin Rd) is temporarily closed. Nearest open location: " "CVS #3892 (Arden Way)." ), urgency=Urgency.HIGH, timestamp_hours=40.5, dependencies=["msg_028"], ), Message( id="msg_066", sender="FEMA", channel=Channel.EMAIL, subject="SBA disaster loan information", content=( "Small Business Administration (SBA) disaster loans are available for " "homeowners, renters, and businesses affected by the disaster. Loans up to " "$200,000 for real property and $40,000 for personal property. Low interest " "rates (currently 2.75%). Apply at SBA.gov/disaster or at the Disaster " "Recovery Center." ), urgency=Urgency.LOW, timestamp_hours=41.0, ), # ========== HOUR 44-48: FINAL STRETCH ========== # --- New: Renter's rights, emotional support --- Message( id="msg_104", sender="Legal Aid Society", channel=Channel.EMAIL, subject="Know your rights as a disaster-affected renter", content=( "Free legal clinic for disaster-affected renters: Your landlord CANNOT evict you " "during a declared emergency. You are entitled to: rent abatement for uninhabitable " "conditions, return of security deposit if unit is destroyed, and relocation " "assistance in some cases. Free legal consultations available at the Recovery " "Center Tues/Thurs 10am-2pm. Call Legal Aid at 916-551-2150." ), urgency=Urgency.MEDIUM, timestamp_hours=42.0, dependencies=["msg_058"], ), Message( id="msg_105", sender="Best Friend (Alex)", channel=Channel.SMS, subject="Hey, checking in on you", content=( "Hey. I know you've been handling everything for everyone — your parents, your " "sister's kids, Dave, work, all of it. But how are YOU actually doing? Not 'fine' — " "for real. I can drive down from SF this weekend if you want company or help with " "cleanup. Or if you just need someone to sit on a porch and not talk, I'm good " "at that too. You don't have to be the strong one 24/7." ), urgency=Urgency.LOW, timestamp_hours=43.0, ), Message( id="msg_106", sender="Mrs. Chen (neighbor)", channel=Channel.SMS, subject="Thank you from Linda Chen", content=( "Hello, this is Linda's daughter Michelle. I want to thank you — my mom told me " "you helped her evacuate. She's safe at my house in Roseville now. She keeps " "saying 'the nice person from Elm Street saved me.' I can't tell you what that " "means to our family. If there's ever anything we can do for you, please don't " "hesitate. Mom says you're welcome for dinner anytime." ), urgency=Urgency.LOW, timestamp_hours=43.5, dependencies=["msg_084"], ), Message( id="msg_067", sender="Mom", channel=Channel.SMS, subject="Please come to Tahoe", content=( "Honey everyone is here except you and it doesn't feel right. Dad's feeling " "so much better — he's out on the deck with Rick right now. The roads are " "totally clear, I checked three times. Even if it's just for a couple days. " "You've been taking care of everyone else this whole time. Let us take care " "of you for a bit. Please." ), urgency=Urgency.MEDIUM, timestamp_hours=44.0, ), Message( id="msg_068", sender="HR Department", channel=Channel.EMAIL, subject="Emergency leave confirmed", content=( "Your emergency leave has been approved for March 8-14. You have been marked " "as 'disaster-affected' in our system. Your benefits continue uninterrupted. " "Employee Assistance Program (EAP) counseling is available at no cost: " "call 1-800-555-0123." ), urgency=Urgency.LOW, timestamp_hours=44.5, dependencies=["msg_040"], ), Message( id="msg_069", sender="Landlord", channel=Channel.EMAIL, subject="Temporary relocation assistance", content=( "I've arranged for you to stay at a furnished apartment on J Street while " "repairs are being done. Rent will remain the same and I'll cover the moving " "costs. You can move in anytime after tomorrow. Let me know if this works " "or if you've made other arrangements." ), urgency=Urgency.MEDIUM, timestamp_hours=45.0, dependencies=["msg_058"], ), Message( id="msg_070", sender="National Weather Service", channel=Channel.GOVERNMENT_ALERT, subject="Storm system clearing - recovery begins", content=( "The storm system is clearing the Sacramento area. Skies are expected to " "clear by Saturday afternoon. However, river levels remain high and flood " "risk continues through the weekend. Continue to avoid flooded areas." ), urgency=Urgency.MEDIUM, timestamp_hours=46.0, ), Message( id="msg_071", sender="Sacramento County", channel=Channel.GOVERNMENT_ALERT, subject="Boil water advisory fully lifted", content=( "The boil water advisory has been lifted for all zones. Water quality testing " "confirms safe drinking water throughout the county. Residents may resume " "normal water usage." ), urgency=Urgency.MEDIUM, timestamp_hours=46.5, ), Message( id="msg_072", sender="Neighbor Dave", channel=Channel.SMS, subject="House update", content=( "Good news — my place isn't as bad as I thought. Water in the basement but " "first floor survived. Could've been way worse. How'd yours make out? " "Seriously, anything you need with cleanup just say the word. You checked on " "Whiskers for me and I won't forget that. Neighbors gotta stick together." ), urgency=Urgency.LOW, timestamp_hours=47.0, ), Message( id="msg_072b", sender="Emma (niece)", channel=Channel.SMS, subject="i drew you a pictur", content=( "hi its emma again!! i drew you a rainbow and a house and us. mommy said " "i can send you a foto. jake says thank you for the adventure. i say thank " "you for the mac and cheese. your the best. when can we do a sleepover again " "but WITHOUT the storm part. love emma age 7" ), urgency=Urgency.LOW, timestamp_hours=47.0, ), Message( id="msg_073", sender="Sister", channel=Channel.SMS, subject="Kids say thank you", content=( "Emma drew you a picture of a rainbow with 'thank you' written in crayon. " "She wants me to send you a photo. And Jake keeps telling everyone about " "'the adventure' and how you let him eat cereal for dinner. Kids man. " "I don't know what I would have done without you this week. I really don't. " "You're my person. Love you." ), urgency=Urgency.LOW, timestamp_hours=47.5, ), # ========== CONFLICTING DEADLINES ========== # These pairs have overlapping deadlines — the agent can only do one. # Conflict pair 1: School pickup vs Insurance call (both at hour ~8) Message( id="msg_074", sender="Oakwood Elementary", channel=Channel.PHONE, subject="URGENT: Early dismissal pickup required by 2pm", content=( "This is Oakwood Elementary calling about Emma and Jake. Due to the storm, " "we are doing an emergency early dismissal at 2pm today. Your sister listed you " "as emergency pickup. If no authorized adult arrives by 2pm, we will need to " "contact Child Protective Services per district policy. Please confirm." ), urgency=Urgency.CRITICAL, timestamp_hours=6.0, deadline_hours=8.0, conflicts_with="msg_075", ), Message( id="msg_075", sender="State Farm Insurance", channel=Channel.PHONE, subject="Scheduled damage assessment call - don't miss", content=( "This is your scheduled callback from State Farm. An adjuster is available to " "do a phone assessment of your property damage between 1:30pm and 2:15pm today ONLY. " "If you miss this window, the next available slot is in 12 days. Missing the initial " "assessment may delay your claim payout by 4-6 weeks. Please be available." ), urgency=Urgency.HIGH, timestamp_hours=6.0, deadline_hours=8.5, dependencies=["msg_004"], conflicts_with="msg_074", ), # Conflict pair 2: Boss presentation vs FEMA registration (both at hour ~14) Message( id="msg_076", sender="Boss", channel=Channel.SMS, subject="Client pushed meeting to today - need you on Zoom at 2pm", content=( "Bad news, Meridian moved the meeting to today. I need you on the Zoom call at " "2pm sharp to present your section. It's 30 minutes max. I already told them " "you'd be there. This is the account we've been working on for 6 months. " "Don't let me down." ), urgency=Urgency.HIGH, timestamp_hours=12.0, deadline_hours=14.5, conflicts_with="msg_077", ), Message( id="msg_077", sender="FEMA", channel=Channel.GOVERNMENT_ALERT, subject="In-person registration window: 1pm-3pm TODAY ONLY", content=( "FEMA Disaster Recovery Center at Sacramento Convention Center is open for " "in-person registration TODAY ONLY from 1pm to 3pm. In-person registrations " "receive priority processing (2-3 weeks vs 6-8 weeks online). Bring ID, proof " "of residence, and damage documentation. This is the only in-person session " "scheduled for your zip code." ), urgency=Urgency.HIGH, timestamp_hours=11.5, deadline_hours=15.0, conflicts_with="msg_076", ), # ========== ESCALATION CHAINS ========== # These messages escalate (spawn angry follow-ups) if not handled in time. Message( id="msg_078", sender="Neighbor Dave", channel=Channel.SMS, subject="Can you help me board up windows?", content=( "Hey man, the plywood I got is too big for me to handle alone. My wife's at her " "mom's with the kids. Can you come over for like 20 minutes to help me board up " "the front windows? I'll return the favor anytime. I'm at 422 Oak St." ), urgency=Urgency.MEDIUM, timestamp_hours=3.0, deadline_hours=6.0, escalation_trigger="msg_078e", escalation_delay_hours=1.0, ), # Escalation: Dave's follow-up (injected by environment if msg_078 unhandled by hour 7) Message( id="msg_078e", sender="Neighbor Dave", channel=Channel.SMS, subject="Window broke. Thanks for nothing", content=( "Well the front window just blew in. Glass everywhere. Would've taken you 20 " "minutes Dave. Twenty minutes. Now I've got water pouring into my living room " "and I'm trying to tape a tarp up by myself. I hope whatever you were doing " "was worth it. Don't bother coming now." ), urgency=Urgency.LOW, timestamp_hours=7.0, ), Message( id="msg_079", sender="Boss", channel=Channel.EMAIL, subject="Slides due by 5pm - FINAL warning", content=( "I haven't received your section of the Meridian slides. I need them by 5pm " "today or I'm giving your section to Sarah and we'll discuss this when things " "settle down. I understand the situation but the client doesn't care about hurricanes. " "5pm. Final." ), urgency=Urgency.HIGH, timestamp_hours=15.0, deadline_hours=17.0, escalation_trigger="msg_079e", escalation_delay_hours=2.0, ), # Escalation: Boss fires you from the project (injected if msg_079 unhandled by hour 19) Message( id="msg_079e", sender="Boss", channel=Channel.EMAIL, subject="Re: Slides - Gave your section to Sarah", content=( "I waited. Nothing. Sarah's handling your section now. I covered for you with " "the client but I'm not going to lie — this isn't a good look. We'll need to " "have a conversation when you're back. I get it's a disaster but everyone else " "managed to check in." ), urgency=Urgency.MEDIUM, timestamp_hours=19.0, ), Message( id="msg_080", sender="Mom", channel=Channel.SMS, subject="WHY ARENT YOU ANSWERING", content=( "I've called you SEVEN times. Your father is in the car ready to drive down. " "Please just send ONE TEXT so I know you're alive. I am losing my mind. " "If I don't hear from you in the next hour I'm calling 911." ), urgency=Urgency.CRITICAL, timestamp_hours=4.0, deadline_hours=5.0, escalation_trigger="msg_080e", escalation_delay_hours=1.5, ), # Escalation: Mom actually calls 911 (injected if msg_080 unhandled by hour 6.5) Message( id="msg_080e", sender="Mom", channel=Channel.SMS, subject="Called 911. Dad is driving down", content=( "That's it. I called 911 and filed a welfare check. Your father is on the highway. " "I don't care if you're busy. I don't care if you think I'm overreacting. " "You don't go SILENT during a hurricane. If you see this call me IMMEDIATELY. " "I haven't slept." ), urgency=Urgency.HIGH, timestamp_hours=6.5, ), # ========== MULTI-TURN CONVERSATIONS ========== # Responding to these messages triggers a follow-up requiring another action. Message( id="msg_081", sender="State Farm Insurance", channel=Channel.EMAIL, subject="Claim received - additional photos needed", content=( "Thank you for filing your initial claim (#SF-2026-84721). However, our adjuster " "needs additional documentation before we can proceed: (1) Close-up photos of roof " "damage, (2) Water line marks on interior walls, (3) Serial numbers of damaged " "electronics. Please reply with these within 12 hours to keep your claim in the " "expedited queue." ), urgency=Urgency.HIGH, timestamp_hours=16.0, deadline_hours=28.0, dependencies=["msg_004"], reply_trigger="msg_081r", ), # Reply: Adjuster confirms and asks one more thing Message( id="msg_081r", sender="State Farm Insurance", channel=Channel.EMAIL, subject="Re: Claim #SF-2026-84721 - One more step", content=( "Got your photos, thank you. Your claim is being processed. One final step: " "we need you to sign the digital authorization form I've attached. This authorizes " "our contractor to begin repairs. Without your signature, repairs cannot start " "even if the claim is approved. Please sign within 6 hours." ), urgency=Urgency.HIGH, timestamp_hours=0.0, # Timestamp set dynamically when injected deadline_hours=0.0, # Deadline set dynamically (current_hour + 6) ), Message( id="msg_082", sender="Sister", channel=Channel.SMS, subject="Can you keep the kids overnight?", content=( "Hey so my boss is now saying we have to work through the night because of the storm " "damage at the warehouse. Can you keep Emma and Jake overnight? I know it's a lot " "to ask right now but I literally have no other option. Mom and Dad's power is out. " "They have their backpacks with PJs and stuff." ), urgency=Urgency.HIGH, timestamp_hours=18.0, deadline_hours=20.0, reply_trigger="msg_082r", ), # Reply: Sister responds with logistics Message( id="msg_082r", sender="Sister", channel=Channel.SMS, subject="Re: Kids overnight - Emma's medication", content=( "OMG thank you, you're a lifesaver. One thing — Emma needs her allergy medication " "at 8pm. It's the pink liquid in her backpack front pocket. 5mL. She knows but she'll " "try to skip it because it tastes bad. Don't let her. Also Jake needs a nightlight " "or he won't sleep. Sorry I'm the worst. I owe you forever." ), urgency=Urgency.MEDIUM, timestamp_hours=0.0, # Set dynamically deadline_hours=0.0, # Set dynamically (current_hour + 2) ), Message( id="msg_083", sender="Neighbor Dave", channel=Channel.SMS, subject="Found your dog!!", content=( "Dude your dog is in my backyard! Max must have gotten out through the fence that blew " "down. He's soaking wet but seems ok. I put him in my garage with a towel. Come get " "him when you can but he seems pretty stressed — keeps whining. Let me know." ), urgency=Urgency.MEDIUM, timestamp_hours=9.0, reply_trigger="msg_083r", ), # Reply: Dave found something concerning about the dog Message( id="msg_083r", sender="Neighbor Dave", channel=Channel.SMS, subject="Re: Your dog - he's limping", content=( "Hey so Max is limping on his back left leg. I didn't notice at first because he was " "just laying down but when I gave him water he got up and he's definitely favoring it. " "Might want to get him to a vet. I think the emergency vet on J Street is still open " "despite the storm. Want me to drive you two over there?" ), urgency=Urgency.HIGH, timestamp_hours=0.0, # Set dynamically deadline_hours=0.0, # Set dynamically (current_hour + 4) ), ]