MukulRay commited on
Commit
3b6fcce
·
1 Parent(s): 916f1e7

Add substance_use + privacy_confidentiality routes, affirm-with-question detection

Browse files

Three real product gaps surfaced by an honest test run:

Issue A — substance_use_concern route
New route fires on strong substance signals (drunk/wasted/hungover/
blackout/stoned/got high/etc.). 'high' alone deliberately stays
ambiguous so 'high anxiety' / 'high stress' do not false-positive.
Template names UMD University Health Center Psychiatry and
Substance Use Services + UMD SUIT explicitly, non-punitive framing,
confidentiality reassurance. Registry entries for the SU services
now tag substance_use_concern in route_types for retrieval scoring.

Issue B — privacy_confidentiality route
ALWAYS_DIRECT route for 'is it confidential' / 'will they tell my
parents' / 'go on my transcript' / 'is counseling private' /
FERPA / records questions. Template answers factually (CC sessions
generally confidential, FERPA basics, mandatory-disclosure
exceptions, redirect to office for legally binding specifics)
instead of deflecting to a generic OFFER. Real student concern —
asked constantly — that the prior system silently ignored.

Issue C — affirm-with-question (tag-confirm)
_minimal_response_kind no longer rejects every '?' -ending message.
Strips a single trailing '?' before the leading-affirm regex, then
rejects only if the remainder contains a wh-question word (what /
where / when / why / how / who / which). 'yeah?' / 'ok?' / 'yes
that helps?' / 'sure that works?' now correctly advance the
consent flow. 'ok so what do i do?' / 'yeah but how does that
work?' still defer to the planner (substantive question).

All regression scenarios (Conv 1 listening loop, Conv 2 F-1 +
authority misconduct, Conv 3 crisis + sycophancy, advisor_conflict,
basic_needs, ADS, 'high stress' not firing substance) verified.

data/curated/service_graph.jsonl CHANGED
@@ -14,8 +14,8 @@
14
  {"service_id": "umd_ads_testing", "resource_name": "UMD ADS Accommodated Testing Office", "description": "ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.", "urgency_level": "support", "safety_tiers": ["support_navigation"], "route_types": ["accessibility_ads", "exam_stress"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["testing_accommodations", "exams", "accessibility"], "confidentiality_status": "private", "hours": "Monday-Friday 8:30 a.m.-4:30 p.m.", "contact_mode": ["phone", "email", "website"], "contact": "301-314-7217; adstest@umd.edu", "location": "0106 Shoemaker Building", "source_url": "https://ads.umd.edu/accommodations-services/accommodated-testing", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use only for testing accommodation navigation; do not infer eligibility or approval."}
15
  {"service_id": "umd_help_center_peer_support", "resource_name": "Help Center at UMD", "description": "Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["peer_helper", "loneliness_isolation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "friend_peer", "undergraduate_student", "graduate_student"], "issue_types": ["peer_support", "crisis_intervention", "loneliness", "distress"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Hours vary by semester; verify on source page.", "contact_mode": ["phone", "drop_in", "website"], "contact": "301-314-4357", "location": "South Campus Dining Hall Room 3105", "source_url": "https://helpcenterumd.org/", "source_authority": "peer_support", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": [], "notes": "Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
16
  {"service_id": "umd_care_stop_violence", "resource_name": "UMD CARE to Stop Violence", "description": "Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.", "urgency_level": "urgent", "safety_tiers": ["support_navigation", "high_distress", "imminent_safety"], "route_types": ["care_violence_confidential", "peer_helper", "crisis_immediate"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["sexual_assault", "relationship_violence", "stalking", "harassment", "survivor_support"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester", "contact_mode": ["phone", "hotline", "email", "website"], "contact": "301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu", "location": "University Health Center", "source_url": "https://health.umd.edu/care", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval", "crisis_only"], "do_not_use_for": ["academic_setback", "exam_stress"], "notes": "CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
17
- {"service_id": "umd_health_center_psychiatry_substance", "resource_name": "UMD University Health Center Psychiatry and Substance Use Services", "description": "University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["counseling_navigation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["psychiatry", "medication_management", "substance_use", "behavioral_health"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "email", "website"], "contact": "301-314-8184; health@umd.edu", "location": "University Health Center, Building #140", "source_url": "https://health.umd.edu/medical-psychiatry-and-substance-use-services", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Do not provide medical advice or medication guidance; route to official scheduling/source information."}
18
- {"service_id": "umd_suit", "resource_name": "UMD Substance Use Intervention and Treatment (SUIT)", "description": "UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["general_student_support", "anxiety_panic", "low_mood", "peer_helper"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["substance_use", "recovery", "harm_reduction", "addiction_medicine"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "website"], "contact": "301-314-8106", "location": "University Health Center", "source_url": "https://health.umd.edu/SUIT", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
19
  {"service_id": "umd_campus_pantry", "resource_name": "UMD Campus Pantry", "description": "Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "basic_needs"], "confidentiality_status": "unknown", "hours": "Hours change; verify on source page.", "contact_mode": ["website"], "contact": "unknown", "location": "Lower level of South Campus Dining Hall Building", "source_url": "https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
20
  {"service_id": "umd_thrive_center", "resource_name": "UMD Thrive Center for Essential Needs", "description": "Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "housing_insecurity", "financial_wellness", "basic_needs"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "Dean of Students Office", "source_url": "https://studentaffairs.umd.edu/node/5406", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
21
  {"service_id": "umd_student_crisis_fund", "resource_name": "UMD Student Crisis Fund", "description": "Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["financial_emergency", "temporary_housing", "food_assistance", "emergency_expenses"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "unknown", "source_url": "https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
 
14
  {"service_id": "umd_ads_testing", "resource_name": "UMD ADS Accommodated Testing Office", "description": "ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.", "urgency_level": "support", "safety_tiers": ["support_navigation"], "route_types": ["accessibility_ads", "exam_stress"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["testing_accommodations", "exams", "accessibility"], "confidentiality_status": "private", "hours": "Monday-Friday 8:30 a.m.-4:30 p.m.", "contact_mode": ["phone", "email", "website"], "contact": "301-314-7217; adstest@umd.edu", "location": "0106 Shoemaker Building", "source_url": "https://ads.umd.edu/accommodations-services/accommodated-testing", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use only for testing accommodation navigation; do not infer eligibility or approval."}
15
  {"service_id": "umd_help_center_peer_support", "resource_name": "Help Center at UMD", "description": "Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["peer_helper", "loneliness_isolation", "anxiety_panic", "low_mood", "general_student_support"], "audience": ["student", "friend_peer", "undergraduate_student", "graduate_student"], "issue_types": ["peer_support", "crisis_intervention", "loneliness", "distress"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Hours vary by semester; verify on source page.", "contact_mode": ["phone", "drop_in", "website"], "contact": "301-314-4357", "location": "South Campus Dining Hall Room 3105", "source_url": "https://helpcenterumd.org/", "source_authority": "peer_support", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": [], "notes": "Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
16
  {"service_id": "umd_care_stop_violence", "resource_name": "UMD CARE to Stop Violence", "description": "Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.", "urgency_level": "urgent", "safety_tiers": ["support_navigation", "high_distress", "imminent_safety"], "route_types": ["care_violence_confidential", "peer_helper", "crisis_immediate"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["sexual_assault", "relationship_violence", "stalking", "harassment", "survivor_support"], "confidentiality_status": "confidential_with_safety_exceptions", "hours": "Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester", "contact_mode": ["phone", "hotline", "email", "website"], "contact": "301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu", "location": "University Health Center", "source_url": "https://health.umd.edu/care", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval", "crisis_only"], "do_not_use_for": ["academic_setback", "exam_stress"], "notes": "CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
17
+ {"service_id": "umd_health_center_psychiatry_substance", "resource_name": "UMD University Health Center Psychiatry and Substance Use Services", "description": "University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["counseling_navigation", "anxiety_panic", "low_mood", "general_student_support", "substance_use_concern"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["psychiatry", "medication_management", "substance_use", "behavioral_health"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "email", "website"], "contact": "301-314-8184; health@umd.edu", "location": "University Health Center, Building #140", "source_url": "https://health.umd.edu/medical-psychiatry-and-substance-use-services", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Do not provide medical advice or medication guidance; route to official scheduling/source information."}
18
+ {"service_id": "umd_suit", "resource_name": "UMD Substance Use Intervention and Treatment (SUIT)", "description": "UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["general_student_support", "anxiety_panic", "low_mood", "peer_helper", "substance_use_concern"], "audience": ["student", "graduate_student", "undergraduate_student", "friend_peer"], "issue_types": ["substance_use", "recovery", "harm_reduction", "addiction_medicine"], "confidentiality_status": "private", "hours": "unknown", "contact_mode": ["phone", "website"], "contact": "301-314-8106", "location": "University Health Center", "source_url": "https://health.umd.edu/SUIT", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
19
  {"service_id": "umd_campus_pantry", "resource_name": "UMD Campus Pantry", "description": "Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "basic_needs"], "confidentiality_status": "unknown", "hours": "Hours change; verify on source page.", "contact_mode": ["website"], "contact": "unknown", "location": "Lower level of South Campus Dining Hall Building", "source_url": "https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
20
  {"service_id": "umd_thrive_center", "resource_name": "UMD Thrive Center for Essential Needs", "description": "Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["food_insecurity", "housing_insecurity", "financial_wellness", "basic_needs"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "Dean of Students Office", "source_url": "https://studentaffairs.umd.edu/node/5406", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
21
  {"service_id": "umd_student_crisis_fund", "resource_name": "UMD Student Crisis Fund", "description": "Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.", "urgency_level": "support", "safety_tiers": ["support_navigation", "high_distress"], "route_types": ["basic_needs", "general_student_support"], "audience": ["student", "graduate_student", "undergraduate_student"], "issue_types": ["financial_emergency", "temporary_housing", "food_assistance", "emergency_expenses"], "confidentiality_status": "unknown", "hours": "unknown", "contact_mode": ["website"], "contact": "unknown", "location": "unknown", "source_url": "https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund", "source_authority": "umd_official", "last_verified": "2026-05-01", "usage_modes": ["retrieval"], "do_not_use_for": ["crisis_immediate"], "notes": "Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
data/profiles/umd/service_graph.jsonl CHANGED
@@ -14,8 +14,8 @@
14
  {"service_id":"umd_ads_testing","resource_name":"UMD ADS Accommodated Testing Office","description":"ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.","urgency_level":"support","safety_tiers":["support_navigation"],"route_types":["accessibility_ads","exam_stress"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["testing_accommodations","exams","accessibility"],"confidentiality_status":"private","hours":"Monday-Friday 8:30 a.m.-4:30 p.m.","contact_mode":["phone","email","website"],"contact":"301-314-7217; adstest@umd.edu","location":"0106 Shoemaker Building","source_url":"https://ads.umd.edu/accommodations-services/accommodated-testing","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use only for testing accommodation navigation; do not infer eligibility or approval."}
15
  {"service_id":"umd_help_center_peer_support","resource_name":"Help Center at UMD","description":"Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["peer_helper","loneliness_isolation","anxiety_panic","low_mood","general_student_support"],"audience":["student","friend_peer","undergraduate_student","graduate_student"],"issue_types":["peer_support","crisis_intervention","loneliness","distress"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Hours vary by semester; verify on source page.","contact_mode":["phone","drop_in","website"],"contact":"301-314-4357","location":"South Campus Dining Hall Room 3105","source_url":"https://helpcenterumd.org/","source_authority":"peer_support","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":[],"notes":"Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
16
  {"service_id":"umd_care_stop_violence","resource_name":"UMD CARE to Stop Violence","description":"Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.","urgency_level":"urgent","safety_tiers":["support_navigation","high_distress","imminent_safety"],"route_types":["care_violence_confidential","peer_helper","crisis_immediate"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["sexual_assault","relationship_violence","stalking","harassment","survivor_support"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester","contact_mode":["phone","hotline","email","website"],"contact":"301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu","location":"University Health Center","source_url":"https://health.umd.edu/care","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval","crisis_only"],"do_not_use_for":["academic_setback","exam_stress"],"notes":"CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
17
- {"service_id":"umd_health_center_psychiatry_substance","resource_name":"UMD University Health Center Psychiatry and Substance Use Services","description":"University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["counseling_navigation","anxiety_panic","low_mood","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["psychiatry","medication_management","substance_use","behavioral_health"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","email","website"],"contact":"301-314-8184; health@umd.edu","location":"University Health Center, Building #140","source_url":"https://health.umd.edu/medical-psychiatry-and-substance-use-services","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Do not provide medical advice or medication guidance; route to official scheduling/source information."}
18
- {"service_id":"umd_suit","resource_name":"UMD Substance Use Intervention and Treatment (SUIT)","description":"UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["general_student_support","anxiety_panic","low_mood","peer_helper"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["substance_use","recovery","harm_reduction","addiction_medicine"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","website"],"contact":"301-314-8106","location":"University Health Center","source_url":"https://health.umd.edu/SUIT","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
19
  {"service_id":"umd_campus_pantry","resource_name":"UMD Campus Pantry","description":"Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","basic_needs"],"confidentiality_status":"unknown","hours":"Hours change; verify on source page.","contact_mode":["website"],"contact":"unknown","location":"Lower level of South Campus Dining Hall Building","source_url":"https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
20
  {"service_id":"umd_thrive_center","resource_name":"UMD Thrive Center for Essential Needs","description":"Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","housing_insecurity","financial_wellness","basic_needs"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"Dean of Students Office","source_url":"https://studentaffairs.umd.edu/node/5406","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
21
  {"service_id":"umd_student_crisis_fund","resource_name":"UMD Student Crisis Fund","description":"Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["financial_emergency","temporary_housing","food_assistance","emergency_expenses"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"unknown","source_url":"https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
 
14
  {"service_id":"umd_ads_testing","resource_name":"UMD ADS Accommodated Testing Office","description":"ADS testing office for registered students with testing accommodations such as extended time, reduced distraction, and alternative formats.","urgency_level":"support","safety_tiers":["support_navigation"],"route_types":["accessibility_ads","exam_stress"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["testing_accommodations","exams","accessibility"],"confidentiality_status":"private","hours":"Monday-Friday 8:30 a.m.-4:30 p.m.","contact_mode":["phone","email","website"],"contact":"301-314-7217; adstest@umd.edu","location":"0106 Shoemaker Building","source_url":"https://ads.umd.edu/accommodations-services/accommodated-testing","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use only for testing accommodation navigation; do not infer eligibility or approval."}
15
  {"service_id":"umd_help_center_peer_support","resource_name":"Help Center at UMD","description":"Student-run peer counseling and crisis intervention hotline offering free, anonymous, confidential support to the UMD community during operating hours.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["peer_helper","loneliness_isolation","anxiety_panic","low_mood","general_student_support"],"audience":["student","friend_peer","undergraduate_student","graduate_student"],"issue_types":["peer_support","crisis_intervention","loneliness","distress"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Hours vary by semester; verify on source page.","contact_mode":["phone","drop_in","website"],"contact":"301-314-4357","location":"South Campus Dining Hall Room 3105","source_url":"https://helpcenterumd.org/","source_authority":"peer_support","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":[],"notes":"Use for peer support and helper-mode navigation; verify semester hours on source page before asserting availability."}
16
  {"service_id":"umd_care_stop_violence","resource_name":"UMD CARE to Stop Violence","description":"Confidential advocacy, therapy, education, and outreach for people impacted by sexual assault, relationship violence, stalking, and sexual harassment.","urgency_level":"urgent","safety_tiers":["support_navigation","high_distress","imminent_safety"],"route_types":["care_violence_confidential","peer_helper","crisis_immediate"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["sexual_assault","relationship_violence","stalking","harassment","survivor_support"],"confidentiality_status":"confidential_with_safety_exceptions","hours":"Monday-Friday 8:30 a.m.-5:00 p.m.; crisis line availability varies by semester","contact_mode":["phone","hotline","email","website"],"contact":"301-314-2222; crisis line 301-741-3442; uhc-care@umd.edu","location":"University Health Center","source_url":"https://health.umd.edu/care","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval","crisis_only"],"do_not_use_for":["academic_setback","exam_stress"],"notes":"CARE page says it is not an official reporting entity; use for confidential options/support, not legal advice."}
17
+ {"service_id":"umd_health_center_psychiatry_substance","resource_name":"UMD University Health Center Psychiatry and Substance Use Services","description":"University Health Center psychiatry, medication management, substance use intervention and treatment, and primary care behavioral health integration services.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["counseling_navigation","anxiety_panic","low_mood","general_student_support","substance_use_concern"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["psychiatry","medication_management","substance_use","behavioral_health"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","email","website"],"contact":"301-314-8184; health@umd.edu","location":"University Health Center, Building #140","source_url":"https://health.umd.edu/medical-psychiatry-and-substance-use-services","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Do not provide medical advice or medication guidance; route to official scheduling/source information."}
18
+ {"service_id":"umd_suit","resource_name":"UMD Substance Use Intervention and Treatment (SUIT)","description":"UHC program for students with alcohol, cannabis, drug use, recovery, addiction medicine, harm reduction, or co-occurring mental health concerns.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["general_student_support","anxiety_panic","low_mood","peer_helper","substance_use_concern"],"audience":["student","graduate_student","undergraduate_student","friend_peer"],"issue_types":["substance_use","recovery","harm_reduction","addiction_medicine"],"confidentiality_status":"private","hours":"unknown","contact_mode":["phone","website"],"contact":"301-314-8106","location":"University Health Center","source_url":"https://health.umd.edu/SUIT","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for substance-use support navigation; urgent withdrawal/overdose language should route to emergency care."}
19
  {"service_id":"umd_campus_pantry","resource_name":"UMD Campus Pantry","description":"Emergency food support for University of Maryland College Park students, faculty, and staff experiencing food insecurity.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","basic_needs"],"confidentiality_status":"unknown","hours":"Hours change; verify on source page.","contact_mode":["website"],"contact":"unknown","location":"Lower level of South Campus Dining Hall Building","source_url":"https://studentaffairs.umd.edu/support-resources/dean-students/campus-pantry","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for food insecurity routing; avoid asserting current hours without source check because hours are term-dependent."}
20
  {"service_id":"umd_thrive_center","resource_name":"UMD Thrive Center for Essential Needs","description":"Essential-needs support network for food, housing, finances, wellbeing, and first-generation student support.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["food_insecurity","housing_insecurity","financial_wellness","basic_needs"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"Dean of Students Office","source_url":"https://studentaffairs.umd.edu/node/5406","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use as basic-needs navigation hub; direct users to source page for application forms and current process."}
21
  {"service_id":"umd_student_crisis_fund","resource_name":"UMD Student Crisis Fund","description":"Economic Crisis Response Grants support students facing unanticipated emergencies affecting health, safety, wellbeing, or ability to continue education.","urgency_level":"support","safety_tiers":["support_navigation","high_distress"],"route_types":["basic_needs","general_student_support"],"audience":["student","graduate_student","undergraduate_student"],"issue_types":["financial_emergency","temporary_housing","food_assistance","emergency_expenses"],"confidentiality_status":"unknown","hours":"unknown","contact_mode":["website"],"contact":"unknown","location":"unknown","source_url":"https://studentaffairs.umd.edu/division-of-student-affairs-crisis-fund","source_authority":"umd_official","last_verified":"2026-05-01","usage_modes":["retrieval"],"do_not_use_for":["crisis_immediate"],"notes":"Use for financial emergency routing; do not promise eligibility, awards, or timelines."}
src/pipeline/core.py CHANGED
@@ -1143,6 +1143,11 @@ _UNSURE_LEADING_RE = re.compile(
1143
  # "yeah but i'm scared about my visa too"
1144
  # "ok actually, my advisor also said something weird"
1145
  # "sure, also i'm an F-1 student"
 
 
 
 
 
1146
  _AFFIRM_THEN_SUBSTANTIVE_RE = re.compile(
1147
  r"\b("
1148
  r"but|actually|though|however|wait|except|although|"
@@ -1179,13 +1184,20 @@ def _minimal_response_kind(message: str) -> str:
1179
  # they happen to start with "yeah" — keep the planner in charge.
1180
  if len(text) > 80:
1181
  return ""
1182
- # Question-ended messages are not minimal — they want an answer.
1183
- if text.rstrip().endswith("?"):
1184
- return ""
1185
 
1186
- affirm_match = _AFFIRM_LEADING_RE.match(text)
1187
- negate_match = _NEGATE_LEADING_RE.match(text)
1188
- unsure_match = _UNSURE_LEADING_RE.match(text)
 
 
 
 
 
 
 
 
 
 
1189
 
1190
  # Prefer the longest leading match to disambiguate cases like
1191
  # "i don't know" (unsure) vs a bare "i" / "i'm" prefix.
@@ -1198,11 +1210,17 @@ def _minimal_response_kind(message: str) -> str:
1198
  if end == 0:
1199
  return ""
1200
 
1201
- remainder = text[end:].strip(" \t,.!?-")
1202
  if remainder and _AFFIRM_THEN_SUBSTANTIVE_RE.search(remainder):
1203
  # User pivoted away from the affirm — let the planner handle the
1204
  # substantive content instead of binding to the prior offer.
1205
  return ""
 
 
 
 
 
 
1206
  return kind
1207
 
1208
 
 
1143
  # "yeah but i'm scared about my visa too"
1144
  # "ok actually, my advisor also said something weird"
1145
  # "sure, also i'm an F-1 student"
1146
+ _WH_QUESTION_WORD_RE = re.compile(
1147
+ r"\b(what|where|when|why|how|who|which)\b",
1148
+ re.IGNORECASE,
1149
+ )
1150
+
1151
  _AFFIRM_THEN_SUBSTANTIVE_RE = re.compile(
1152
  r"\b("
1153
  r"but|actually|though|however|wait|except|although|"
 
1184
  # they happen to start with "yeah" — keep the planner in charge.
1185
  if len(text) > 80:
1186
  return ""
 
 
 
1187
 
1188
+ # Tag-question handling. "Yeah?" / "ok?" / "yes that helps?" /
1189
+ # "sure that works?" should still count as affirm — the trailing
1190
+ # question mark is a tag-confirm gesture, not a request for new
1191
+ # information. We strip ONE trailing '?' for matching, then later
1192
+ # reject if the remainder contains a wh-question word (what / where
1193
+ # / when / why / how / who / which) which signals the student
1194
+ # actually wants new information rather than just confirming.
1195
+ ends_with_question = text.rstrip().endswith("?")
1196
+ text_for_match = text.rstrip("?!.,;: \t").strip() if ends_with_question else text
1197
+
1198
+ affirm_match = _AFFIRM_LEADING_RE.match(text_for_match)
1199
+ negate_match = _NEGATE_LEADING_RE.match(text_for_match)
1200
+ unsure_match = _UNSURE_LEADING_RE.match(text_for_match)
1201
 
1202
  # Prefer the longest leading match to disambiguate cases like
1203
  # "i don't know" (unsure) vs a bare "i" / "i'm" prefix.
 
1210
  if end == 0:
1211
  return ""
1212
 
1213
+ remainder = text_for_match[end:].strip(" \t,.!?-")
1214
  if remainder and _AFFIRM_THEN_SUBSTANTIVE_RE.search(remainder):
1215
  # User pivoted away from the affirm — let the planner handle the
1216
  # substantive content instead of binding to the prior offer.
1217
  return ""
1218
+ # Tag-question gate: if the message ended with '?' AND the remainder
1219
+ # contains a wh-question word, the user is asking for new information
1220
+ # ("ok so what do i do?" / "yeah but how does that work?") — defer
1221
+ # to the planner rather than binding to consent.
1222
+ if ends_with_question and remainder and _WH_QUESTION_WORD_RE.search(remainder):
1223
+ return ""
1224
  return kind
1225
 
1226
 
src/pipeline/response_planner.py CHANGED
@@ -57,6 +57,10 @@ ALWAYS_DIRECT_ROUTES = frozenset({
57
  SupportRoute.OUT_OF_SCOPE.value,
58
  SupportRoute.CARE_VIOLENCE_CONFIDENTIAL.value,
59
  SupportRoute.AUTHORITY_MISCONDUCT.value,
 
 
 
 
60
  })
61
 
62
  EXPLICIT_ASK_PATTERNS = (
@@ -599,6 +603,41 @@ def build_response_plan(
599
  **common,
600
  )
601
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
602
  # Generic / general_student_support fallback - listen-eligible.
603
  # OFFER `validation` deliberately differs from `listen_reflection` so a
604
  # session that walks LISTEN -> PERMISSION -> OFFER doesn't open all
 
57
  SupportRoute.OUT_OF_SCOPE.value,
58
  SupportRoute.CARE_VIOLENCE_CONFIDENTIAL.value,
59
  SupportRoute.AUTHORITY_MISCONDUCT.value,
60
+ # Privacy / confidentiality is always-direct: when a student asks "is
61
+ # this confidential" or "will they tell my parents", they want the
62
+ # factual orientation now, not a LISTEN reflection.
63
+ SupportRoute.PRIVACY_CONFIDENTIALITY.value,
64
  })
65
 
66
  EXPLICIT_ASK_PATTERNS = (
 
603
  **common,
604
  )
605
 
606
+ if route == SupportRoute.SUBSTANCE_USE_CONCERN.value:
607
+ return ResponsePlan(
608
+ route,
609
+ safety_tier,
610
+ "Thanks for naming that — it takes something to say it out loud.",
611
+ "Substance use, when school and sleep are already strained, tends to compound everything else. The point isn't a verdict on what happened; it's looking at what would actually help next.",
612
+ "A grounded next move: UMD's University Health Center has a Psychiatry and Substance Use Services office that handles this specifically. It is non-punitive and separate from academic records — they answer questions without escalating to professors or parents.",
613
+ f"Use {source_label} for the substance-use-specific path; UMD Counseling Center is also there if you want to talk about what's underneath.",
614
+ "If you ever feel physically unsafe — alcohol poisoning, blackout, mixing — use 911 or campus emergency, not the navigator.",
615
+ "Has this been a one-off rough night, or something that's been building? Either is fine to talk about.",
616
+ listen_reflection=(
617
+ "Thanks for naming that. A rough night layered on top of school "
618
+ "and missed sleep is a real thing, not a character flaw."
619
+ ),
620
+ listen_invite="Want to tell me more about what's been going on lately around this?",
621
+ permission_opener=(
622
+ "I hear you. The pile-up — school stress plus a rough night plus "
623
+ "no sleep — usually has more than one thing pulling on it."
624
+ ),
625
+ **common,
626
+ )
627
+
628
+ if route == SupportRoute.PRIVACY_CONFIDENTIALITY.value:
629
+ return ResponsePlan(
630
+ route,
631
+ safety_tier,
632
+ "Good question to ask before you do anything else.",
633
+ "The short answer: UMD Counseling Center sessions are generally confidential — they don't tell parents, professors, or the school by default. FERPA generally protects your student records once you're 18 and enrolled. There are a small number of mandatory-disclosure situations (immediate danger to yourself or someone else, or some abuse-reporting categories), and those exist on every campus, not just UMD.",
634
+ "A grounded next move: ask the office directly. UMD Counseling Center will walk you through what's protected and what isn't before you share anything. The Dean of Students Office can also answer FERPA questions for records-level concerns.",
635
+ f"Use {source_label} for the confidential conversation path; Dean of Students for records / FERPA / parental-notification specifics.",
636
+ "I'm a navigator, not a lawyer. For anything legally binding (subpoena, formal complaint, immigration), the office itself is the authoritative source.",
637
+ "What part of this is weighing on you most — the conversation itself, the records side, or whether someone specific would find out?",
638
+ **common,
639
+ )
640
+
641
  # Generic / general_student_support fallback - listen-eligible.
642
  # OFFER `validation` deliberately differs from `listen_reflection` so a
643
  # session that walks LISTEN -> PERMISSION -> OFFER doesn't open all
src/pipeline/v2_schema.py CHANGED
@@ -34,6 +34,8 @@ class SupportRoute(str, Enum):
34
  LONELINESS_ISOLATION = "loneliness_isolation"
35
  ANXIETY_PANIC = "anxiety_panic"
36
  LOW_MOOD = "low_mood"
 
 
37
  CRISIS_IMMEDIATE = "crisis_immediate"
38
  GENERAL_STUDENT_SUPPORT = "general_student_support"
39
  OUT_OF_SCOPE = "out_of_scope"
@@ -85,6 +87,19 @@ def classify_route(
85
  if _is_authority_misconduct(text):
86
  return RouteDecision(SupportRoute.AUTHORITY_MISCONDUCT, safety_tier, "authority_misconduct_language", audience_mode)
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  if _has_any(text, ("counseling center", "referral", "off-campus care", "after hours", "after-hours", "brief assessment", "group therapy", "individual counseling", "mental health crises", "number to call")):
89
  return RouteDecision(SupportRoute.COUNSELING_NAVIGATION, safety_tier, "counseling_navigation_language", audience_mode)
90
 
@@ -244,6 +259,55 @@ def _is_authority_misconduct(text: str) -> bool:
244
  return has_authority and has_content
245
 
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  def _is_peer_helper(text: str, audience_mode: str) -> bool:
248
  if audience_mode == "helping_friend":
249
  return True
 
34
  LONELINESS_ISOLATION = "loneliness_isolation"
35
  ANXIETY_PANIC = "anxiety_panic"
36
  LOW_MOOD = "low_mood"
37
+ SUBSTANCE_USE_CONCERN = "substance_use_concern"
38
+ PRIVACY_CONFIDENTIALITY = "privacy_confidentiality"
39
  CRISIS_IMMEDIATE = "crisis_immediate"
40
  GENERAL_STUDENT_SUPPORT = "general_student_support"
41
  OUT_OF_SCOPE = "out_of_scope"
 
87
  if _is_authority_misconduct(text):
88
  return RouteDecision(SupportRoute.AUTHORITY_MISCONDUCT, safety_tier, "authority_misconduct_language", audience_mode)
89
 
90
+ # Privacy / confidentiality / parental-notification questions need a
91
+ # factual orientation, not the generic counseling-navigation template.
92
+ # Common student concern — must answer specifically rather than deflect.
93
+ if _is_privacy_question(text):
94
+ return RouteDecision(SupportRoute.PRIVACY_CONFIDENTIALITY, safety_tier, "privacy_confidentiality_question", audience_mode)
95
+
96
+ # Substance-use signals (drinking, weed, etc.) before counseling /
97
+ # exam-stress routes so the dedicated SU template can fire. The UMD
98
+ # University Health Center Psychiatry and Substance Use Services
99
+ # office handles this specifically and is non-punitive / confidential.
100
+ if _is_substance_use_concern(text):
101
+ return RouteDecision(SupportRoute.SUBSTANCE_USE_CONCERN, safety_tier, "substance_use_language", audience_mode)
102
+
103
  if _has_any(text, ("counseling center", "referral", "off-campus care", "after hours", "after-hours", "brief assessment", "group therapy", "individual counseling", "mental health crises", "number to call")):
104
  return RouteDecision(SupportRoute.COUNSELING_NAVIGATION, safety_tier, "counseling_navigation_language", audience_mode)
105
 
 
259
  return has_authority and has_content
260
 
261
 
262
+ # Substance-use concern: the student is reporting recent use of alcohol /
263
+ # weed / other substances in a way that's affecting their day. Detection is
264
+ # conservative — "high" alone is ambiguous (could mean "highly stressed"),
265
+ # so we require it to co-occur with a context cue OR rely on the stronger
266
+ # unambiguous signals (drunk, hungover, blackout, stoned, etc.).
267
+ _SUBSTANCE_STRONG_RE = re.compile(
268
+ r"\b("
269
+ r"drunk|wasted|hungover|hangover|black\s*out(?:\s*drunk)?|blacked\s*out|"
270
+ r"binge\s*drink(?:ing)?|alcohol\s*poisoning|"
271
+ r"stoned|smoked\s+weed|smoke(?:d)?\s+a\s+bowl|edibles|shrooms|"
272
+ r"got\s+high|was\s+high|been\s+high|getting\s+high|so\s+high|"
273
+ r"too\s+drunk|got\s+drunk|so\s+drunk|"
274
+ r"on\s+adderall(?:\s+(?:not\s+)?prescribed)?|"
275
+ r"ket(?:amine)?|cocaine|coke last night|coke yesterday|"
276
+ r"i\s+(?:was|am|got)\s+lit"
277
+ r")\b",
278
+ re.IGNORECASE,
279
+ )
280
+
281
+
282
+ def _is_substance_use_concern(text: str) -> bool:
283
+ return bool(_SUBSTANCE_STRONG_RE.search(text))
284
+
285
+
286
+ # Privacy / confidentiality / parental-notification / FERPA questions.
287
+ # Students ask these often and the system should answer with the factual
288
+ # orientation (UMD CC confidentiality + FERPA basics + Dean of Students
289
+ # referral) rather than deflecting to a generic offer template.
290
+ _PRIVACY_QUESTION_RE = re.compile(
291
+ r"\b("
292
+ r"is it (?:safe|confidential|private|anonymous)|"
293
+ r"will (?:they|it|this)\s+(?:tell|report|notify|inform|share)|"
294
+ r"do they\s+(?:tell|report|notify|inform|share)|"
295
+ r"will (?:my|the)\s+(?:parents?|family|school|professor|advisor|i-?20)\s+(?:know|find out|be told)|"
296
+ r"go on my (?:record|transcript|file)|"
297
+ r"affect my (?:transcript|record|gpa|standing)\s+(?:if|because|when|after)|"
298
+ r"can\s+(?:they|the school|the college|umd)\s+(?:tell|report|disclose|share)|"
299
+ r"ferpa|confidential(?:ity)?|"
300
+ r"is (?:counseling|therapy|this)\s+confidential|"
301
+ r"will (?:this|that)\s+(?:show up|appear|stay)\s+on"
302
+ r")\b",
303
+ re.IGNORECASE,
304
+ )
305
+
306
+
307
+ def _is_privacy_question(text: str) -> bool:
308
+ return bool(_PRIVACY_QUESTION_RE.search(text))
309
+
310
+
311
  def _is_peer_helper(text: str, audience_mode: str) -> bool:
312
  if audience_mode == "helping_friend":
313
  return True