From f6e57b2f4fee0aa3303f00d7905128fe4a973248 Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Fri, 10 Apr 2026 14:37:40 -0700 Subject: [PATCH 1/2] chore(features): Remove `organizations:device-class-synthesis` feature This feature has been released for many years. Removing the feature check here so that we can remove the feature from sentry. My only concern here is that cabi path that defaulted it to false. If that might be a problem, we could always keep the variable around and just stop relying on the feature flag. Also wanted to check that this is fine to release in self-hosted. --- relay-cabi/src/processing.rs | 1 - relay-dynamic-config/src/feature.rs | 7 ------- relay-event-normalization/src/event.rs | 8 +------- relay-server/src/processing/utils/event.rs | 1 - 4 files changed, 1 insertion(+), 16 deletions(-) diff --git a/relay-cabi/src/processing.rs b/relay-cabi/src/processing.rs index 587a3bd56b..194198489b 100644 --- a/relay-cabi/src/processing.rs +++ b/relay-cabi/src/processing.rs @@ -261,7 +261,6 @@ pub unsafe extern "C" fn relay_store_normalizer_normalize_event( is_renormalize, remove_other: config.remove_other.unwrap_or(!is_renormalize), emit_event_errors: !is_renormalize, - device_class_synthesis_config: false, // only supported in relay enrich_spans: false, max_tag_value_length: usize::MAX, span_description_rules: None, diff --git a/relay-dynamic-config/src/feature.rs b/relay-dynamic-config/src/feature.rs index 3e7c55adc1..d73e074839 100644 --- a/relay-dynamic-config/src/feature.rs +++ b/relay-dynamic-config/src/feature.rs @@ -29,13 +29,6 @@ pub enum Feature { /// Serialized as `organizations:session-replay-video-disabled`. #[serde(rename = "organizations:session-replay-video-disabled")] SessionReplayVideoDisabled, - /// Enables device.class synthesis - /// - /// Enables device.class tag synthesis on mobile events. - /// - /// Serialized as `organizations:device-class-synthesis`. - #[serde(rename = "organizations:device-class-synthesis")] - DeviceClassSynthesis, /// Allow ingestion of metrics in the "custom" namespace. /// /// Serialized as `organizations:custom-metrics`. diff --git a/relay-event-normalization/src/event.rs b/relay-event-normalization/src/event.rs index 4459e1f9a9..6e09c104ce 100644 --- a/relay-event-normalization/src/event.rs +++ b/relay-event-normalization/src/event.rs @@ -120,9 +120,6 @@ pub struct NormalizationConfig<'a> { /// When enabled, adds errors in the meta to the event's errors. pub emit_event_errors: bool, - /// When `true`, infers the device class from CPU and model. - pub device_class_synthesis_config: bool, - /// When `true`, extracts tags from event and spans and materializes them into `span.data`. pub enrich_spans: bool, @@ -190,7 +187,6 @@ impl Default for NormalizationConfig<'_> { is_renormalize: Default::default(), remove_other: Default::default(), emit_event_errors: Default::default(), - device_class_synthesis_config: Default::default(), enrich_spans: Default::default(), max_tag_value_length: usize::MAX, span_description_rules: Default::default(), @@ -309,9 +305,7 @@ fn normalize(event: &mut Event, meta: &mut Meta, config: &NormalizationConfig) { normalize_event_tags(event); // Tags are added to every metric // TODO: Consider moving to store normalization - if config.device_class_synthesis_config { - normalize_device_class(event); - } + normalize_device_class(event); normalize_stacktraces(event); normalize_exceptions(event); // Browser extension filters look at the stacktrace normalize_user_agent(event, config.normalize_user_agent); // Legacy browsers filter diff --git a/relay-server/src/processing/utils/event.rs b/relay-server/src/processing/utils/event.rs index ea7ff59206..cae32ddfef 100644 --- a/relay-server/src/processing/utils/event.rs +++ b/relay-server/src/processing/utils/event.rs @@ -278,7 +278,6 @@ pub fn normalize( transaction_name_config: TransactionNameConfig { rules: &project_info.config.tx_name_rules, }, - device_class_synthesis_config: project_info.has_feature(Feature::DeviceClassSynthesis), enrich_spans: true, max_tag_value_length: ctx .config From d3a9226ad84a9cdb843f0dfc62855f3691706c1e Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Fri, 10 Apr 2026 17:41:27 -0700 Subject: [PATCH 2/2] fix: Update cocoa pii_stripping snapshot to include device.class tag Device class tagging now always runs (no longer gated behind the removed feature flag), so the snapshot output includes the new tag. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../tests/snapshots/test_fixtures__cocoa__pii_stripping.snap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/relay-server/tests/snapshots/test_fixtures__cocoa__pii_stripping.snap b/relay-server/tests/snapshots/test_fixtures__cocoa__pii_stripping.snap index 61ac814712..92446733ac 100644 --- a/relay-server/tests/snapshots/test_fixtures__cocoa__pii_stripping.snap +++ b/relay-server/tests/snapshots/test_fixtures__cocoa__pii_stripping.snap @@ -810,6 +810,10 @@ expression: SerializableAnnotated(& event) [ "a", "b" + ], + [ + "device.class", + "2" ] ], "extra": {