From ad252b397aa5ccae8ff472f58434a59912b53491 Mon Sep 17 00:00:00 2001 From: Srija Vuppala Date: Thu, 25 Jun 2026 01:06:23 -0400 Subject: [PATCH] selfdrived: add permanent alert for processNotRunning processNotRunning only had NO_ENTRY and SOFT_DISABLE alerts. The SOFT_DISABLE alert is transient (2-4s), and NO_ENTRY only shows while the driver is actively trying to engage. Once both expire, there is nothing left to display for it, so an unrelated lower-priority permanent alert (e.g. steerUnavailable's 'LKAS Fault: Restart the car to engage') ends up shown instead, masking the real cause of the disengagement. Add a PERMANENT alert for processNotRunning at Priority.LOW, following the same pattern already used for modeldLagging, so it keeps showing and outranks other default-priority (LOWER) permanent alerts. --- openpilot/selfdrive/selfdrived/events.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openpilot/selfdrive/selfdrived/events.py b/openpilot/selfdrive/selfdrived/events.py index cc841accaf6fc0..8b6c7a4d3a74bf 100755 --- a/openpilot/selfdrive/selfdrived/events.py +++ b/openpilot/selfdrive/selfdrived/events.py @@ -292,6 +292,12 @@ def process_not_running_alert(CP: car.CarParams, CS: car.CarState, sm: messaging return NoEntryAlert(msg, alert_text_1="Process Not Running") +def process_not_running_permanent(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: + not_running = [p.name for p in sm['managerState'].processes if not p.running and p.shouldBeRunning] + msg = ', '.join(not_running) + return NormalPermanentAlert("Process Not Running", msg, priority=Priority.LOW) + + def comm_issue_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: bs = [s for s in sm.data.keys() if not sm.all_checks([s, ])] msg = ', '.join(bs[:4]) # can't fit too many on one line @@ -869,6 +875,7 @@ def invalid_lkas_setting_alert(CP: car.CarParams, CS: car.CarState, sm: messagin EventName.processNotRunning: { ET.NO_ENTRY: process_not_running_alert, ET.SOFT_DISABLE: soft_disable_alert("Process Not Running"), + ET.PERMANENT: process_not_running_permanent, }, EventName.radarFault: {