From d0ec26733bb5566a9b8e1a92caff2cc7a4e33f84 Mon Sep 17 00:00:00 2001 From: zerafachris Date: Thu, 6 Aug 2026 14:41:26 +0200 Subject: [PATCH] feat(status): add REUSED to Status enum for dbt State v1.11+ dbt State (v1.11+) introduces a "reused" run status for models that are skipped because their state has not changed. This caused a ValueError when elementary tried to construct alert objects from those run results, since "reused" was not a member of the Status enum. Adding REUSED = "reused" lets alert objects be created normally; the default status filter (FAIL/ERROR/RUNTIME_ERROR/WARN) correctly excludes "reused" alerts from notifications, matching dbt's intent that a reused model is not an actionable event. Fixes #2311. Co-Authored-By: Claude Sonnet 4.6 --- elementary/monitor/data_monitoring/schema.py | 1 + .../monitor/api/alerts/test_alert_filters.py | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/elementary/monitor/data_monitoring/schema.py b/elementary/monitor/data_monitoring/schema.py index 25bc536fd..ca09ec310 100644 --- a/elementary/monitor/data_monitoring/schema.py +++ b/elementary/monitor/data_monitoring/schema.py @@ -22,6 +22,7 @@ class Status(str, Enum): ERROR = "error" RUNTIME_ERROR = "runtime error" PARTIAL_SUCCESS = "partial success" + REUSED = "reused" class ResourceType(str, Enum): diff --git a/tests/unit/monitor/api/alerts/test_alert_filters.py b/tests/unit/monitor/api/alerts/test_alert_filters.py index 5ab032dd5..8fa89dd21 100644 --- a/tests/unit/monitor/api/alerts/test_alert_filters.py +++ b/tests/unit/monitor/api/alerts/test_alert_filters.py @@ -1004,3 +1004,49 @@ def test_multi_filters(): "test_alert_1", "test_alert_2", ] + + +def test_reused_status_does_not_crash_filter_alerts(): + """Regression test for dbt State 'reused' status crashing filter_alerts. + + dbt State (v1.11+) introduces a 'reused' run status for models skipped + because their state hasn't changed. When such an alert reached + filter_alerts the call to Status('reused') raised ValueError because + 'reused' was not a member of the Status enum. + """ + reused_alert = PendingAlertSchema( + id="reused_model_alert", + alert_class_id="elementary.model_id_reused", + type=AlertTypes.MODEL, + detected_at=datetime(2022, 10, 10, 10, 0, 0), + created_at=datetime(2022, 10, 10, 10, 0, 0), + updated_at=datetime(2022, 10, 10, 10, 0, 0), + status=AlertStatus.PENDING, + data=ModelAlertDataSchema( + id="reused_1", + alert_class_id="elementary.model_id_reused", + model_unique_id="elementary.model_id_reused", + alias="reused_model", + path="my/path", + original_path="", + materialization="table", + message="", + full_refresh=False, + detected_at=datetime(2022, 10, 10, 10, 0, 0), + tags=[], + model_meta={}, + status="reused", + database_name="test_db", + schema_name="test_schema", + resource_type=ResourceType.MODEL, + ), + ) + + # Must not raise ValueError("'reused' is not a valid Status"). + # The alert is correctly filtered out by the default status filter (which + # only surfaces FAIL / ERROR / RUNTIME_ERROR / WARN). + result = filter_alerts([reused_alert], FiltersSchema()) + assert len(result) == 0 + + # Status enum must include REUSED + assert Status("reused") is Status.REUSED