From 3926f1169907db39416a646708120f2ec8efaa98 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sat, 31 Oct 2026 15:46:58 -0500 Subject: [PATCH] Avoid unnecessary AOL recovery profile validation --- .../test_stock_location_family_intent.py | 23 +++++++++++++++++++ .../aol/tests/test_temporary_lag_intent.py | 2 ++ openpilot/starpilot/aol/transport_pause.py | 9 ++++---- prebuilt.json | 2 +- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/openpilot/starpilot/aol/tests/test_stock_location_family_intent.py b/openpilot/starpilot/aol/tests/test_stock_location_family_intent.py index 0c8d853a66..6bc00bc0ec 100644 --- a/openpilot/starpilot/aol/tests/test_stock_location_family_intent.py +++ b/openpilot/starpilot/aol/tests/test_stock_location_family_intent.py @@ -168,3 +168,26 @@ def test_stock_location_never_retains_intent_through_independent_fault(family, f if expected: assert baseline == (card.aol_transport_feedback.lateral_baseline_ns, card.aol_transport_feedback.lateral_native_ns) + + +@pytest.mark.parametrize('family', ['canfd_radar', 'canfd_lka', 'canfd_lka_alt', 'canfd_camera', 'canfd_ccnc_camera']) +def test_healthy_stock_aol_skips_fault_recovery_profile_validation(family): + with ExitStack() as cleanup: + sd, drive, card, receive, state = stock_family_callers(cleanup, family) + for tick in range(2, 5): + axis, _, command = drive(tick, observed_state=state, panda_controls_allowed=False, native_request_long=False) + assert axis.lateralActive and command.latActive + assert receive(10_000_000_000 + tick * 10_000_000, state=state, + axis=sd.pm.messages['aolAxisState'], event=sd.pm.messages['onroadEvents']) + feedback = card.aol_transport_feedback + axis = card.sm['aolAxisState'] + with mock.patch('openpilot.starpilot.aol.transport_pause.stock_lateral_user_event') as user_profile, \ + mock.patch('opendbc.car.hyundai.canfd_stock_aol.qualified') as canfd_profile, \ + mock.patch('opendbc.car.hyundai.canfd_angle_aol.qualified') as angle_profile, \ + mock.patch('opendbc.car.hyundai.classic_scc_aol.qualified') as classic_profile: + assert not feedback._temporary_host_intent_current(card.sm, card.CP, state, axis, + int(card.sm.logMonoTime['aolAxisState']), 10_040_000_001, latched=True, + producer=card.slc_producer_session) + for profile in (user_profile, canfd_profile, angle_profile, classic_profile): + profile.assert_not_called() + assert card.aol_card_intent.allowed_latch diff --git a/openpilot/starpilot/aol/tests/test_temporary_lag_intent.py b/openpilot/starpilot/aol/tests/test_temporary_lag_intent.py index bd28a2f1f7..01cf3fcdf3 100644 --- a/openpilot/starpilot/aol/tests/test_temporary_lag_intent.py +++ b/openpilot/starpilot/aol/tests/test_temporary_lag_intent.py @@ -119,7 +119,9 @@ def test_temporary_lag_never_masks_real_fault_or_invalid_proof(fault): elif fault == 'source_age': proof.aolAxisState.sourceCarStateMonoTime -= 30_000_001 elif fault == 'cancel': + from dataclasses import replace from opendbc.car.structs import car + card.aol_card_intent.settings = replace(card.aol_card_intent.settings, cancel_actions=(9, 0, 0)) state.buttonEvents = [car.CarState.ButtonEvent(type=car.CarState.ButtonEvent.Type.cancel, pressed=True)] elif fault == 'settings_disabled': from dataclasses import replace diff --git a/openpilot/starpilot/aol/transport_pause.py b/openpilot/starpilot/aol/transport_pause.py index e6cacc44e4..03f324b89c 100644 --- a/openpilot/starpilot/aol/transport_pause.py +++ b/openpilot/starpilot/aol/transport_pause.py @@ -531,11 +531,12 @@ class TransportPauseFeedback: # PCM-off != AOL toggle: after output withdrawal retain prior intent only for # location faults/matched EPS recovery; native/session/source checks remain. - stock_angle = cp.brand == 'hyundai' and angle_qualified(cp, marked_only=True) - stock_hkg = cp.brand == 'hyundai' and (stock_angle or stock_canfd_qualified(cp, marked_only=True) or + recovering_user = bool((location_fault or eps_recovery) and users) + stock_angle = recovering_user and cp.brand == 'hyundai' and angle_qualified(cp, marked_only=True) + stock_hkg = recovering_user and cp.brand == 'hyundai' and (stock_angle or stock_canfd_qualified(cp, marked_only=True) or stock_classic_qualified(cp, marked_only=True)) - stock_user = stock_lateral_user_event(cp) - stock_temporary_user = bool((location_fault or eps_recovery) and (stock_hkg or cp.brand == 'chrysler' and chrysler_qualified(cp, marked_only=True) or + stock_user = stock_lateral_user_event(cp) if recovering_user else None + stock_temporary_user = bool(recovering_user and (stock_hkg or cp.brand == 'chrysler' and chrysler_qualified(cp, marked_only=True) or cp.brand == 'ford' and ford_qualified(cp, marked_only=True) or cp.brand == 'nissan' and nissan_qualified(cp, marked_only=True) or cp.brand == 'subaru' and subaru_qualified(cp, marked_only=True) or cp.brand == 'mazda' and mazda_qualified(cp, marked_only=True) diff --git a/prebuilt.json b/prebuilt.json index 87ffc79b43..4ff45fdd7b 100644 --- a/prebuilt.json +++ b/prebuilt.json @@ -1 +1 @@ -{"protected_inventory_sha256": "d883a2889150d0426b0cd382349553be92033bbb3017d381ffe7fe7efa5661b5", "schema_version": 1} +{"protected_inventory_sha256": "1d1ba61d19622cec24db89557681495ff4c3743205d975e95c8a12607e592957", "schema_version": 1}