diff --git a/src/sentry/conf/server.py b/src/sentry/conf/server.py index 5555fbd6709d..26af54ff54aa 100644 --- a/src/sentry/conf/server.py +++ b/src/sentry/conf/server.py @@ -3193,10 +3193,11 @@ def custom_parameter_sort(parameter: dict) -> tuple[str, int]: WINTER_2023_GROUPING_CONFIG = "newstyle:2023-01-11" FALL_2025_GROUPING_CONFIG = "newstyle:2026-01-20" +FALL_2026_GROUPING_CONFIG = "newstyle:2026-10-24" # Note: When the default config here is updated, `DEFAULT_ENHANCEMENTS_BASE` in # `sentry.grouping.enhancer.__init__` *may* also need to be updated. DEFAULT_GROUPING_CONFIG = FALL_2025_GROUPING_CONFIG -BETA_GROUPING_CONFIG = "" +BETA_GROUPING_CONFIG = FALL_2026_GROUPING_CONFIG # How long the migration phase for grouping lasts SENTRY_GROUPING_CONFIG_TRANSITION_DURATION = 90 * 24 * 3600 # 90 days, until groups age out diff --git a/src/sentry/grouping/api.py b/src/sentry/grouping/api.py index af3641e67157..b40f8a8c652a 100644 --- a/src/sentry/grouping/api.py +++ b/src/sentry/grouping/api.py @@ -433,7 +433,9 @@ def get_grouping_variants_for_event( ) hint = f"ignored because {fingerprint_source} fingerprint takes precedence" - fingerprint_variant = CustomFingerprintVariant(resolved_fingerprint, fingerprint_info) + fingerprint_variant = CustomFingerprintVariant( + resolved_fingerprint, fingerprint_info, context.config + ) additional_variants[fingerprint_variant.key] = fingerprint_variant for variant in strategy_component_variants.values(): diff --git a/src/sentry/grouping/ingest/config.py b/src/sentry/grouping/ingest/config.py index e9b115564566..a526d3ecb4e2 100644 --- a/src/sentry/grouping/ingest/config.py +++ b/src/sentry/grouping/ingest/config.py @@ -26,6 +26,7 @@ # Used to migrate projects that have no activity via getsentry scripts CONFIGS_TO_DEPRECATE = set(GROUPING_CONFIG_CLASSES.keys()) - { DEFAULT_GROUPING_CONFIG, + BETA_GROUPING_CONFIG, } diff --git a/src/sentry/grouping/strategies/configurations.py b/src/sentry/grouping/strategies/configurations.py index 033845e419c8..d9d7c46a943d 100644 --- a/src/sentry/grouping/strategies/configurations.py +++ b/src/sentry/grouping/strategies/configurations.py @@ -1,4 +1,8 @@ -from sentry.conf.server import FALL_2025_GROUPING_CONFIG, WINTER_2023_GROUPING_CONFIG +from sentry.conf.server import ( + FALL_2025_GROUPING_CONFIG, + FALL_2026_GROUPING_CONFIG, + WINTER_2023_GROUPING_CONFIG, +) from sentry.grouping.strategies.base import ( StrategyConfiguration, create_strategy_configuration_class, @@ -82,3 +86,10 @@ def register_grouping_config(id: str, **kwargs) -> type[StrategyConfiguration]: }, enhancements_base="all-platforms:2026-01-20", ) + +# Opt-in only: changing fingerprint encoding changes existing custom and hybrid hashes. +register_grouping_config( + id=FALL_2026_GROUPING_CONFIG, + base=FALL_2025_GROUPING_CONFIG, + initial_context={"fingerprint_value_boundaries": True}, +) diff --git a/src/sentry/grouping/utils.py b/src/sentry/grouping/utils.py index 2f73d6476ed1..2f7e635bb4ca 100644 --- a/src/sentry/grouping/utils.py +++ b/src/sentry/grouping/utils.py @@ -17,7 +17,11 @@ from sentry.services.eventstore.models import BaseEvent -def hash_from_values(values: Iterable[str | int | UUID | ExceptionGroupingComponent]) -> str: +def hash_from_values( + values: Iterable[str | int | UUID | ExceptionGroupingComponent], + *, + with_value_boundaries: bool = False, +) -> str: """ Primarily used at the end of the grouping process, to get a final hash value once the all of the variants have been constructed, but also used as a hack to compare exception components (by @@ -25,7 +29,12 @@ def hash_from_values(values: Iterable[str | int | UUID | ExceptionGroupingCompon """ result = md5() for value in values: - result.update(force_bytes(value, errors="replace")) + value_bytes = force_bytes(value, errors="replace") + if with_value_boundaries: + # Length-prefix the encoded bytes so empty values and values containing delimiters + # cannot obscure fingerprint boundaries. Keep legacy callers unchanged by default. + result.update(f"{len(value_bytes)}:".encode("ascii")) + result.update(value_bytes) return result.hexdigest() diff --git a/src/sentry/grouping/variants.py b/src/sentry/grouping/variants.py index 0f82da321ccb..92b5be49037f 100644 --- a/src/sentry/grouping/variants.py +++ b/src/sentry/grouping/variants.py @@ -193,7 +193,13 @@ class CustomFingerprintVariant(BaseVariant): type = "custom_fingerprint" - def __init__(self, fingerprint: list[str], fingerprint_info: FingerprintInfo): + def __init__( + self, + fingerprint: list[str], + fingerprint_info: FingerprintInfo, + strategy_config: StrategyConfiguration, + ): + self.config = strategy_config self.values = fingerprint self.fingerprint_info = fingerprint_info self.is_built_in = fingerprint_info.get("matched_rule", {}).get("is_builtin", False) @@ -207,7 +213,12 @@ def key(self) -> str: return get_custom_fingerprint_description(self.fingerprint_info) def get_hash(self) -> str | None: - return hash_from_values(self.values) + return hash_from_values( + self.values, + with_value_boundaries=self.config.initial_context.get( + "fingerprint_value_boundaries", False + ), + ) def _get_metadata_as_dict(self) -> FingerprintVariantMetadata: return expose_fingerprint_dict(self.values, self.fingerprint_info) @@ -260,15 +271,24 @@ def description(self) -> str: def get_hash(self) -> str | None: if not self.root_component.contributes: return None + with_value_boundaries = self.config.initial_context.get( + "fingerprint_value_boundaries", False + ) final_values: list[str | int] = [] for value in self.values: # If we've hit the `{{ default }}` part of the fingerprint, pull in values from the # original grouping method (message, stacktrace, etc.) if is_default_fingerprint_var(value): - final_values.extend(self.root_component.iter_values()) + if with_value_boundaries: + # Treat the entire default grouping contribution as one fingerprint value. + # Preserve its existing equivalence rules rather than introducing boundaries + # between internal stacktrace or exception components. + final_values.append("".join(str(v) for v in self.root_component.iter_values())) + else: + final_values.extend(self.root_component.iter_values()) else: final_values.append(value) - return hash_from_values(final_values) + return hash_from_values(final_values, with_value_boundaries=with_value_boundaries) def _get_metadata_as_dict(self) -> Mapping[str, Any]: return { diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/actix.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/actix.pysnap new file mode 100644 index 000000000000..bb1259351426 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/actix.pysnap @@ -0,0 +1,599 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "fa86c1473c78dd5f6008506ed614f1d9" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "actix_web::pipeline" + stacktrace* + frame* (marked in-app by the client) + function* + "__pthread_body" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "___rust_maybe_catch_panic" + frame* (marked in-app by the client) + filename* + "arbiter.rs" + function* + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_reactor::with_default" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_reactor::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default" + frame* (marked in-app by the client) + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default" + frame* (marked in-app by the client) + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "global.rs" + function* + "tokio_executor::global::with_default" + frame* (marked in-app by the client) + filename* + "global.rs" + function* + "tokio_executor::global::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::block_on" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::tick" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::CurrentRunner::set_spawn" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduled::tick" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_fn_notify" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::std::set" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + frame* (marked in-app by the client) + filename* + "then.rs" + function* + "futures::future::then::Then::poll" + frame* (marked in-app by the client) + filename* + "chain.rs" + function* + "futures::future::chain::Chain::poll" + frame* (marked in-app by the client) + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame* (marked in-app by the client) + filename* + "acceptor.rs" + function* + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + frame* (marked in-app by the client) + filename* + "and_then.rs" + function* + "actix_net::service::and_then::AndThenFuture::poll" + frame* (marked in-app by the client) + filename* + "map_err.rs" + function* + "actix_net::service::map_err::MapErrFuture::poll" + frame* (marked in-app by the client) + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* (marked in-app by the client) + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_handler" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_io" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::parse" + frame* (marked in-app by the client) + filename* + "pipeline.rs" + function* + "actix_web::pipeline::Pipeline::poll_io" + frame* (marked in-app by the client) + filename* + "<::log::macros::log macros>" + function* + "actix_web::pipeline::ProcessResponse::poll_io" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "log::__private_api_log" + system* + hash: "0fd89da61ff62bc3b09751ac8ce133f9" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "actix_web::pipeline" + stacktrace* + frame* + function* + "__pthread_body" + frame* + filename* + "thread.rs" + function* + "std::sys::unix::thread::Thread::new::thread_start" + frame* + filename* + "boxed.rs" + function* + "alloc::boxed::FnBox::call_box" + frame* + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}" + frame* + filename* + "lib.rs" + function* + "___rust_maybe_catch_panic" + frame* + filename* + "panicking.rs" + function* + "std::panicking::try::do_call" + frame* + filename* + "arbiter.rs" + function* + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter" + frame* + filename* + "lib.rs" + function* + "tokio_reactor::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "lib.rs" + function* + "tokio_reactor::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + frame* + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + frame* + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + frame* + filename* + "global.rs" + function* + "tokio_executor::global::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "global.rs" + function* + "tokio_executor::global::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::block_on" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::tick" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::CurrentRunner::set_spawn" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduled::tick" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_fn_notify" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::std::set" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter::{{closure}}" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + frame* + filename* + "mod.rs" + function* + "alloc::boxed::Box::poll" + frame* + filename* + "then.rs" + function* + "futures::future::then::Then::poll" + frame* + filename* + "chain.rs" + function* + "futures::future::chain::Chain::poll" + frame* + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame* + filename* + "acceptor.rs" + function* + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + frame* + filename* + "and_then.rs" + function* + "actix_net::service::and_then::AndThenFuture::poll" + frame* + filename* + "map_err.rs" + function* + "actix_net::service::map_err::MapErrFuture::poll" + frame* + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_handler" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_io" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::parse" + frame* + filename* + "pipeline.rs" + function* + "actix_web::pipeline::Pipeline::poll_io" + frame* + filename* + "<::log::macros::log macros>" + function* + "actix_web::pipeline::ProcessResponse::poll_io" + frame* + filename* + "lib.rs" + function* + "log::__private_api_log" + frame* + filename* + "log.rs" + function* + "sentry::integrations::log::Logger::log" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with::{{closure}}" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active::{{closure}}" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/android_anr.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/android_anr.pysnap new file mode 100644 index 000000000000..4784c6e6ba89 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/android_anr.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "b4626f44de843f1f586ff2648425c4f0" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ApplicationNotResponding" + stacktrace* + frame* + module* + "androidx.recyclerview.widget.RecyclerView" + function* + "onLayout" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/aspnetcore.pysnap new file mode 100644 index 000000000000..eb81f42b9a3f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/aspnetcore.pysnap @@ -0,0 +1,208 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "85f90327d3b9ef257838f2664b9915e6" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "System.Exception" + stacktrace* + frame* (marked in-app by the client) + module* + "(unknown)" + function* + "lambda_method" + frame* (marked in-app by the client) + module* + "SentryTest2.Controllers.ValuesController" + function* + "Get" + system* + hash: "97dff72812f7f33f6fd01179d7963d07" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "System.Exception" + stacktrace* + frame* + module* + "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Routing.EndpointMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeAsync" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeFilterPipelineAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Next" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Rethrow" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeNextResourceFilter" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeInnerFilterAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Next" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Rethrow" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeNextActionFilterAsync" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeActionMethodAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor" + function* + "Execute" + frame* + module* + "Microsoft.Extensions.Internal.ObjectMethodExecutor" + function* + "Execute" + frame* + module* + "(unknown)" + function* + "lambda_method" + frame* + module* + "SentryTest2.Controllers.ValuesController" + function* + "Get" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/block_invoke.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/block_invoke.pysnap new file mode 100644 index 000000000000..dbd2c0a64fa9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/block_invoke.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "ad4d21cacbbadddbe1a37535d7dbbba5" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by the client) + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/bugly.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/bugly.pysnap new file mode 100644 index 000000000000..a6c915b3465b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/bugly.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "d9c9b0f9ba46e32fddd7cd1512fad235" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "__kernel_rt_sigreturn" + frame* + function* + "kill" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 000000000000..7119eb13dda4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,26 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "fingerprint": "['chunkloaderror']", + "fingerprint_source": "server_builtin_rule", + "is_hybrid_fingerprint": false, + "matched_fingerprinting_rule": "family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\"" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "server_builtin_rule" + } +} +--- +contributing variants: + built_in_fingerprint* + hash: "e130644157dc9d186569686838e16f9b" + fingerprint_info: {"matched_rule":{"attributes":{},"fingerprint":["chunkloaderror"],"is_builtin":true,"matchers":[["family","javascript"],["type","ChunkLoadError"]],"text":"family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\""}} + values: ["chunkloaderror"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 000000000000..fed18b658ce6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "client_fingerprint": "['{{ default }}', 'dogs are great']", + "fingerprint": "['chunkloaderror']", + "fingerprint_source": "server_builtin_rule", + "is_hybrid_fingerprint": false, + "matched_fingerprinting_rule": "family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\"" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "server_builtin_rule" + } +} +--- +contributing variants: + built_in_fingerprint* + hash: "e130644157dc9d186569686838e16f9b" + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"],"matched_rule":{"attributes":{},"fingerprint":["chunkloaderror"],"is_builtin":true,"matchers":[["family","javascript"],["type","ChunkLoadError"]],"text":"family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\""}} + values: ["chunkloaderror"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/callee_guaranteed.pysnap new file mode 100644 index 000000000000..19208dc712ce --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/callee_guaranteed.pysnap @@ -0,0 +1,77 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "3bb283edd206ca9069e3da4ce9c11869" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "" + ns_error* + domain* + "" + code* + 2 + stacktrace* + frame* (marked in-app by the client) + function* + "stripped_application_code" + frame* (marked in-app by the client) + function* + "stripped_application_code" + frame* (marked in-app by the client) + function* + "stripped_application_code" + system* + hash: "ab329c350a2abfdf4798139a4aee0d8b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "" + ns_error* + domain* + "" + code* + 2 + stacktrace* + frame* + function* + "-[UIApplication _run]" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap new file mode 100644 index 000000000000..2e49b02a2565 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: checksum +hashing_metadata: { + "checksum": "de46d023e69b171b90ccf3ebca7aede4", + "raw_checksum": "not a legit checksum" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "checksum", + "is_hybrid_fingerprint": "False" + } +} +--- +contributing variants: + hashed_checksum* + hash: "de46d023e69b171b90ccf3ebca7aede4" + checksum: "de46d023e69b171b90ccf3ebca7aede4" + raw_checksum: "not a legit checksum" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_regex_match.pysnap new file mode 100644 index 000000000000..18e56479e811 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/checksum_regex_match.pysnap @@ -0,0 +1,19 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: checksum +hashing_metadata: { + "checksum": "11212012123120120415201309082013" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "checksum", + "is_hybrid_fingerprint": "False" + } +} +--- +contributing variants: + checksum* + hash: "11212012123120120415201309082013" + checksum: "11212012123120120415201309082013" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 000000000000..9f5d58ad6d0e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,66 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "7c8a196d16b94be382add324be2605ee" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "unicorn" + frame* (marked in-app by the client) + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "FudgeLogTaggedError" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "SentrySetupInteractor.setupSentry" + system* + hash: "cd7f51d716fd57adc1a5ce1c112e538f" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* + function* + "unicorn" + frame* + function* + "UIApplicationMain" + frame* + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame* + function* + "FudgeLogTaggedError" + frame* + function* + "SentrySetupInteractor.setupSentry" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/connection_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/connection_error.pysnap new file mode 100644 index 000000000000..d0bafd6907e3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/connection_error.pysnap @@ -0,0 +1,155 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "452f63c005af7ac8bd3ce1f988b04471" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ConnectionError" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.utils.safe" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.utils.services" + function* + "" + context_line* + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + frame* (marked in-app by the client) + module* + "getsentry.quotas" + function* + "is_rate_limited" + context_line* + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + frame* (marked in-app by the client) + module* + "sentry.quotas.redis" + function* + "is_rate_limited" + context_line* + "rejections = is_rate_limited(client, keys, args)" + frame* (marked in-app by the client) + module* + "sentry.utils.redis" + function* + "call_script" + context_line* + "return script(keys, args, client)" + system* + hash: "b23d305fce7a3c4343f5c57a2937bfad" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ConnectionError" + stacktrace* + frame* + module* + "sentry.utils.safe" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.utils.services" + function* + "" + context_line* + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + frame* + module* + "getsentry.quotas" + function* + "is_rate_limited" + context_line* + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + frame* + module* + "sentry.quotas.redis" + function* + "is_rate_limited" + context_line* + "rejections = is_rate_limited(client, keys, args)" + frame* + module* + "sentry.utils.redis" + function* + "call_script" + context_line* + "return script(keys, args, client)" + frame* + module* + "redis.client" + function* + "__call__" + context_line* + "return client.evalsha(self.sha, len(keys), *args)" + frame* + module* + "redis.client" + function* + "evalsha" + context_line* + "return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)" + frame* + module* + "redis.client" + function* + "execute_command" + context_line* + "return self.parse_response(connection, command_name, **options)" + frame* + module* + "redis.client" + function* + "parse_response" + context_line* + "response = connection.read_response()" + frame* + module* + "redis.connection" + function* + "read_response" + context_line* + "response = self._parser.read_response()" + frame* + module* + "redis.connection" + function* + "read_response" + context_line* + "(e.args,))" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap new file mode 100644 index 000000000000..3c54e2a87909 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap @@ -0,0 +1,64 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "9c580bff7b008113595f9f1e0ef1962f" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "FailedToFetchError" + stacktrace* + frame* (marked in-app by custom stacktrace rule (function:playFetch +app)) + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" + system* + hash: "27e4433059022647e4d83d344cbf738c" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "FailedToFetchError" + stacktrace* + frame* + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame* + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_frames.pysnap new file mode 100644 index 000000000000..13b2ac10e8f4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/contributing_system_frames.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "9b3e1c08a50257c5ad760f1f3205a48b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "FailedToFetchError" + stacktrace* + frame* + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp.pysnap new file mode 100644 index 000000000000..1eefdc8b7fff --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "YYY", + "csp_directive": "script-src", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "666766514295bb52812324097cdaf53e" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + uri* + "YYY" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_img_src.pysnap new file mode 100644 index 000000000000..f3ffd3272720 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_img_src.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "ftp://example.com", + "csp_directive": "img-src", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "1742101e08eb1608f569751dfedd0062" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "img-src" + uri* + "ftp://example.com" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap new file mode 100644 index 000000000000..376411391734 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "self", + "csp_directive": "script-src", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "efddf1cde918097259aa7d4904fb1942" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + uri* + "'self'" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap new file mode 100644 index 000000000000..57842b09bb4d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "data:", + "csp_directive": "img-src", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "4e6f2bce9d121aa89f4dc5e5da08afb5" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "img-src" + uri* + "data:" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 000000000000..02992fb8e05e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "self", + "csp_directive": "script-src", + "csp_script_violation": "unsafe-eval", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "56c6520f35bce2f89ed2c4e725ccef65" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation* + "'unsafe-eval'" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 000000000000..b8f18f1980cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "self", + "csp_directive": "script-src", + "csp_script_violation": "unsafe-inline", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "d346ee37d19a2be6587e609075ca2d57" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation* + "'unsafe-inline'" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap new file mode 100644 index 000000000000..c9a9565cef95 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "example.com", + "csp_directive": "script-src", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "223cdacfe5b4b830dc700b5c18cc21b4" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + uri* + "example.com" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap new file mode 100644 index 000000000000..856f993b601d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "use.fontawesome.com", + "csp_directive": "style-src-elem", + "security_report_type": "csp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "csp" + } +} +--- +contributing variants: + default* + hash: "537a973f594c364842893e9a72af62a5" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "style-src-elem" + uri* + "use.fontawesome.com" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap new file mode 100644 index 000000000000..17da6d68fff4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap @@ -0,0 +1,26 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "client_fingerprint": "['celery', 'SoftTimeLimitExceeded', 'sentry.tasks.store.process_event']", + "fingerprint": "['celery', 'SoftTimeLimitExceeded', 'sentry.tasks.store.process_event']", + "fingerprint_source": "client", + "is_hybrid_fingerprint": false +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "client" + } +} +--- +contributing variants: + custom_client_fingerprint* + hash: "1f104d36b017e2e430aed1f6a94a5a9d" + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"]} + values: ["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 000000000000..37df90f9ba71 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "client_fingerprint": "['celery', 'SoftTimeLimitExceeded', 'sentry.tasks.store.process_event']", + "fingerprint": "['soft-timelimit-exceeded']", + "fingerprint_source": "server_custom_rule", + "is_hybrid_fingerprint": false, + "matched_fingerprinting_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "server_custom_rule" + } +} +--- +contributing variants: + custom_server_fingerprint* + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap new file mode 100644 index 000000000000..62bc47cdb539 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap @@ -0,0 +1,26 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "client_fingerprint": "['{{ message }}', 'dogs are great']", + "fingerprint": "[\"FailedToFetchError: Charlie didn't bring balls back!\", 'dogs are great']", + "fingerprint_source": "client", + "is_hybrid_fingerprint": false +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "client" + } +} +--- +contributing variants: + custom_client_fingerprint* + hash: "156c06a9ee7580f198f83891db3b176c" + fingerprint_info: {"client_fingerprint":["{{ message }}","dogs are great"]} + values: ["FailedToFetchError: Charlie didn't bring balls back!","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap new file mode 100644 index 000000000000..149b3891065a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,26 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "fingerprint": "['soft-timelimit-exceeded']", + "fingerprint_source": "server_custom_rule", + "is_hybrid_fingerprint": false, + "matched_fingerprinting_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "server_custom_rule" + } +} +--- +contributing variants: + custom_server_fingerprint* + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/empty.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/empty.pysnap new file mode 100644 index 000000000000..d626c1e5fc69 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/empty.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "other" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "other" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap new file mode 100644 index 000000000000..d1f49b43c5c3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "029f3b967068b1539f96957b7c0451d7" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "iOS_Swift.SampleError" + ns_error* + domain* + "iOS_Swift.SampleError" + code* + 0 diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap new file mode 100644 index 000000000000..c9681ad4f1d9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "b23ee1963904c2ca87b145febf94b66c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" + value* + "hello world" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap new file mode 100644 index 000000000000..19ab4b43efc0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap @@ -0,0 +1,36 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "ebcb7aa3baed0b2447fed7b265db777c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap new file mode 100644 index 000000000000..e256cfdcf227 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap @@ -0,0 +1,44 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 2, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "True", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "8c527d091797ca91a535be7b461e5059" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "ValueError" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + exception* + type* + "ValueError" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap new file mode 100644 index 000000000000..ae907f92e864 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 000000000000..4a513ff70518 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "e2bf1e0628b7b1824a9b63dec7a079a3" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "System.Exception" + value* + "Some Inner Exception" + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 000000000000..ae907f92e864 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 000000000000..ae907f92e864 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 000000000000..380e4634c53f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap new file mode 100644 index 000000000000..6d9af018a445 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "028157fe357e4592e39eacb32eafa2db" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnermostException" + value* + "Whoops" + exception* + type* + "InnerException" + value* + "Nope" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 000000000000..fcfdc6f428ef --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "f0078a82f351095ba595daa7d493aa3c" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.Exception" + value* + "Some Inner Exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 000000000000..ae907f92e864 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 000000000000..18ce2963e081 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "0809098f9f613b63467605dd1739cc9b" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 000000000000..4a513ff70518 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "e2bf1e0628b7b1824a9b63dec7a079a3" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "System.Exception" + value* + "Some Inner Exception" + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap new file mode 100644 index 000000000000..380e4634c53f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 000000000000..380e4634c53f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 000000000000..8d1d63bd6324 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "17022e0561e9b6e6351723a08aa81b18" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.Exception" + value* + "And now for something completely different." + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 000000000000..380e4634c53f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 000000000000..fcfdc6f428ef --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "f0078a82f351095ba595daa7d493aa3c" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.Exception" + value* + "Some Inner Exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 000000000000..873bca0b934b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,88 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 3, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "True", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "1ddf9a146f61f3c8667d7312727caff2" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "DoStuffException" + stacktrace* + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_stuff" + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_different_stuff" + exception* + type* + "DoOtherStuffException" + stacktrace* + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_other_stuff" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." + system* + hash: "f9f80cec48a38448579e3c41b9c525f5" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "DoStuffException" + stacktrace* + frame* + module* + "dostuff" + function* + "do_stuff" + frame* + module* + "dostuff" + function* + "do_different_stuff" + exception* + type* + "DoOtherStuffException" + stacktrace* + frame* + module* + "dostuff" + function* + "do_other_stuff" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap new file mode 100644 index 000000000000..6766ac78d82b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "bca604b98cb4637167eb6190a92e8933" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.SuchWowException" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.AmazingException" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 000000000000..74a8b52998e1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "fca0fd23f09e8da4481304ef2a531100" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.CoolException" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.BeansException" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap new file mode 100644 index 000000000000..939e81e996f9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "9b140b41d4ae2bd9588ccff62cb8358f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TypeError" + stacktrace* + frame* + module* + "app/components/modals/createTeamModal" + context_line* + "onError(err);" + frame* + module* + "app/views/settings/components/forms/form" + context_line* + "this.model.submitError(error);" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_type.pysnap new file mode 100644 index 000000000000..79c2f4ce76f9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_type.pysnap @@ -0,0 +1,30 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "5eb63bbbe01eeed093cb22bb8f5acdc3" + contributing component: exception + hint: None + root_component: + app* + exception* + value* + "hello world" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_value.pysnap new file mode 100644 index 000000000000..3508d2915cce --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/exception_without_value.pysnap @@ -0,0 +1,30 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "5a2cfd89b7b171fd7b4794b08023d04f" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap new file mode 100644 index 000000000000..aadc19b9b93d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap @@ -0,0 +1,39 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c670c5a80a2775994bd2d63b408abd6c" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* + function* + "-[UIApplication _run]" + frame* + function* + "objc_release" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..66b36c37b844 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "526b64456c48836a46ec1a89544fd412" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_empty_list.pysnap new file mode 100644 index 000000000000..41adc48bb6b7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_empty_list.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..cb3732de2ded --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "7d2cc7acbf90328200d960bf78a26234" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 000000000000..846c10f5c88a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "465d672b2d322bf6a1b44499f6dabc1f" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$FastClassByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..ce04911aed5e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "45c0b0a8c777e7a7040d7c39233a08a5" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..02cc57da662a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "353e05904b48bd3ae4fa9623934a70d0" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__$fn__" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..d3bba065955f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "0094f39fc617031afb6c655419f4a9f2" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$$$FastClassByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..1993683d80ad --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "be15ca3d511b96918e087c4f42503ca2" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$$$EnhancerBySpringCGLIB$$$$FastClassBySpringCGLIB$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 000000000000..04ed69149786 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,42 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e04dce7550635e05dbd7f656102cf304" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "test" + context_line* + "hello world" + frame* + filename* + "foo.js" + function* + "test" + context_line* + "hello world" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 000000000000..3b0e049f000e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "098f6bcd4621d373cade4e832627b4f6" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "test" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap new file mode 100644 index 000000000000..82ab2a677b4e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "64a0e0a34d99dce03a8c5a4c237a4b5a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "test" + context_line* + "hello world" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap new file mode 100644 index 000000000000..82ab2a677b4e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "64a0e0a34d99dce03a8c5a4c237a4b5a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "test" + context_line* + "hello world" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 000000000000..dc8f84de8718 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e0e7c4713e9092dc77635d5a0d5db31d" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding" + function* (trimmed javascript function) + "_flushPointerEventQueue" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 000000000000..e698105a8775 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c32a94349d9e9b72d31a46610c6c9589" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.model.User$HibernateProxy$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 000000000000..05a1ae3bc9d0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "be7f1b8b4014de623c533a8218dba5bd" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "foo.bar.Baz" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 000000000000..754cfbed70b0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "53b9e9679a8ea25880376080b76f98ad" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "call" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap new file mode 100644 index 000000000000..58457ffbafbf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "538bdfd8d7bb2495d0d6429c3689a420" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap new file mode 100644 index 000000000000..58457ffbafbf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "538bdfd8d7bb2495d0d6429c3689a420" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap new file mode 100644 index 000000000000..38e542a0d705 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "dc3d511120ce04996b1eef3496516e5c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* (cleaned javassist parts) + "entriesresource_$$_javassist.java" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap new file mode 100644 index 000000000000..415613324081 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "30eb5001914d29dd8461898b5b8094fe" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "forEach" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 000000000000..d1ad84e0d7d9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "07d1a8e5728b3c4c7aa8b8273fd0e753" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sun.reflect.GeneratedSerializationConstructorAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 000000000000..0e4523082885 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "09e0efcab18f545166318118ed4e0292" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sun.reflect.GeneratedConstructorAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 000000000000..9d82e2d54048 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "9bc326575875422d0d4ced3c35d9f916" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed reflection marker) + "sun.reflect.GeneratedMethodAccessor" + function* + "invoke" + frame* + module* (removed reflection marker) + "jdk.internal.reflect.GeneratedMethodAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap new file mode 100644 index 000000000000..15e22f4ab7ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "27eed4125fc13d42163ddb0b8f357b48" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + function* (ruby block) + "block" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 000000000000..c1210601599d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "4067a71d7098866f87c746a57a77b2bb" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" + function* (removed generated erb template suffix) + "_foo_html_erb" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 000000000000..87b745877bf2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "2f908c015ad77a50595512fcf65d344c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 000000000000..87b745877bf2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "2f908c015ad77a50595512fcf65d344c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap new file mode 100644 index 000000000000..5253bee108b3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,35 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "60e0a667027bef0d0b7c4882891df7e8" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + context_line* + "foo bar" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap new file mode 100644 index 000000000000..331610b1bd7e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "acbd18db4cc2f85cedef654fccc4a4d8" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "foo" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap new file mode 100644 index 000000000000..e7aa13dd9851 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "1effb24729ae4c43efa36b460511136a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/go_pkg_mod.pysnap new file mode 100644 index 000000000000..1c70db7cf1b0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/go_pkg_mod.pysnap @@ -0,0 +1,58 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "98ba9d44b8e7924ce21654996f92c2eb" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "*pq.Error" + stacktrace* + frame* (marked in-app by the client) + module* + "main" + function* + "background.func2" + system* + hash: "6bbf86806a0ec54202e633626ae09bd4" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "*pq.Error" + stacktrace* + frame* + module* + "github.com/robfig/cron/v3" + function* + "FuncJob.Run" + frame* + module* + "main" + function* + "background.func2" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_125_event_126.pysnap new file mode 100644 index 000000000000..e3d26a754f57 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_125_event_126.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "3da34e8c72dbcd4a490ac36eb7130638" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "dlopen" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_200_event_200.pysnap new file mode 100644 index 000000000000..4109c098846a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_200_event_200.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "ca733a48a19d237df8577d09449095d9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + frame* + function* + "destructor'" + frame* + function* + "destructor'" + frame* + function* + "RtlFreeHeap" + frame* + function* + "RtlFreeHeap" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_275_event_275.pysnap new file mode 100644 index 000000000000..1f7fb05eebab --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_275_event_275.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "2c1bbd635b64d5adccdb64a620044075" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_289_event_312.pysnap new file mode 100644 index 000000000000..5d8513c07bd7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_289_event_312.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "d90cd4f110751aff5a0a7df3c546a339" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "glDeleteTextures_Exec" + frame* + function* + "gldCreateDevice" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_294.pysnap new file mode 100644 index 000000000000..a64700b1c89e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_294.pysnap @@ -0,0 +1,48 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "12f18dcb1efe33b32c7afe5004addaaa" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_329.pysnap new file mode 100644 index 000000000000..a64700b1c89e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_294_event_329.pysnap @@ -0,0 +1,48 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "12f18dcb1efe33b32c7afe5004addaaa" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_307.pysnap new file mode 100644 index 000000000000..4b7d22f86ce3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_307.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_657.pysnap new file mode 100644 index 000000000000..4b7d22f86ce3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_307_event_657.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_313.pysnap new file mode 100644 index 000000000000..573c76c534cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_313.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e678e9c9f08b5e0f9987605f0f5dbae5" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "dlopen" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_333.pysnap new file mode 100644 index 000000000000..573c76c534cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_313_event_333.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e678e9c9f08b5e0f9987605f0f5dbae5" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "dlopen" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_319_event_321.pysnap new file mode 100644 index 000000000000..c34bba4f4a56 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_319_event_321.pysnap @@ -0,0 +1,52 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "f6d6be7dc293b9a8dad3b8aa2a567e49" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "-[NSApplication run]" + frame* + function* + "stripped_application_code" + frame* + function* + "-[NSView displayIfNeeded]" + frame* + function* + "stripped_application_code" + frame* + function* + "CGLFlushDrawable" + frame* + function* + "gpusSubmitDataBuffers" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_389_event_389.pysnap new file mode 100644 index 000000000000..4b7d22f86ce3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_389_event_389.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_432.pysnap new file mode 100644 index 000000000000..868fe7e265e6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_432.pysnap @@ -0,0 +1,49 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "4ab7102beb2132ba98606306a88fcdb8" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_453.pysnap new file mode 100644 index 000000000000..83f7054debe6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_432_event_453.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "f1cecca3f7a7663f9c2e639a44c20047" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_445_event_445.pysnap new file mode 100644 index 000000000000..27b5858276cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/group_445_event_445.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "7388d8aa6c112020d5c3e7b180fd0b88" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + filename* + "xstring" + function* + "std::basic_string::{ctor}" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "DispatchMessageWorker" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap new file mode 100644 index 000000000000..2bde7ab6008b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "client_fingerprint": "['{{ default }}', 'dogs are great']", + "fingerprint": "['{{ default }}', 'dogs are great']", + "fingerprint_source": "client", + "is_hybrid_fingerprint": true, + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "True" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "abba9a2abb368402ddb0087f2fd35161" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" + values: ["{{ default }}","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 000000000000..94a13680ff9d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,255 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "client_fingerprint": "['celery', 'SoftTimeLimitExceeded', 'sentry.tasks.store.process_event']", + "fingerprint": "['{{ default }}', 'soft-timelimit-exceeded']", + "fingerprint_source": "server_custom_rule", + "is_hybrid_fingerprint": true, + "matched_fingerprinting_rule": "type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\"", + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "True" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "48b7c477395bac7808f08b858e0e60ce" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["{{ default }}","soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\""}} + root_component: + app* + exception* + type* + "SoftTimeLimitExceeded" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + values: ["{{ default }}","soft-timelimit-exceeded"] + system* + hash: "5ccb31c375a89ea9080ab8c582db85bc" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["{{ default }}","soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\""}} + root_component: + system* + exception* + type* + "SoftTimeLimitExceeded" + stacktrace* + frame* + module* + "sentry.tasks.base" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" + values: ["{{ default }}","soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 000000000000..41fe471f1e0c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fingerprint +hashing_metadata: { + "client_fingerprint": "['{{ default }}', 'SoftTimeLimitExceeded', 'sentry.tasks.store.process_event']", + "fingerprint": "['soft-timelimit-exceeded']", + "fingerprint_source": "server_custom_rule", + "is_hybrid_fingerprint": false, + "matched_fingerprinting_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fingerprint", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fingerprint": { + "fingerprint_source": "server_custom_rule" + } +} +--- +contributing variants: + custom_server_fingerprint* + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"client_fingerprint":["{{ default }}","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 000000000000..c8ef67a3e7de --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "client_fingerprint": "['{{ default }}', \"adopt don't shop\"]", + "fingerprint": "['{{ default }}', \"adopt don't shop\"]", + "fingerprint_source": "client", + "is_hybrid_fingerprint": true, + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "True" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "0f58238774d450eca3e1e3308c07d406" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","adopt don't shop"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" + values: ["{{ default }}","adopt don't shop"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 000000000000..63d66229099c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "client_fingerprint": "['{{ default }}', 'dogs are great']", + "fingerprint": "['{{ default }}', 'dogs are great']", + "fingerprint_source": "client", + "is_hybrid_fingerprint": true, + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "True" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "d2aed060b28939907a736431aef667e2" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Maisey can't see the ball anymore :-(" + values: ["{{ default }}","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/in_app_in_ui.pysnap new file mode 100644 index 000000000000..c66b632977cc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/in_app_in_ui.pysnap @@ -0,0 +1,165 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "5b032559156688c9eabe4e4bd5ae6bd4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "" + function* + "TableView.layoutSubviews" + frame* (marked in-app by the client) + filename* + "" + function* + "AnyTableViewController.tableView" + frame* (marked in-app by the client) + filename* + "anytableviewcontroller.swift" + function* + "AnyTableViewController.tableView" + frame* (marked in-app by the client) + filename* + "dailydigesttableviewsection.swift" + function* + "DailyDigestTableViewSection.photoCell" + frame* (marked in-app by the client) + filename* + "" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "" + function* + "Sequence.compactMap" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSource" + frame* (marked in-app by the client) + filename* + "" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* (marked in-app by the client) + filename* + "currentuserprofile.swift" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* (marked in-app by the client) + filename* + "currentuserprofile.swift" + function* + "value" + system* + hash: "1921b991270e24c19ea1ed6863892d71" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "-[UIApplication _run]" + frame* + filename* + "" + function* + "TableView.layoutSubviews" + frame* + function* + "-[UITableView layoutSubviews]" + frame* + filename* + "" + function* + "AnyTableViewController.tableView" + frame* + filename* + "anytableviewcontroller.swift" + function* + "AnyTableViewController.tableView" + frame* + filename* + "dailydigesttableviewsection.swift" + function* + "DailyDigestTableViewSection.photoCell" + frame* + filename* + "" + function* + "MediaSlideshow.toSources" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* + filename* + "" + function* + "Sequence.compactMap" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSource" + frame* + filename* + "" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* + filename* + "currentuserprofile.swift" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* + filename* + "currentuserprofile.swift" + function* + "value" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_chained.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_chained.pysnap new file mode 100644 index 000000000000..d3d0d3eb587c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_chained.pysnap @@ -0,0 +1,287 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 3, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "True", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "db7a5bf0e72c22eb770a3be8940782c6" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "BindException" + stacktrace* + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + function* + "start" + frame* + module* + "org.apache.catalina.connector.Connector" + function* + "startInternal" + frame* + module* + "org.apache.coyote.AbstractProtocol" + function* + "start" + frame* + module* + "org.apache.tomcat.util.net.AbstractEndpoint" + function* + "start" + frame* + module* + "org.apache.tomcat.util.net.NioEndpoint" + function* + "bind" + frame* + module* + "sun.nio.ch.ServerSocketAdaptor" + function* + "bind" + frame* + module* + "sun.nio.ch.ServerSocketChannelImpl" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + function* + "bind0" + exception* + type* + "LifecycleException" + stacktrace* + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + function* + "start" + frame* + module* + "org.apache.catalina.connector.Connector" + function* + "startInternal" + exception* + type* + "LifecycleException" + stacktrace* + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + function* + "start" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_minimal.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_minimal.pysnap new file mode 100644 index 000000000000..0a571394413f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/java_minimal.pysnap @@ -0,0 +1,278 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "6c27831782d10c44d7d0a01ef3f9c71e" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ArithmeticException" + stacktrace* + frame* + module* + "org.apache.tomcat.util.net.SocketProcessorBase" + function* + "run" + frame* + module* + "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor" + function* + "doRun" + frame* + module* + "org.apache.coyote.AbstractProtocol$ConnectionHandler" + function* + "process" + frame* + module* + "org.apache.coyote.AbstractProcessorLight" + function* + "process" + frame* + module* + "org.apache.coyote.http11.Http11Processor" + function* + "service" + frame* + module* + "org.apache.catalina.connector.CoyoteAdapter" + function* + "service" + frame* + module* + "org.apache.catalina.core.StandardEngineValve" + function* + "invoke" + frame* + module* + "org.apache.catalina.valves.ErrorReportValve" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardHostValve" + function* + "invoke" + frame* + module* + "org.apache.catalina.authenticator.AuthenticatorBase" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardContextValve" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardWrapperValve" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.CharacterEncodingFilter" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.HiddenHttpMethodFilter" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.HttpPutFormContentFilter" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.RequestContextFilter" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "org.apache.tomcat.websocket.server.WsFilter" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + function* + "internalDoFilter" + frame* + module* + "javax.servlet.http.HttpServlet" + function* + "service" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + function* + "service" + frame* + module* + "javax.servlet.http.HttpServlet" + function* + "service" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + function* + "doGet" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + function* + "processRequest" + frame* + module* + "org.springframework.web.servlet.DispatcherServlet" + function* + "doService" + frame* + module* + "org.springframework.web.servlet.DispatcherServlet" + function* + "doDispatch" + frame* + module* + "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter" + function* + "handle" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + function* + "handleInternal" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + function* + "invokeHandlerMethod" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" + function* + "invokeAndHandle" + frame* + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + function* + "invokeForRequest" + frame* + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + function* + "doInvoke" + frame* + module* + "jdk.internal.reflect.DelegatingMethodAccessorImpl" + function* + "invoke" + frame* + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + function* + "invoke" + frame* + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + function* + "invoke0" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 000000000000..48fd9272f41c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "10dfd81e2df31e96fae451b9e205ad81" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* (stripped event-specific values) + "Loading chunk failed.\n(timeout: " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 000000000000..e20f48871bb2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "b8e2a347e75266ca7bb565e2b3c0722e" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* (stripped event-specific values) + ": logged in (error ) time spent --- correlation id , checksum (md5 ); payload timestamp (submitted from via via ) at offset " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap new file mode 100644 index 000000000000..52e043f9db41 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap @@ -0,0 +1,93 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e734632ed44ebbaaeee1d0f589397a1a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ReferenceError" + stacktrace* + frame* + filename* + "react-dom.development.js" + function* + "dispatchInteractiveEvent" + frame* + filename* + "react-dom.development.js" + function* + "interactiveUpdates" + frame* + filename* + "react-dom.development.js" + function* + "interactiveUpdates$1" + frame* + filename* + "react-dom.development.js" + function* + "performSyncWork" + frame* + filename* + "react-dom.development.js" + function* + "performWork" + frame* + filename* + "react-dom.development.js" + function* + "performWorkOnRoot" + frame* + filename* + "react-dom.development.js" + function* + "renderRoot" + frame* + filename* + "react-dom.development.js" + function* + "replayUnitOfWork" + frame* + filename* + "react-dom.development.js" + function* + "invokeGuardedCallback" + frame* + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "invokeGuardedCallbackDev" + frame* + filename* + "index.js" + function* (trimmed javascript function) + "sentryWrapped" + frame* + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "callCallback" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message.pysnap new file mode 100644 index 000000000000..0cc54052d3b0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "4119639092e62c55ea8be348e4d9260d" + contributing component: message + hint: None + root_component: + default* + message* + "event" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap new file mode 100644 index 000000000000..3de10fcc139f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "f9e47f16e3b9770b440157179c47bf7a" + contributing component: message + hint: None + root_component: + default* + message* (stripped event-specific values) + "testing testing , , " diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_polyfills.pysnap new file mode 100644 index 000000000000..817e8ef88167 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_polyfills.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "bad" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap new file mode 100644 index 000000000000..b6e2408a55b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "no_contributing_frames" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "no_contributing_frames" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_unpkg.pysnap new file mode 100644 index 000000000000..2897398b992b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_unpkg.pysnap @@ -0,0 +1,47 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "96955d6eb6b1c842b7c64ac8eb3ffe8d" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "react-dom@16.13.1/umd/react-dom.production" + function* + "unpkg" + frame* + function* + "cdnjs" + frame* + function* + "jsdelivr" + frame* + function* (trimmed javascript function) + "run" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap new file mode 100644 index 000000000000..519b8bee23de --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "1001e7b7dd0155a6d4021cd6d6b9f50d" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "dogs.are.great" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap new file mode 100644 index 000000000000..d0712ea2506f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame* + filename* + "test.html" + function* + "test" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap new file mode 100644 index 000000000000..07ee55b3fba8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame* + filename* + "test.html" + function* + "test" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap new file mode 100644 index 000000000000..8897b219616d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame* + filename* + "test.html" + function* + "test" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 000000000000..04b267431372 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "test" + frame* + module* + "test" + function* (trimmed javascript function) + "testMethod" + frame* + module* + "test" + function* + "aha" + frame* + module* + "test" + function* + "test" + frame* + module* + "test" + frame* + module* + "test" + function* (trimmed javascript function) + "callback" + frame* + module* + "test" + function* + "callAnotherThing" + frame* + module* + "test" + function* (trimmed javascript function) + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 000000000000..b0581b48d388 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "test" + frame* + module* + "test" + function* (trimmed javascript function) + "testMethod" + frame* + module* + "test" + function* + "aha" + frame* + module* + "test" + function* + "test" + frame* + module* + "test" + frame* + module* + "test" + function* + "callback" + frame* + module* + "test" + function* + "callAnotherThing" + frame* + module* + "test" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 000000000000..ddf0458a3b45 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "test" + frame* + module* + "test" + function* + "testMethod" + frame* + module* + "test" + function* + "aha" + frame* + module* + "test" + function* + "test" + frame* + module* + "test" + frame* + module* + "test" + function* + "callback" + frame* + module* + "test" + function* + "callAnotherThing" + frame* + module* + "test" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 000000000000..ddf0458a3b45 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "test" + frame* + module* + "test" + function* + "testMethod" + frame* + module* + "test" + function* + "aha" + frame* + module* + "test" + function* + "test" + frame* + module* + "test" + frame* + module* + "test" + function* + "callback" + frame* + module* + "test" + function* + "callAnotherThing" + frame* + module* + "test" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap new file mode 100644 index 000000000000..8897b219616d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame* + filename* + "test.html" + function* + "test" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 000000000000..b191a99dbfa4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,153 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "b5165008246a0897e1e7d18eb1df4d33" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NotFoundError" + stacktrace* + frame* (marked in-app by the client) + module* + "app/components/lazyLoad" + context_line* + "this.setState({" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "this.fetchData();" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* (marked in-app by the client) + module* + "app/api" + context_line* + "const preservedError = new Error();" + system* + hash: "f9e1efa045242909883a37dc74e4fc97" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NotFoundError" + stacktrace* + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/_microtask" + context_line* + "fn();" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + context_line* + "while (chain.length > i) run(chain[i++]); // variable length - can't use forEach" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + context_line* + "result = handler(value); // may throw" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + context_line* + "var info = gen[key](arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + context_line* + "return this._invoke(method, arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* + module* + "app/components/lazyLoad" + context_line* + "this.setState({" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + function* + "this" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "this" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "If" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "Yg" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "Xg" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "rh" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "this.fetchData();" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* + module* + "app/api" + context_line* + "const preservedError = new Error();" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 000000000000..e089f9fed3cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,133 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "b5165008246a0897e1e7d18eb1df4d33" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NotFoundError" + stacktrace* + frame* (marked in-app by the client) + module* + "app/components/lazyLoad" + context_line* + "this.setState({" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "this.fetchData();" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* (marked in-app by the client) + module* + "app/api" + context_line* + "const preservedError = new Error();" + system* + hash: "ff35b5385c8228096073758c6f50075b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NotFoundError" + stacktrace* + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + context_line* + "var info = gen[key](arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* + module* + "app/components/lazyLoad" + context_line* + "this.setState({" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + function* + "setState" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "enqueueSetState" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "tag" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "Yg" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "Xg" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + function* + "ih" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "this.fetchData();" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* + module* + "app/api" + context_line* + "const preservedError = new Error();" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel.pysnap new file mode 100644 index 000000000000..341adbbc7332 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel.pysnap @@ -0,0 +1,410 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "04604148d9d04bfb7b3b3c19810a995c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Exception" + stacktrace* + frame* (marked in-app by the client) + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* (marked in-app by the client) + filename* + "index.php" + function* + "require_once" + context_line* + "$request = Illuminate\\Http\\Request::capture()" + frame* (marked in-app by the client) + filename* + "web.php" + function* + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + context_line* + "throw new Exception('LARAVEL TEST');" + system* + hash: "f3b018db683f7190f410fec0fbc1a9b3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Exception" + stacktrace* + frame* + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* + filename* + "index.php" + function* + "require_once" + context_line* + "$request = Illuminate\\Http\\Request::capture()" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::handle" + context_line* + "$response = $this->sendRequestThroughRouter($request);" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter" + context_line* + "->then($this->dispatchToRouter());" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "checkformaintenancemode.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "validatepostsize.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "trustproxies.php" + function* + "Fideloper\\Proxy\\TrustProxies::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}" + context_line* + "return $this->router->dispatch($request);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatch" + context_line* + "return $this->dispatchToRoute($request);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatchToRoute" + context_line* + "return $this->runRoute($request, $this->findRoute($request));" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRoute" + context_line* + "$this->runRouteWithinStack($route, $request)" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRouteWithinStack" + context_line* + "});" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "encryptcookies.php" + function* + "Illuminate\\Cookie\\Middleware\\EncryptCookies::handle" + context_line* + "return $this->encrypt($next($this->decrypt($request)));" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "addqueuedcookiestoresponse.php" + function* + "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::handle" + context_line* + "$response = $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "startsession.php" + function* + "Illuminate\\Session\\Middleware\\StartSession::handle" + context_line* + "$response = $next($request), $session" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "shareerrorsfromsession.php" + function* + "Illuminate\\View\\Middleware\\ShareErrorsFromSession::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "verifycsrftoken.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken::handle" + context_line* + "return tap($next($request), function ($response) use ($request) {" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "substitutebindings.php" + function* + "Illuminate\\Routing\\Middleware\\SubstituteBindings::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}" + context_line* + "$request, $route->run()" + frame* + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::run" + context_line* + "return $this->runCallable();" + frame* + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::runCallable" + context_line* + "$this->parametersWithoutNulls(), new ReflectionFunction($this->action['uses'])" + frame* + filename* + "web.php" + function* + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + context_line* + "throw new Exception('LARAVEL TEST');" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel_anonymous.pysnap new file mode 100644 index 000000000000..7ebb2737a133 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/laravel_anonymous.pysnap @@ -0,0 +1,67 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "bf617e996d4427cda2f75c965c4266e2" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Exception" + stacktrace* + frame* (marked in-app by the client) + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + system* + hash: "dc13fee96d9e544e8aee8f1b4e6cbf22" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Exception" + stacktrace* + frame* + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* + filename* + "pipeline.php" + function* (anonymous class method) + "run" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap new file mode 100644 index 000000000000..2078ae2093c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "8ec8bbc71eb6e2af7fbe5076a8534f96" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there %s!" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap new file mode 100644 index 000000000000..e8dbf7cc4939 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "329b29efcf1f77067a063e34f56e7791" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there world!" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_amd_driver.pysnap new file mode 100644 index 000000000000..b929736169cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_amd_driver.pysnap @@ -0,0 +1,43 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "11e3dca34353528edf7608d914e134f9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "code" + frame* + function* + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + frame* + function* + "code" + frame* + function* + "glTexSubImage2D" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_intel_driver.pysnap new file mode 100644 index 000000000000..88e9635d97e0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/macos_intel_driver.pysnap @@ -0,0 +1,52 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "22760595718fcd37489c365e30a5e166" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "code" + frame* + function* + "-[NSApplication run]" + frame* + function* + "code" + frame* + function* + "-[NSView displayIfNeeded]" + frame* + function* + "code" + frame* + function* + "CGLTexImageIOSurface2D" + frame* + function* + "gpusSubmitDataBuffers" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/malloc_sentinel.pysnap new file mode 100644 index 000000000000..666f9af4ab61 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/malloc_sentinel.pysnap @@ -0,0 +1,50 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "44fcfaf834a1238bfaa22fcfabeea65f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "SIGABRT" + stacktrace* + frame* + function* + "stripped_application_code" + frame* + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame* + function* + "free" + frame* + function* + "malloc_report" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_prefers_message.pysnap new file mode 100644 index 000000000000..2078ae2093c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_prefers_message.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "8ec8bbc71eb6e2af7fbe5076a8534f96" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there %s!" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_uses_formatted.pysnap new file mode 100644 index 000000000000..f2f29e26d5cc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_uses_formatted.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "d3f5e52d24e9c1eae5abe6c866cced63" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there Peter!" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap new file mode 100644 index 000000000000..1c2606579c3c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap @@ -0,0 +1,29 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": true, + "message_source": "message" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "True", + "message_source": "message" + } +} +--- +contributing variants: + default* + hash: "96165d7350648408b585a16cdec87b5c" + contributing component: message + hint: None + root_component: + default* + message* (stripped event-specific values) + "Error key1= key2= key3= key4= key5= other_date=datetime.datetime(, , , , , tzinfo=d..." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/minified_javascript.pysnap new file mode 100644 index 000000000000..b34b2284754e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/minified_javascript.pysnap @@ -0,0 +1,125 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "e1b3abdef8ab7e7c723645e9f52a44c6" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NS_ERROR_NOT_INITIALIZED" + stacktrace* + frame* + module* + "sentry/dist/vendor" + function* + "M" + frame* + module* + "sentry/dist/vendor" + frame* + module* + "sentry/dist/vendor" + function* + "i" + frame* + module* + "sentry/dist/vendor" + function* + "b" + frame* + module* + "sentry/dist/vendor" + function* + "n" + frame* + module* + "sentry/dist/vendor" + function* + "g/::UCDestroy" + frame* + function* + "destructor'" + frame* + function* + "CD3D11LayeredChild::LUCBeginLayerDestruction" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash2.pysnap new file mode 100644 index 000000000000..cfe3098e5d81 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash2.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c85e23e804b52ea4b9f290ba838e77a0" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash3.pysnap new file mode 100644 index 000000000000..2a17422bba46 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_driver_crash3.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "784442a33bd16c15013bb8f69f68e7d6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame* + function* + "destructor'" + frame* + function* + "NOutermost::CDeviceChild::LUCBeginLayerDestruction" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_limit_frames.pysnap new file mode 100644 index 000000000000..674bcb6461b7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_limit_frames.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "8f4c7709e4af98d3c47ce3519690e6d9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_malloc_chain.pysnap new file mode 100644 index 000000000000..19f76b4fc4a9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_malloc_chain.pysnap @@ -0,0 +1,37 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "3ff01ce959249abecc6bc8a8f1432b0b" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "application_frame" + frame* + function* + "malloc_zone_malloc" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_no_filenames.pysnap new file mode 100644 index 000000000000..2cc78ad16486 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_no_filenames.pysnap @@ -0,0 +1,81 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "418120a66f7031923031f5c52aca0724" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + function* + "_main" + frame* (marked in-app by the client) + function* + "___rust_maybe_catch_panic" + frame* (marked in-app by the client) + function* + "log_demo::main" + frame* (marked in-app by the client) + function* + "log::__private_api_log" + system* + hash: "bbcdb2e1d8df09ffe0fffd30fb361d4b" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start" + frame* + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame* + function* + "log_demo::main" + frame* + function* + "log::__private_api_log" + frame* + function* + "sentry::integrations::log::Logger::log" + frame* + function* + "sentry::hub::Hub::with_active" + frame* + function* + "sentry::hub::Hub::with" + frame* + function* + "sentry::hub::Hub::with_active::{{closure}}" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap new file mode 100644 index 000000000000..a76f07fcc30d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap @@ -0,0 +1,37 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "9b78cced1eefcd0c655a0a3d8ce2cdd2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap new file mode 100644 index 000000000000..cbe0779d5d87 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "46b84e4da51648cc9f9741abd2bdad51" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + filename* + "main.cpp" + function* + "main" + frame* + filename* + "main.cpp" + function* + "`anonymous namespace'::start" + frame* + filename* + "main.cpp" + function* + "`anonymous namespace'::crash" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_with_function_name.pysnap new file mode 100644 index 000000000000..8f26058ba346 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/native_with_function_name.pysnap @@ -0,0 +1,51 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c29439027eafcf7642f641554ab0f0ef" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + filename* + "main.cpp" + function* + "main" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::start" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::crash" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::something::nested::Foo::crash" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_exception_weird.pysnap new file mode 100644 index 000000000000..a5689d4f79f7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_exception_weird.pysnap @@ -0,0 +1,139 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "6a84e724a0d67c6b036ecc24fcfb4be5" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + stacktrace* + frame* (marked in-app by the client) + module* + "hub" + function* (trimmed javascript function) + "withScope" + context_line* + "*/" + frame* (marked in-app by the client) + module* + "onunhandledrejection.ts" + frame* (marked in-app by the client) + module* + "hub.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "if (maxBreadcrumbs <= 0) {" + frame* (marked in-app by the client) + module* + "hub" + function* (trimmed javascript function) + "invokeClient" + context_line* + "* @returns Scope, the new cloned scope" + frame* (marked in-app by the client) + module* + "baseclient.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "promisedEvent" + frame* (marked in-app by the client) + module* + "backend.ts" + function* (trimmed javascript function) + "eventFromException" + system* + hash: "97adcd276fbfdd9ae8271c04255e522f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + stacktrace* + frame* + module* + "hub" + function* (trimmed javascript function) + "withScope" + context_line* + "*/" + frame* + module* + "onunhandledrejection.ts" + frame* + module* + "jest-mock.build:index" + function* (trimmed javascript function) + "mockConstructor [as captureException]" + context_line* + "return fn.apply(this, arguments);" + frame* + module* + "jest-mock.build:index" + context_line* + "})();" + frame* + module* + "jest-mock.build:index" + function* + "finalReturnValue" + context_line* + "return specificMockImpl.apply(this, arguments);" + frame* + module* + "jest-mock.build:index" + context_line* + "return original.apply(this, arguments);" + frame* + module* + "hub.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "if (maxBreadcrumbs <= 0) {" + frame* + module* + "hub" + function* (trimmed javascript function) + "invokeClient" + context_line* + "* @returns Scope, the new cloned scope" + frame* + module* + "baseclient.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "promisedEvent" + frame* + module* + "backend.ts" + function* (trimmed javascript function) + "eventFromException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_low_level_async.pysnap new file mode 100644 index 000000000000..817e8ef88167 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/node_low_level_async.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "bad" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_exception_base.pysnap new file mode 100644 index 000000000000..bdc37026b690 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_exception_base.pysnap @@ -0,0 +1,63 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 2, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "True", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "beb01c07d991f36b9da1e90fc7169ad8" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "ValueError" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + exception* + type* + "ValueError" + value* + "hello world" + system* + hash: "8c527d091797ca91a535be7b461e5059" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "ValueError" + stacktrace* + frame* + filename* + "baz.py" + exception* + type* + "ValueError" + stacktrace* + frame* + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 000000000000..b1c4d89e43da --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,78 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "4ec09a051686463f01ce05bffbcf3f89" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MultiValueDictKeyError" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.web.frontend.release_webhook" + function* + "post" + context_line* + "hook.handle(request)" + frame* (marked in-app by the client) + module* + "sentry_plugins.heroku.plugin" + function* + "handle" + context_line* + "email = request.POST['user']" + system* + hash: "b19423b06ce0a7e46ae8b00e12804378" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "MultiValueDictKeyError" + stacktrace* + frame* + module* + "sentry.web.frontend.release_webhook" + function* + "post" + context_line* + "hook.handle(request)" + frame* + module* + "sentry_plugins.heroku.plugin" + function* + "handle" + context_line* + "email = request.POST['user']" + frame* + module* + "django.utils.datastructures" + function* + "__getitem__" + context_line* + "raise MultiValueDictKeyError(repr(key))" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 000000000000..4696331e51a4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,54 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "5c0a281b9f8602e5d639d2f722fe5a9a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "MultiValueDictKeyError" + stacktrace* + frame* + module* + "django.core.handlers.base" + function* + "get_response" + context_line* + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + frame* + module* + "django.views.generic.base" + function* + "view" + context_line* + "return self.dispatch(request, *args, **kwargs)" + frame* + module* + "django.utils.decorators" + function* + "_wrapper" + context_line* + "return bound_func(*args, **kwargs)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_http_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_http_error.pysnap new file mode 100644 index 000000000000..4a3fe24ecabf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_http_error.pysnap @@ -0,0 +1,78 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "721f24ff0b900f7945b4da03890d2a83" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "HTTPError" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.utils.safe" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.integrations.slack.notify_action" + function* + "send_notification" + context_line* + "resp.raise_for_status()" + system* + hash: "d2490be282c0ada7e13288fd90fb0cb3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "HTTPError" + stacktrace* + frame* + module* + "sentry.utils.safe" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.integrations.slack.notify_action" + function* + "send_notification" + context_line* + "resp.raise_for_status()" + frame* + module* + "requests.models" + function* + "raise_for_status" + context_line* + "raise HTTPError(http_error_msg, response=self)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap new file mode 100644 index 000000000000..d00ecf610fbb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap @@ -0,0 +1,246 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "4f60cfec2087a65190b283cb848bea62" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "TimeoutError" + stacktrace* + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app) and un-ignored by custom stacktrace rule (function:post_process_group +group v+group)) + module* + "__main__" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + function* + "child_process" + context_line* + "run_worker(" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.task" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.tasks.post_process" + function* + "post_process_group" + context_line* + "run_post_process_job(" + system* + hash: "e5ae333037d1ba0ea9379b6d9693aca4" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TimeoutError" + stacktrace* + frame* (un-ignored by custom stacktrace rule (function:post_process_group +group v+group)) + module* + "__main__" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "sentry.taskworker.workerchild" + function* + "child_process" + context_line* + "run_worker(" + frame* + module* + "sentry.taskworker.workerchild" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* + module* + "sentry.taskworker.workerchild" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* + module* + "sentry.taskworker.task" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* + module* + "sentry.tasks.post_process" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame* + module* + "sentry.tasks.post_process" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame* + module* + "logging" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame* + module* + "logging" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.emit(record)" + frame* + module* + "redis.connection" + function* + "connect" + context_line* + "sock = self._connect()" + frame* + module* + "redis.connection" + function* + "_connect" + context_line* + "raise err" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap new file mode 100644 index 000000000000..5f93b4a58a1d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap @@ -0,0 +1,557 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "620b9e72c9565c3ef54e519ec997b57a" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "__main__" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn._subprocess" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.server" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.runners" + function* + "run" + context_line* + "return runner.run(main)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "asyncio.runners" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + function* + "run_forever" + context_line* + "self._run_once()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + function* + "_run_once" + context_line* + "handle._run()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.events" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.lifespan.on" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.middleware.proxy_headers" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.applications" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.applications" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.errors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.base" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.cors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.exceptions" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.middleware.asyncexitstack" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "app.main" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + system* + hash: "ed32779a2628338d3534c4e182caf8e8" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "__main__" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "uvicorn._subprocess" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* + module* + "uvicorn.server" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* + module* + "asyncio.runners" + function* + "run" + context_line* + "return runner.run(main)" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "asyncio.runners" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame* + module* + "asyncio.base_events" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* + module* + "asyncio.base_events" + function* + "run_forever" + context_line* + "self._run_once()" + frame* + module* + "asyncio.base_events" + function* + "_run_once" + context_line* + "handle._run()" + frame* + module* + "asyncio.events" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* + module* + "uvicorn.lifespan.on" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* + module* + "uvicorn.middleware.proxy_headers" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* + module* + "fastapi.applications" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* + module* + "starlette.applications" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.middleware.errors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.base" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.cors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.exceptions" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "fastapi.middleware.asyncexitstack" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* + module* + "app.main" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame* + module* + "app.main" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame* + module* + "logging" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.emit(record)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap new file mode 100644 index 000000000000..238ccd4b45e8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap @@ -0,0 +1,159 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "1bc764ab44acfab9a38f23ae670038bd" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TimeoutError" + stacktrace* + frame* + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "sentry.taskworker.workerchild" + function* + "child_process" + context_line* + "run_worker(" + frame* + module* + "sentry.taskworker.workerchild" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* + module* + "sentry.taskworker.workerchild" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* + module* + "sentry.taskworker.task" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* + module* + "sentry.tasks.post_process" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame* + module* + "sentry.tasks.post_process" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame* + module* + "logging" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame* + module* + "logging" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.emit(record)" + frame* + module* + "redis.connection" + function* + "connect" + context_line* + "sock = self._connect()" + frame* + module* + "redis.connection" + function* + "_connect" + context_line* + "raise err" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap new file mode 100644 index 000000000000..b499123e9724 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap @@ -0,0 +1,248 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "a18195beb2cfb93ea25c9331c988dbee" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* + module* + "multiprocessing.spawn" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "uvicorn._subprocess" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* + module* + "uvicorn.server" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* + module* + "asyncio.runners" + function* + "run" + context_line* + "return runner.run(main)" + frame* + module* + "asyncio.base_events" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* + module* + "asyncio.base_events" + function* + "run_forever" + context_line* + "self._run_once()" + frame* + module* + "asyncio.base_events" + function* + "_run_once" + context_line* + "handle._run()" + frame* + module* + "asyncio.events" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* + module* + "uvicorn.lifespan.on" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* + module* + "uvicorn.middleware.proxy_headers" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* + module* + "fastapi.applications" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* + module* + "starlette.applications" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.middleware.errors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.base" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.cors" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.exceptions" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "fastapi.middleware.asyncexitstack" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* + module* + "starlette.routing" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* + module* + "fastapi.routing" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* + module* + "app.main" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame* + module* + "app.main" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame* + module* + "logging" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + function* + "handle" + context_line* + "self.emit(record)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap new file mode 100644 index 000000000000..29171203979a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "11e6467c8358a9366c6538f95dcd7bd4" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." + exception* + type* + "TypeError" + value* + "Load failed" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 000000000000..74476c472b3b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "70dd09f56349dcce62a74137b00bb571" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 000000000000..1873e07ec2c3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: message +hashing_metadata: { + "message_parameterized": false, + "message_source": "exception" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "message", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.message": { + "message_parameterized": "False", + "message_source": "exception" + } +} +--- +contributing variants: + app* + hash: "5f209162115f576bedbaf6f0ad30e5aa" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "TypeError" + value* + "Load failed" + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_native.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_native.pysnap new file mode 100644 index 000000000000..91a78961beb5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/react_native.pysnap @@ -0,0 +1,161 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "33e3ac91fc256d3dfb789693be30a883" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "TypeError" + stacktrace* + frame* (marked in-app by the client) + module* + "App" + context_line* + "" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 000000000000..009617f5cd18 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,36 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "659ad79e2e70c822d30a53d7d889529e" + contributing component: stacktrace + hint: None + root_component: + app* + stacktrace* + frame* (marked in-app by the client) + filename* + "foo.py" + frame* (marked in-app by the client) + filename* + "bar.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 000000000000..096497b8fbe2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,40 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "c5da56c71b31f34c5880d734cbc8f5bb" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "dojo.js" + function* + "c" + frame* + filename* + "dojo.js" + function* (trimmed javascript function) + "_createDocumentViewModel" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap new file mode 100644 index 000000000000..7c7dbefb36be --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap @@ -0,0 +1,36 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + stacktrace* + frame* + function* + "log_demo::main" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust.pysnap new file mode 100644 index 000000000000..44b767c5eacf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust.pysnap @@ -0,0 +1,64 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "log_demo" + stacktrace* + frame* (marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + system* + hash: "193a67f0b7f8b5a69f29dc6a259d47c3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame* + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame* + function* + "log_demo::main" + frame* + function* + "log::__private_api_log" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap new file mode 100644 index 000000000000..ea04c420f678 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap @@ -0,0 +1,58 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "log_demo" + stacktrace* + frame* (marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + system* + hash: "68021c81b00bc4f2f983b11f10efbfda" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame* + function* + "std::panicking::try::do_call" + frame* + function* + "log_demo::main" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 000000000000..ecc7ca7d3489 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "top-level", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "top-level", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "1effb24729ae4c43efa36b460511136a" + contributing component: stacktrace + hint: None + root_component: + app* + stacktrace* + frame* (marked in-app by the client) + filename* + "foo.py" + system* + hash: "659ad79e2e70c822d30a53d7d889529e" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + frame* + filename* + "bar.py" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/template_compute_hashes.pysnap new file mode 100644 index 000000000000..ce43ff91158a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/template_compute_hashes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: template +hashing_metadata: { + "template_context_line": "{% invalid template tag %}", + "template_name": "foo.html" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "template", + "is_hybrid_fingerprint": "False" + } +} +--- +contributing variants: + default* + hash: "1f5bdebe3c9f414c7dbb4296a8353245" + contributing component: template + hint: None + root_component: + default* + template* + filename* + "foo.html" + context_line* + "{% invalid template tag %}" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap new file mode 100644 index 000000000000..b43685596e21 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap @@ -0,0 +1,36 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "1a11687556cf74559f0ae90b1c87e2fd" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.c" + function* + "main" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_no_hash.pysnap new file mode 100644 index 000000000000..d626c1e5fc69 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/threads_no_hash.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: fallback +hashing_metadata: { + "fallback_reason": "other" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "fallback", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.fallback": { + "fallback_reason": "other" + } +} +--- +contributing variants: + fallback* + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity.pysnap new file mode 100644 index 000000000000..d5d89af7cf59 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity.pysnap @@ -0,0 +1,88 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "63f25f224c4a56add964d1570880704c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NullReferenceException" + stacktrace* + frame* (marked in-app by the client) + filename* + "samplescript.cs" + function* + "SampleScript.ThrowNull ()" + system* + hash: "7909deacdb3f511a715efb7f2670d4dc" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NullReferenceException" + stacktrace* + frame* + filename* + "eventsystem.cs" + function* + "UnityEngine.EventSystems.EventSystem:Update()" + frame* + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor)" + frame* + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)" + frame* + filename* + "button.cs" + function* + "UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)" + frame* + filename* + "button.cs" + function* + "UnityEngine.UI.Button.Press ()" + frame* + filename* + "unityevent_0.cs" + function* + "UnityEngine.Events.UnityEvent.Invoke ()" + frame* + filename* + "unityevent.cs" + function* + "UnityEngine.Events.InvokableCall.Invoke ()" + frame* + filename* + "samplescript.cs" + function* + "SampleScript.ThrowNull ()" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap new file mode 100644 index 000000000000..b7293e9bcb72 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap @@ -0,0 +1,58 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "872f67574fe082419e092229105d22ca" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "System.NullReferenceException" + stacktrace* + frame* + module* + "GameBootstrap" + function* + "GameBootstrap.Start()" + frame* + module* + "UnityEngine.MonoBehaviour" + function* + "UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)" + frame* + module* + "UnityEngine.SetupCoroutine" + function* + "UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator, System.IntPtr)" + frame* + module* + "EnemySpawner+d__4" + function* + "EnemySpawner+d__4.MoveNext()" + frame* + module* + "CombatSystem" + function* + "CombatSystem.ApplyDamage(UnityEngine.GameObject, System.Int32)" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap new file mode 100644 index 000000000000..6ea235828591 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap @@ -0,0 +1,78 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "04d641eb30b794030ed5b0d7d779eb05" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* + function* + "android_main" + frame* + function* + "UnityPlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame* + function* + "sentry__handle_signal" + frame* + function* + "sentry_android_capture_envelope" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap new file mode 100644 index 000000000000..f661ce28b08e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap @@ -0,0 +1,88 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "539935023e2db3e104789c1c69ca2cf5" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "SIGABRT" + stacktrace* + frame* (marked in-app by the client) + filename* + "textures.cpp" + function* + "unrelated_native_app_source_under_assets_dir" + frame* (marked in-app by the client) + function* + "developer_own_libgame_binary_not_unity_gameactivity_glue" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "legacy_ios_engine_binary_unity_6000_0_and_older" + system* + hash: "7429f5a97df8b817f3b36cab1970f9ea" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "SIGABRT" + stacktrace* + frame* + filename* + "textures.cpp" + function* + "unrelated_native_app_source_under_assets_dir" + frame* + filename* + "bar.cpp" + function* + "unrelated_native_app_source_under_package_cache_dir" + frame* + function* + "developer_own_libgame_binary_not_unity_gameactivity_glue" + frame* + filename* + "enemyspawner.cs" + function* + "windows_il2cpp_project_source_with_backslash_paths" + frame* + filename* + "enemyspawner.cs" + function* + "linux_il2cpp_project_source" + frame* + filename* + "inputaction.cs" + function* + "registry_package_source_under_runtime_dir_never_restored" + frame* + function* + "legacy_ios_engine_binary_unity_6000_0_and_older" + frame* + function* + "windows_sentry_native_sdk" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap new file mode 100644 index 000000000000..3448197861b2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap @@ -0,0 +1,134 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "8bbdecb4ad2f92d58133a93ee009a07b" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "main.mm" + function* + "main" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "-[UnityAppController repaint]" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "PlayerLoop" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "ScriptingInvocation::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + system* + hash: "bae55c8a9132232871adf6b662a2d6da" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* + function* + "start" + frame* + filename* + "main.mm" + function* + "main" + frame* + function* + "-[UnityAppController repaint]" + frame* + function* + "PlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap new file mode 100644 index 000000000000..50fba82bc44d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap @@ -0,0 +1,78 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "system" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "system" + } +} +--- +contributing variants: + system* + hash: "cd7247c52d95df0f046b9e8d86ca231f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* + function* + "main" + frame* + function* + "UnityMain" + frame* + function* + "PlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame* + function* + "sentry__handle_signal" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unknown_variant.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unknown_variant.pysnap new file mode 100644 index 000000000000..7acc75824051 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unknown_variant.pysnap @@ -0,0 +1,19 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_unknown_hash_basis +--- +hash_basis: unknown +hashing_metadata: {} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "unknown" + } +} +--- +contributing variants: + dogs* + hash: "d41d8cd98f00b204e9800998ecf8427e" + contributing component: null + hint: None + root_component: + not_a_known_variant_name* diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap new file mode 100644 index 000000000000..c71e276fea4b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap @@ -0,0 +1,205 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "2301317599ab22875b83ce2dafdab6ce" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + system* + hash: "65c0ee687814f8d166cc29c9443ffc8a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + function* + "USentryPlaygroundUtils::execTerminate" + frame* + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "FGenericPlatformMisc::RaiseException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 000000000000..4344fb9f77d4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,144 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "8c134ce2a43a0b2c55654902491307c2" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "android_main" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AndroidMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UGameEngine::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UWorld::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::ProcessLatentActions" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::TickLatentActionForObject" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AActor::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + system* + hash: "f203e9bc12df86bb01fbd92a45643f86" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "android_main" + frame* + function* + "AndroidMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "UGameEngine::Tick" + frame* + function* + "UWorld::Tick" + frame* + function* + "FLatentActionManager::ProcessLatentActions" + frame* + function* + "FLatentActionManager::TickLatentActionForObject" + frame* + function* + "AActor::ProcessEvent" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + function* + "USentryPlaygroundUtils::execTerminate" + frame* + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "TMulticastDelegateBase::Broadcast" + frame* + function* + "tgkill" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..babdbdbb048b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,241 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "c246c95d4a435b3d601044aebae72a38" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + system* + hash: "69925caf2921426d8587558ce078b9e2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "WinMain" + frame* + function* + "LaunchWindowsStartup" + frame* + function* + "GuardedMainWrapper" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* + function* + "DispatchMessageWorker" + frame* + function* + "FWindowsApplication::AppWndProc" + frame* + function* + "FWindowsApplication::ProcessMessage" + frame* + function* + "FWindowsApplication::DeferMessage" + frame* + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FDebug::AssertFailed" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + filename* + "sentryoutputdeviceerror.cpp" + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "FWindowsErrorOutputDevice::Serialize" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 000000000000..52caf715366f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,193 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "dca3cb1a150c80ca2103ca14a870736e" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Ensure failed" + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + system* + hash: "d8dceed7558e86d6622149fd98607a02" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Ensure failed" + stacktrace* + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame* + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame* + function* + "FDebug::EnsureFailed" + frame* + function* + "TMulticastDelegateBase::Broadcast" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..657dfacbea92 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,272 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "exception", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "exception", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "8961a4ec639f0697b27b860bbaf365bb" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Ensure failed" + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + system* + hash: "4fa979767cc67d57c9bc771f6e48ed45" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Ensure failed" + stacktrace* + frame* + function* + "WinMain" + frame* + function* + "LaunchWindowsStartup" + frame* + function* + "GuardedMainWrapper" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* + function* + "DispatchMessageWorker" + frame* + function* + "FWindowsApplication::AppWndProc" + frame* + function* + "FWindowsApplication::ProcessMessage" + frame* + function* + "FWindowsApplication::DeferMessage" + frame* + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame* + function* + "CheckVerifyImpl" + frame* + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame* + function* + "FDebug::EnsureFailed" + frame* + function* + "TMulticastDelegate::Broadcast" + frame* + filename* + "delegateinstancesimpl.h" + function* + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + frame* + filename* + "tuple.h" + function* + "UE::Core::Private::Tuple::TTupleBase::ApplyAfter" + frame* + filename* + "invoke.h" + function* + "Invoke" + frame* + filename* + "sentrysubsystemdesktop.cpp" + function* + "SentrySubsystemDesktop::CaptureEnsure" + frame* + function* + "sentry_value_set_stacktrace" + frame* + function* + "sentry_value_new_stacktrace" + frame* + function* + "sentry_unwind_stack_from_ucontext" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap new file mode 100644 index 000000000000..433a2c8aa315 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap @@ -0,0 +1,204 @@ +--- +source: tests/sentry/grouping/test_grouphash_metadata.py::test_metadata_from_variants +--- +hash_basis: stacktrace +hashing_metadata: { + "num_stacktraces": 1, + "stacktrace_location": "thread", + "stacktrace_type": "in_app" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "stacktrace", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.stacktrace": { + "chained_exception": "False", + "stacktrace_location": "thread", + "stacktrace_type": "in_app" + } +} +--- +contributing variants: + app* + hash: "54e8028fb2526cf31b12dd66c01ad9e2" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::execLetObj" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessContextOpcode" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::CallFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + system* + hash: "9e04decaf79ecba9dc0314dc0edd3993" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execLetObj" + frame* + function* + "UObject::ProcessContextOpcode" + frame* + function* + "UObject::CallFunction" + frame* + function* + "UFunction::Invoke" + frame* + function* + "USentrySubsystem::execCaptureEventWithScope" + frame* + function* + "USentrySubsystem::CaptureEventWithScope" + frame* + function* + "SentrySubsystemApple::CaptureEventWithScope" diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/actix.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/actix.pysnap new file mode 100644 index 000000000000..65cafbd63e9b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/actix.pysnap @@ -0,0 +1,5182 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "actix_web::pipeline" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_start" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_body" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::sys::unix::thread::Thread::new::thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:alloc::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "boxed.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "alloc::boxed::FnBox::call_box" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::Builder::spawn_unchecked::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panic.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panic::catch_unwind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panicking.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panicking.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panic.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panic::AssertUnwindSafe::call_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "backtrace.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::sys_common::backtrace::__rust_begin_short_backtrace" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "arbiter.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::block_on" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_reactor::with_default" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_reactor::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "clock.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::clock::clock::with_default" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "clock.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::clock::clock::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "handle.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::timer::handle::with_default" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "handle.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::timer::handle::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "global.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_executor::global::with_default" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "global.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_executor::global::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Entered::block_on" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Entered::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduler::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::CurrentRunner::set_spawn" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduled::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_future_notify" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_fn_notify" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::enter" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::std::set" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "alloc::boxed::Box::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "then.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::then::Then::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "chain.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::chain::Chain::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "either.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::either::Either::poll" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "either.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::either::Either::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "acceptor.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "and_then.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_net::service::and_then::AndThenFuture::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map_err.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_net::service::map_err::MapErrFuture::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "channel.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::channel::HttpChannel::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "channel.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::channel::HttpChannel::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll_handler" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::parse" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::pipeline::Pipeline::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "<::log::macros::log macros>" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::pipeline::ProcessResponse::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "log.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::integrations::log::Logger::log" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active::{{closure}}" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "fa86c1473c78dd5f6008506ed614f1d9", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "actix_web::pipeline" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_body" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::sys::unix::thread::Thread::new::thread_start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "boxed.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "alloc::boxed::FnBox::call_box" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::Builder::spawn_unchecked::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panic.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panic::catch_unwind" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panicking.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panicking.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "panic.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panic::AssertUnwindSafe::call_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "backtrace.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::sys_common::backtrace::__rust_begin_short_backtrace" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "arbiter.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::block_on" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_reactor::with_default" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_reactor::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "clock.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::clock::clock::with_default" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "clock.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::clock::clock::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "handle.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::timer::handle::with_default" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "handle.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_timer::timer::handle::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "global.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_executor::global::with_default" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "global.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_executor::global::with_default::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "runtime.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Entered::block_on" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Entered::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduler::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::CurrentRunner::set_spawn" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "scheduler.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tokio_current_thread::scheduler::Scheduled::tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_future_notify" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_fn_notify" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::enter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::std::set" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::enter::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mod.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "alloc::boxed::Box::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "then.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::then::Then::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "chain.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::chain::Chain::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "either.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::either::Either::poll" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "either.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "futures::future::either::Either::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "acceptor.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "and_then.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_net::service::and_then::AndThenFuture::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map_err.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_net::service::map_err::MapErrFuture::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "channel.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::channel::HttpChannel::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "channel.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::channel::HttpChannel::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll_handler" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "h1.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::server::h1::Http1Dispatcher::parse" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::pipeline::Pipeline::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "<::log::macros::log macros>" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "actix_web::pipeline::ProcessResponse::poll_io" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "lib.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "log.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::integrations::log::Logger::log" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "local.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::thread::local::LocalKey::try_with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "hub.rs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active::{{closure}}" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "0fd89da61ff62bc3b09751ac8ce133f9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/android_anr.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/android_anr.pysnap new file mode 100644 index 000000000000..f74e5fb97ccc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/android_anr.pysnap @@ -0,0 +1,7840 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ApplicationNotResponding" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Application Not Responding for at least ms." + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "com.android.internal.os.ZygoteInit" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "zygoteinit.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "com.android.internal.os.ZygoteInit$MethodAndArgsCaller" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "zygoteinit.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.app.ActivityThread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "activitythread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Looper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "looper.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "loop" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Handler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "handler.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchMessage" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Handler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "handler.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer$FrameDisplayEventReceiver" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doCallbacks" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer$CallbackRecord" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl$TraversalRunnable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doTraversal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performTraversals" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchLayoutStep1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processAdapterUpdatesAndSetAnimationFlags" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.AdapterHelper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "consumeUpdatesInOnePass" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView$6" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "offsetPositionsForAdd" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "offsetPositionRecordsForInsert" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.ChildHelper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getUnfilteredChildAt" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView$5" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getChildAt" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.Thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getStackTrace" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dalvik.system.VMStack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "vmstack.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getThreadStackTrace" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ApplicationNotResponding" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Application Not Responding for at least ms." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "com.android.internal.os.ZygoteInit" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "zygoteinit.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "com.android.internal.os.ZygoteInit$MethodAndArgsCaller" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "zygoteinit.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.app.ActivityThread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "activitythread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Looper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "looper.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "loop" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Handler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "handler.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchMessage" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.os.Handler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "handler.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer$FrameDisplayEventReceiver" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doCallbacks" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.Choreographer$CallbackRecord" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "choreographer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl$TraversalRunnable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doTraversal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performTraversals" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewRootImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewrootimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutVertical" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.LinearLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "linearlayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setChildFrame" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.widget.FrameLayout" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "framelayout.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layoutChildren" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.ViewGroup" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "viewgroup.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "android.view.View" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "view.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "layout" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "onLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchLayout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchLayoutStep1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processAdapterUpdatesAndSetAnimationFlags" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.AdapterHelper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "consumeUpdatesInOnePass" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView$6" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "offsetPositionsForAdd" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "offsetPositionRecordsForInsert" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.ChildHelper" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getUnfilteredChildAt" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "androidx.recyclerview.widget.RecyclerView$5" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "sourcefile" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getChildAt" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.Thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getStackTrace" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dalvik.system.VMStack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "vmstack.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "getThreadStackTrace" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b4626f44de843f1f586ff2648425c4f0", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/aspnetcore.pysnap new file mode 100644 index 000000000000..e01cae2cc70c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/aspnetcore.pysnap @@ -0,0 +1,2183 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "sync exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Routing.EndpointMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeAsync" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeFilterPipelineAsync" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Next" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Rethrow" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeNextResourceFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeInnerFilterAsync" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Next" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Rethrow" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeNextActionFilterAsync" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeActionMethodAsync" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Execute" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.Extensions.Internal.ObjectMethodExecutor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "(unknown)" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lambda_method" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "SentryTest2.Controllers.ValuesController" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "valuescontroller.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Get" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "85f90327d3b9ef257838f2664b9915e6", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "An unhandled exception has occurred while executing the request." + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "sync exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Routing.EndpointMiddleware" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeAsync" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeFilterPipelineAsync" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Next" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Rethrow" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeNextResourceFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeInnerFilterAsync" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Next" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Rethrow" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeNextActionFilterAsync" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.CompilerServices.TaskAwaiter" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HandleNonSuccessAndDebuggerNotification" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "InvokeActionMethodAsync" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "Microsoft.Extensions.Internal.ObjectMethodExecutor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "(unknown)" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lambda_method" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "SentryTest2.Controllers.ValuesController" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "valuescontroller.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Get" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "97dff72812f7f33f6fd01179d7963d07", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/block_invoke.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/block_invoke.pysnap new file mode 100644 index 000000000000..089ba1214450 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/block_invoke.pysnap @@ -0,0 +1,283 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__99+[Something else]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__00+[Something else]_block_invoke_2" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "ad4d21cacbbadddbe1a37535d7dbbba5", + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app threads take precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app threads take precedence", + "id": "message", + "name": "message", + "values": [ + "Foo" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app threads take precedence", + "key": "message", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app threads take precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__99+[Something else]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__00+[Something else]_block_invoke_2" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "thread stacktrace — all frames", + "hash": null, + "hint": "ignored because app threads take precedence", + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/bugly.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/bugly.pysnap new file mode 100644 index 000000000000..2035a0bc9542 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/bugly.pysnap @@ -0,0 +1,584 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "SIGSEGV" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Segfault" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__kernel_rt_sigreturn" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "SIGSEGV" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Segfault" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__kernel_rt_sigreturn" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d9c9b0f9ba46e32fddd7cd1512fad235", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 000000000000..56ba4a6adb9b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,190 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because built-in fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ChunkLoadError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "ChunkLoadError: something something..." + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo.bar" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "bar.tsx" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because built-in fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "built_in_fingerprint": { + "contributes": true, + "description": "Sentry-defined fingerprint", + "hash": "e130644157dc9d186569686838e16f9b", + "hint": null, + "key": "built_in_fingerprint", + "matched_rule": "family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\"", + "type": "custom_fingerprint", + "values": [ + "chunkloaderror" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because built-in fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ChunkLoadError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "ChunkLoadError: something something..." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo.bar" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "bar.tsx" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because built-in fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 000000000000..055c41443004 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,194 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because built-in fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ChunkLoadError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "ChunkLoadError: something else..." + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "bar.bar" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "foo.tsx" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because built-in fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "built_in_fingerprint": { + "client_values": [ + "{{ default }}", + "dogs are great" + ], + "contributes": true, + "description": "Sentry-defined fingerprint", + "hash": "e130644157dc9d186569686838e16f9b", + "hint": null, + "key": "built_in_fingerprint", + "matched_rule": "family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\"", + "type": "custom_fingerprint", + "values": [ + "chunkloaderror" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because built-in fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ChunkLoadError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "ChunkLoadError: something else..." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "bar.bar" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "foo.tsx" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because built-in fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/callee_guaranteed.pysnap new file mode 100644 index 000000000000..d89713aaa55c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/callee_guaranteed.pysnap @@ -0,0 +1,2114 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "ns_error", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "domain", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "code", + "name": null, + "values": [ + 2 + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_main_queue_callback_4CF" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_call_block_and_release" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "3bb283edd206ca9069e3da4ce9c11869", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "ns_error", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "domain", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "code", + "name": null, + "values": [ + 2 + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_main_queue_callback_4CF" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_call_block_and_release" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "ab329c350a2abfdf4798139a4aee0d8b", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_no_regex_match.pysnap new file mode 100644 index 000000000000..e0e2b908db9a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_no_regex_match.pysnap @@ -0,0 +1,18 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": null, + "variants": { + "hashed_checksum": { + "checksum": "de46d023e69b171b90ccf3ebca7aede4", + "contributes": true, + "description": "hashed checksum", + "hash": "de46d023e69b171b90ccf3ebca7aede4", + "hint": null, + "key": "hashed_checksum", + "raw_checksum": "not a legit checksum", + "type": "hashed_checksum" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_regex_match.pysnap new file mode 100644 index 000000000000..0d0d8806f925 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/checksum_regex_match.pysnap @@ -0,0 +1,17 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": null, + "variants": { + "checksum": { + "checksum": "11212012123120120415201309082013", + "contributes": true, + "description": "checksum", + "hash": "11212012123120120415201309082013", + "hint": null, + "key": "checksum", + "type": "checksum" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 000000000000..5cb1971dc379 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,1027 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unicorn" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_main_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_block_async_invoke2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSBlockOperation main]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FudgeLogTaggedError" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySetupInteractor.setupSentry" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_lane_barrier_sync_invoke_and_complete" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "7c8a196d16b94be382add324be2605ee", + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "message", + "name": "message", + "values": [ + "Foo" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system threads take precedence", + "key": "message", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unicorn" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_main_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_block_async_invoke2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSBlockOperation main]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FudgeLogTaggedError" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySetupInteractor.setupSentry" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_lane_barrier_sync_invoke_and_complete" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — all frames", + "hash": "cd7f51d716fd57adc1a5ce1c112e538f", + "hint": null, + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/connection_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/connection_error.pysnap new file mode 100644 index 000000000000..c920b2cdc409 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/connection_error.pysnap @@ -0,0 +1,1101 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ConnectionError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Error while reading from socket: ('Connection closed by server.',)" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.safe" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "safe.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "safe_execute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.services" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "services.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "getsentry.quotas" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "quotas.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "is_rate_limited" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.quotas.redis" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "redis.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "is_rate_limited" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "rejections = is_rate_limited(client, keys, args)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.redis" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "redis.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "call_script" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return script(keys, args, client)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return client.evalsha(self.sha, len(keys), *args)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "evalsha" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "execute_command" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.parse_response(connection, command_name, **options)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "parse_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = connection.read_response()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "read_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = self._parser.read_response()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "read_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "(e.args,))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "452f63c005af7ac8bd3ce1f988b04471", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "%s.process_error" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ConnectionError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Error while reading from socket: ('Connection closed by server.',)" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.safe" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "safe.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "safe_execute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.services" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "services.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "getsentry.quotas" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "quotas.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "is_rate_limited" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.quotas.redis" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "redis.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "is_rate_limited" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "rejections = is_rate_limited(client, keys, args)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.redis" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "redis.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "call_script" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return script(keys, args, client)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return client.evalsha(self.sha, len(keys), *args)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "evalsha" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "execute_command" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.parse_response(connection, command_name, **options)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.client" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "client.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "parse_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = connection.read_response()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "read_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = self._parser.read_response()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "read_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "(e.args,))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b23d305fce7a3c4343f5c57a2937bfad", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap new file mode 100644 index 000000000000..7c8fe7a4884d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap @@ -0,0 +1,444 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by custom stacktrace rule (function:runApp -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "app.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runApp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return server.serve(port);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by custom stacktrace rule (function:handleRequest -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleRequest" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by custom stacktrace rule (function:recordMetrics +app) but ignored by custom stacktrace rule (function:recordMetrics -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "metrics.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "recordMetrics" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return withMetrics(handler, metricName, tags);" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:playFetch +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dogpark.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "playFetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise FailedToFetchError('Charlie didn't bring the ball back!');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "9c580bff7b008113595f9f1e0ef1962f", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:runApp -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "app.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runApp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return server.serve(port);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleRequest" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:recordMetrics -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "metrics.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "recordMetrics" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return withMetrics(handler, metricName, tags);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dogpark.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "playFetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise FailedToFetchError('Charlie didn't bring the ball back!');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "27e4433059022647e4d83d344cbf738c", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_frames.pysnap new file mode 100644 index 000000000000..f44c786778f5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/contributing_system_frames.pysnap @@ -0,0 +1,360 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by custom stacktrace rule (function:runApp -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "app.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runApp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return server.serve(port);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by custom stacktrace rule (function:handleRequest -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleRequest" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by custom stacktrace rule (function:recordMetrics +app) but ignored by custom stacktrace rule (function:recordMetrics -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "metrics.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "recordMetrics" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return withMetrics(handler, metricName, tags);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:runApp -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "app.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runApp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return server.serve(port);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleRequest" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:recordMetrics -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "metrics.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "recordMetrics" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return withMetrics(handler, metricName, tags);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "9b3e1c08a50257c5ad760f1f3205a48b", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp.pysnap new file mode 100644 index 000000000000..be6398b565cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp.pysnap @@ -0,0 +1,66 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "script-src" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "YYY" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because csp takes precedence", + "id": "message", + "name": "message", + "values": [ + "Blocked 'script' from 'YYY'" + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "666766514295bb52812324097cdaf53e", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_img_src.pysnap new file mode 100644 index 000000000000..3fbf7f9f88ed --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_img_src.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "img-src" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "ftp://example.com" + ] + } + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "1742101e08eb1608f569751dfedd0062", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_no_blocked_uri.pysnap new file mode 100644 index 000000000000..212af9a8087e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_no_blocked_uri.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "script-src" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "'self'" + ] + } + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "efddf1cde918097259aa7d4904fb1942", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_data_uri.pysnap new file mode 100644 index 000000000000..2bf14253948d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_data_uri.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "img-src" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "data:" + ] + } + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "4e6f2bce9d121aa89f4dc5e5da08afb5", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 000000000000..dd5c61f092be --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,68 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_local_script_violation": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "script-src" + ] + }, + { + "contributes": true, + "hint": null, + "id": "violation", + "name": "violation", + "values": [ + "'unsafe-eval'" + ] + }, + { + "contributes": false, + "hint": "ignored because violation takes precedence", + "id": "uri", + "name": "URL", + "values": [ + "'self'" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because csp takes precedence", + "id": "message", + "name": "message", + "values": [ + "Blocked unsafe eval() 'script'" + ] + } + ] + }, + "contributes": true, + "description": "directive", + "hash": "56c6520f35bce2f89ed2c4e725ccef65", + "hint": null, + "key": "csp_local_script_violation", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 000000000000..75de070e8363 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,68 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_local_script_violation": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "script-src" + ] + }, + { + "contributes": true, + "hint": null, + "id": "violation", + "name": "violation", + "values": [ + "'unsafe-inline'" + ] + }, + { + "contributes": false, + "hint": "ignored because violation takes precedence", + "id": "uri", + "name": "URL", + "values": [ + "'self'" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because csp takes precedence", + "id": "message", + "name": "message", + "values": [ + "Blocked unsafe inline 'script'" + ] + } + ] + }, + "contributes": true, + "description": "directive", + "hash": "d346ee37d19a2be6587e609075ca2d57", + "hint": null, + "key": "csp_local_script_violation", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_uri.pysnap new file mode 100644 index 000000000000..14aea42f9501 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_script_src_uri.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "script-src" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "example.com" + ] + } + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "223cdacfe5b4b830dc700b5c18cc21b4", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_style_src_elem.pysnap new file mode 100644 index 000000000000..28d00edc9879 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/csp_style_src_elem.pysnap @@ -0,0 +1,66 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "csp_url": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "csp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "style-src-elem" + ] + }, + { + "contributes": false, + "hint": "ignored because it's not a local script violation", + "id": "violation", + "name": "violation", + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "uri", + "name": "URL", + "values": [ + "use.fontawesome.com" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because csp takes precedence", + "id": "message", + "name": "message", + "values": [ + "Blocked 'style' from ''" + ] + } + ] + }, + "contributes": true, + "description": "directive and URL", + "hash": "537a973f594c364842893e9a72af62a5", + "hint": null, + "key": "csp_url", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client.pysnap new file mode 100644 index 000000000000..98b14fbbdd2c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client.pysnap @@ -0,0 +1,1622 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom client fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because custom client fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "custom_client_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom client fingerprint", + "hash": "1f104d36b017e2e430aed1f6a94a5a9d", + "hint": null, + "key": "custom_client_fingerprint", + "type": "custom_fingerprint", + "values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom client fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because custom client fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 000000000000..47538c0e36d4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,1621 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "custom_server_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom server fingerprint", + "hash": "24793dce104101c91709115d8d5e6b3c", + "hint": null, + "key": "custom_server_fingerprint", + "matched_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"", + "type": "custom_fingerprint", + "values": [ + "soft-timelimit-exceeded" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap new file mode 100644 index 000000000000..043c93e52fdc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap @@ -0,0 +1,73 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": false, + "hint": "ignored because custom client fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring balls back!" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": false, + "description": "exception message", + "hash": null, + "hint": "ignored because custom client fingerprint takes precedence", + "key": "app_exception_message", + "type": "component" + }, + "custom_client_fingerprint": { + "client_values": [ + "{{ message }}", + "dogs are great" + ], + "contributes": true, + "description": "custom client fingerprint", + "hash": "156c06a9ee7580f198f83891db3b176c", + "hint": null, + "key": "custom_client_fingerprint", + "type": "custom_fingerprint", + "values": [ + "FailedToFetchError: Charlie didn't bring balls back!", + "dogs are great" + ] + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap new file mode 100644 index 000000000000..a70946477b21 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,1616 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "custom_server_fingerprint": { + "contributes": true, + "description": "custom server fingerprint", + "hash": "24793dce104101c91709115d8d5e6b3c", + "hint": null, + "key": "custom_server_fingerprint", + "matched_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"", + "type": "custom_fingerprint", + "values": [ + "soft-timelimit-exceeded" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/empty.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/empty.pysnap new file mode 100644 index 000000000000..df4eb1e75964 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/empty.pysnap @@ -0,0 +1,16 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": null, + "variants": { + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_cocoa_nserror.pysnap new file mode 100644 index 000000000000..c802c0e2b8a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_cocoa_nserror.pysnap @@ -0,0 +1,1557 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_ns_error": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "iOS_Swift.SampleError" + ] + }, + { + "contributes": false, + "hint": "ignored because ns-error info takes precedence", + "id": "value", + "name": null, + "values": [ + "Code= Description=The operation couldn’t be completed. (iOS_Swift.SampleError error .)" + ] + }, + { + "contributes": true, + "hint": null, + "id": "ns_error", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "domain", + "name": null, + "values": [ + "iOS_Swift.SampleError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "code", + "name": null, + "values": [ + 0 + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__eventFetcherSourceCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__processEventQueue" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplicationAccessibility sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIWindow sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIWindow _sendTouchesForEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl touchesEnded:withEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl _sendActionsForEvents:withEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl sendAction:to:forEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication sendAction:to:from:forEvent:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ViewController.captureError" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ViewController.captureError" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "NSError", + "hash": "029f3b967068b1539f96957b7c0451d7", + "hint": null, + "key": "app_ns_error", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__eventFetcherSourceCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__processEventQueue" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplicationAccessibility sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIWindow sendEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIWindow _sendTouchesForEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl touchesEnded:withEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl _sendActionsForEvents:withEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIControl sendAction:to:forEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:__*[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication sendAction:to:from:forEvent:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ViewController.captureError" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ViewController.captureError" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "thread stacktrace — all frames", + "hash": null, + "hint": "ignored because app exception takes precedence", + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes.pysnap new file mode 100644 index 000000000000..edb25a774a13 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "b23ee1963904c2ca87b145febf94b66c", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_2.pysnap new file mode 100644 index 000000000000..0eb0554cc386 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_2.pysnap @@ -0,0 +1,170 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "ebcb7aa3baed0b2447fed7b265db777c", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because app exception takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_3.pysnap new file mode 100644 index 000000000000..477872c92614 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_compute_hashes_3.pysnap @@ -0,0 +1,316 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "8c527d091797ca91a535be7b461e5059", + "hint": null, + "key": "app_chained_exception_stacktrace", + "type": "component" + }, + "system_chained_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "chained exception stacktraces — all frames", + "hash": null, + "hint": "ignored because app exception takes precedence", + "key": "system_chained_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap new file mode 100644 index 000000000000..b830702572a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnerException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Nope" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "93b26686d00504b4e5aa1cb0244d8b37", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 000000000000..1d9711ba92f3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,131 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Some Inner Exception" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "e2bf1e0628b7b1824a9b63dec7a079a3", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 000000000000..b830702572a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnerException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Nope" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "93b26686d00504b4e5aa1cb0244d8b37", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 000000000000..b830702572a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnerException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Nope" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "93b26686d00504b4e5aa1cb0244d8b37", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 000000000000..91ddd13ef540 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "a4f16891fa438620699cb2d9af5cc827", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap new file mode 100644 index 000000000000..a575dc8cdfe4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnermostException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Whoops" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnerException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Nope" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "028157fe357e4592e39eacb32eafa2db", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 000000000000..4e73e017186f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Some Inner Exception" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "f0078a82f351095ba595daa7d493aa3c", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 000000000000..b830702572a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "InnerException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Nope" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "93b26686d00504b4e5aa1cb0244d8b37", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 000000000000..45c0b6bbd179 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "0809098f9f613b63467605dd1739cc9b", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 000000000000..1d9711ba92f3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,131 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Some Inner Exception" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "e2bf1e0628b7b1824a9b63dec7a079a3", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_exception.pysnap new file mode 100644 index 000000000000..91ddd13ef540 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_exception.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "a4f16891fa438620699cb2d9af5cc827", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 000000000000..91ddd13ef540 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "a4f16891fa438620699cb2d9af5cc827", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 000000000000..bbe7f60ff87b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,131 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "And now for something completely different." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "17022e0561e9b6e6351723a08aa81b18", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 000000000000..91ddd13ef540 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "a4f16891fa438620699cb2d9af5cc827", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 000000000000..4e73e017186f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.Exception" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.Exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Some Inner Exception" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "f0078a82f351095ba595daa7d493aa3c", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 000000000000..624c10d89a25 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,489 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "DoStuffException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Can't do the stuff" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_stuff" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_different_stuff" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "DoOtherStuffException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Can't do the other stuff" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_other_stuff" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_other_stuff" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "1ddf9a146f61f3c8667d7312727caff2", + "hint": null, + "key": "app_chained_exception_stacktrace", + "type": "component" + }, + "system_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "DoStuffException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Can't do the stuff" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_stuff" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_different_stuff" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "DoOtherStuffException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Can't do the other stuff" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_other_stuff" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dostuff" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_other_stuff" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "f9f80cec48a38448579e3c41b9c525f5", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types.pysnap new file mode 100644 index 000000000000..801626d9015d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types.pysnap @@ -0,0 +1,131 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.SuchWowException" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.AmazingException" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "bca604b98cb4637167eb6190a92e8933", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 000000000000..2c275bc338ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,131 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.CoolException" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MyApp.BeansException" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Test " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.AggregateException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "One or more errors occurred." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "fca0fd23f09e8da4481304ef2a531100", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap new file mode 100644 index 000000000000..2103e6ca00b1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap @@ -0,0 +1,280 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TypeError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Cannot read property 'submitError' of null" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/modals/createTeamModal" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "createteammodal.jsx" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "onError(err);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/settings/components/forms/form" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "form.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "onError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.model.submitError(error);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TypeError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Cannot read property 'submitError' of null" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/modals/createTeamModal" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "createteammodal.jsx" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "onError(err);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/settings/components/forms/form" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "form.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "onError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.model.submitError(error);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "9b140b41d4ae2bd9588ccff62cb8358f", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_type.pysnap new file mode 100644 index 000000000000..6725f711f119 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_type.pysnap @@ -0,0 +1,55 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": null, + "id": "type", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "5eb63bbbe01eeed093cb22bb8f5acdc3", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_value.pysnap new file mode 100644 index 000000000000..30ef9929d95d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/exception_without_value.pysnap @@ -0,0 +1,55 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_type": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception type", + "hash": "5a2cfd89b7b171fd7b4794b08023d04f", + "hint": null, + "key": "app_exception_type", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/fallback_prefix_level_1.pysnap new file mode 100644 index 000000000000..bb9b07385518 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/fallback_prefix_level_1.pysnap @@ -0,0 +1,476 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "objc_release" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "objc_release" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c670c5a80a2775994bd2d63b408abd6c", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..38d827276335 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sentry_clojure_example.core$_main$fn__" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sentry_clojure_example.core$_main$fn__" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "526b64456c48836a46ec1a89544fd412", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_empty_list.pysnap new file mode 100644 index 000000000000..751464b2b98c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_empty_list.pysnap @@ -0,0 +1,62 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..f9eb3dc4de96 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$EnhancerByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$EnhancerByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "7d2cc7acbf90328200d960bf78a26234", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 000000000000..1537c593347c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$FastClassByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$FastClassByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "465d672b2d322bf6a1b44499f6dabc1f", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..d2d513c27d83 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "45c0b0a8c777e7a7040d7c39233a08a5", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 000000000000..960cb84023e3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,130 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:javascript path:org-dartlang-sdk:///** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "async_patch.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_asyncStartSync" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:javascript path:org-dartlang-sdk:///** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "async_patch.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_asyncStartSync" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..e8a55db29cf5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sentry_clojure_example.core$_main$fn__$fn__" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sentry_clojure_example.core$_main$fn__$fn__" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "353e05904b48bd3ae4fa9623934a70d0", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..b851ac9eebf4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$EnhancerByGuice$$$$FastClassByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.OutboundController$$EnhancerByGuice$$$$FastClassByGuice$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "0094f39fc617031afb6c655419f4a9f2", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..9eb7a75e8dc7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$$$EnhancerBySpringCGLIB$$$$FastClassBySpringCGLIB$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$$$EnhancerBySpringCGLIB$$$$FastClassBySpringCGLIB$$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "be15ca3d511b96918e087c4f42503ca2", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 000000000000..fbce4ca4e13e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,304 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because file path is a URL and function name is missing", + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because file path is a URL and function name is missing", + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "e04dce7550635e05dbd7f656102cf304", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 000000000000..45a24db0c34b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "098f6bcd4621d373cade4e832627b4f6", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 000000000000..81d347781b20 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,126 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "7f7aaadf-a006-4217-9ed5-5fbf8585c6c0" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "7f7aaadf-a006-4217-9ed5-5fbf8585c6c0" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap new file mode 100644 index 000000000000..4713b147e256 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,140 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "64a0e0a34d99dce03a8c5a4c237a4b5a", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap new file mode 100644 index 000000000000..4713b147e256 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,140 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hello world" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "64a0e0a34d99dce03a8c5a4c237a4b5a", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 000000000000..b79c1825d770 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,126 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:javascript module:**/packages/flutter/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "binding.dart" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "_flushPointerEventQueue" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "binding.dart" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "_flushPointerEventQueue" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "e0e7c4713e9092dc77635d5a0d5db31d", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 000000000000..6344736a4f40 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.model.User$HibernateProxy$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.model.User$HibernateProxy$" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jipJipManagementApplication" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "c32a94349d9e9b72d31a46610c6c9589", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 000000000000..4bc12fdaf127 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo.bar.Baz" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored lambda function", + "id": "function", + "name": null, + "values": [ + "lambda$work$1" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo.bar.Baz" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored lambda function", + "id": "function", + "name": null, + "values": [ + "lambda$work$1" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "be7f1b8b4014de623c533a8218dba5bd", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 000000000000..1898d6c9bf23 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored java lambda", + "id": "module", + "name": null, + "values": [ + "foo.bar.Baz$$Lambda$40/1673859467" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "call" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored java lambda", + "id": "module", + "name": null, + "values": [ + "foo.bar.Baz$$Lambda$40/1673859467" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "call" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "53b9e9679a8ea25880376080b76f98ad", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist.pysnap new file mode 100644 index 000000000000..0ee87a7607f2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.entry.EntriesResource_$$_javassist" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.entry.EntriesResource_$$_javassist" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "538bdfd8d7bb2495d0d6429c3689a420", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap new file mode 100644 index 000000000000..0ee87a7607f2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.entry.EntriesResource_$$_javassist" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "com.example.api.entry.EntriesResource_$$_javassist" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "538bdfd8d7bb2495d0d6429c3689a420", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap new file mode 100644 index 000000000000..aa865f32d0fe --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": "cleaned javassist parts", + "id": "filename", + "name": null, + "values": [ + "entriesresource_$$_javassist.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": "cleaned javassist parts", + "id": "filename", + "name": null, + "values": [ + "entriesresource_$$_javassist.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "fn" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "dc3d511120ce04996b1eef3496516e5c", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap new file mode 100644 index 000000000000..5ff66bfd43e8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "forEach" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "forEach" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "30eb5001914d29dd8461898b5b8094fe", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 000000000000..7fb0b3e9758d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,526 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_logging/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_logging.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryLogging.log" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_dio/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_dio.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryDio.dio" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_file/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_file.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryFile.file" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_hive/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_hive.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryHive.hive" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_isar/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_isar.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryIsar.isar" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_sqflite/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_sqflite.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySqflite.sqflite" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_drift/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_drift.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryDrift.drift" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_logging/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_logging.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryLogging.log" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_dio/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_dio.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryDio.dio" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_file/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_file.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryFile.file" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_hive/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_hive.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryHive.hive" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_isar/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_isar.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryIsar.isar" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_sqflite/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_sqflite.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySqflite.sqflite" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_drift/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_drift.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryDrift.drift" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 000000000000..852d410c8a27 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,130 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_exception_factory.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryExceptionFactory.getSentryException" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_exception_factory.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryExceptionFactory.getSentryException" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 000000000000..cd069c045f03 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,130 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:package:sentry_flutter/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_exception_factory.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryExceptionFactory.getSentryException" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (path:package:sentry_flutter/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentry_exception_factory.dart" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentryExceptionFactory.getSentryException" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 000000000000..2f2e980b33d8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:framework -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedSerializationConstructorAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedSerializationConstructorAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "07d1a8e5728b3c4c7aa8b8273fd0e753", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 000000000000..32d7ec9c7d1a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:framework -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedConstructorAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed codegen marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedConstructorAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "09e0efcab18f545166318118ed4e0292", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 000000000000..a52145fc12b3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,188 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:framework -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed reflection marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedMethodAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:framework -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed reflection marker", + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.GeneratedMethodAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed reflection marker", + "id": "module", + "name": null, + "values": [ + "sun.reflect.GeneratedMethodAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": "removed reflection marker", + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.GeneratedMethodAccessor" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "9bc326575875422d0d4ced3c35d9f916", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap new file mode 100644 index 000000000000..4998bf445388 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": "ruby block", + "id": "function", + "name": null, + "values": [ + "block" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": true, + "hint": "ruby block", + "id": "function", + "name": null, + "values": [ + "block" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "27eed4125fc13d42163ddb0b8f357b48", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 000000000000..002c6351fd43 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": true, + "hint": "removed generated erb template suffix", + "id": "function", + "name": null, + "values": [ + "_foo_html_erb" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": true, + "hint": "removed generated erb template suffix", + "id": "function", + "name": null, + "values": [ + "_foo_html_erb" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "4067a71d7098866f87c746a57a77b2bb", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 000000000000..7bbc6f583fad --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,118 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "2f908c015ad77a50595512fcf65d344c", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 000000000000..7bbc6f583fad --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,118 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html.erb" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "2f908c015ad77a50595512fcf65d344c", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap new file mode 100644 index 000000000000..305c7ab48ed4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,140 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "bar" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "foo bar" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "bar" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "foo bar" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "60e0a667027bef0d0b7c4882891df7e8", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap new file mode 100644 index 000000000000..f6a455d3dbf4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap @@ -0,0 +1,122 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "acbd18db4cc2f85cedef654fccc4a4d8", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_with_only_required_vars.pysnap new file mode 100644 index 000000000000..fbf833bbc600 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/frame_with_only_required_vars.pysnap @@ -0,0 +1,118 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "1effb24729ae4c43efa36b460511136a", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/go_pkg_mod.pysnap new file mode 100644 index 000000000000..54e45f073ad2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/go_pkg_mod.pysnap @@ -0,0 +1,248 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "*pq.Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "pq: cannot cast jsonb null to type integer" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/go/pkg/mod/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "github.com/robfig/cron/v3" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cron.go" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FuncJob.Run" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.go" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "background.func2" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "98ba9d44b8e7924ce21654996f92c2eb", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "*pq.Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "pq: cannot cast jsonb null to type integer" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "github.com/robfig/cron/v3" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cron.go" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FuncJob.Run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.go" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "background.func2" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "6bbf86806a0ec54202e633626ae09bd4", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_125_event_126.pysnap new file mode 100644 index 000000000000..84d36e0b3625 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_125_event_126.pysnap @@ -0,0 +1,2492 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / 0x00000032" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFBundleGetFunctionPointerForName" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_CFBundleLoadExecutableAndReturnError" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_CFBundleDlfcnLoadBundle" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dyld::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::recursiveRebase" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachOCompressed::rebase" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / 0x00000032" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFBundleGetFunctionPointerForName" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_CFBundleLoadExecutableAndReturnError" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_CFBundleDlfcnLoadBundle" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dyld::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::recursiveRebase" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachOCompressed::rebase" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "3da34e8c72dbcd4a490ac36eb7130638", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_200_event_200.pysnap new file mode 100644 index 000000000000..47f23efd6f06 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_200_event_200.pysnap @@ -0,0 +1,1596 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkpExecuteCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WEBIO_REQUEST::OnIoComplete" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_USER_REQUEST::OnSendRequest" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_BASE_OBJECT::Dereference" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_USER_REQUEST::~HTTP_USER_REQUEST" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "memset" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeUserBlock" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeUserBlockToHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeHeapInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlEnterCriticalSection" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpEnterCriticalSectionContended" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpWaitOnCriticalSection" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpWaitOnAddress" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpOptimizeWaitOnAddressWaitList" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkpExecuteCallback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WEBIO_REQUEST::OnIoComplete" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_USER_REQUEST::OnSendRequest" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_BASE_OBJECT::Dereference" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "HTTP_USER_REQUEST::~HTTP_USER_REQUEST" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "memset" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeUserBlock" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeUserBlockToHeap" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeHeapInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpFreeHeap" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlEnterCriticalSection" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpEnterCriticalSectionContended" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpWaitOnCriticalSection" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpWaitOnAddress" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpOptimizeWaitOnAddressWaitList" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "ca733a48a19d237df8577d09449095d9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_275_event_275.pysnap new file mode 100644 index 000000000000..57f564d1a845 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_275_event_275.pysnap @@ -0,0 +1,1852 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_worker_thread2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_worker_thread2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "2c1bbd635b64d5adccdb64a620044075", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_289_event_312.pysnap new file mode 100644 index 000000000000..545aaf815321 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_289_event_312.pysnap @@ -0,0 +1,1612 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::thread::start_thread_noexcept" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::`anonymous namespace'::thread_proxy" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glDeleteTextures_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleUnbindDeleteHashNamesAndObjects" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleUnbindTextureObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldUpdateDispatch" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldUpdateDispatch" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldCreateDevice" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::thread::start_thread_noexcept" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "thread.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::`anonymous namespace'::thread_proxy" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glDeleteTextures_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleUnbindDeleteHashNamesAndObjects" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleUnbindTextureObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldUpdateDispatch" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldUpdateDispatch" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldCreateDevice" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d90cd4f110751aff5a0a7df3c546a339", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_294.pysnap new file mode 100644 index 000000000000..767fc6a87ac4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_294.pysnap @@ -0,0 +1,2550 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::__destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "utility" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::thread::~thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "default_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::__destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "utility" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::thread::~thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "default_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "12f18dcb1efe33b32c7afe5004addaaa", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_329.pysnap new file mode 100644 index 000000000000..89d3a3243599 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_294_event_329.pysnap @@ -0,0 +1,2636 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_worker_thread2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::__destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "utility" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "demangling_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_wqthread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_worker_thread2" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_dispatch_client_callout" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "memory" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::allocator_traits::__destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "utility" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "demangling_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "12f18dcb1efe33b32c7afe5004addaaa", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_307.pysnap new file mode 100644 index 000000000000..9eded62e33e8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_307.pysnap @@ -0,0 +1,1100 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__dynamic_cast" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__dynamic_cast" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "aeed765d29d1a60cb094f66d2cd8efb2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_657.pysnap new file mode 100644 index 000000000000..c78d50c33394 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_307_event_657.pysnap @@ -0,0 +1,1146 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "aeed765d29d1a60cb094f66d2cd8efb2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_313.pysnap new file mode 100644 index 000000000000..f10c006e923e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_313.pysnap @@ -0,0 +1,3766 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CALLING_SOME_+initialize_METHOD" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CALLING_SOME_+initialize_METHOD" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "e678e9c9f08b5e0f9987605f0f5dbae5", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_333.pysnap new file mode 100644 index 000000000000..73a8a1c07395 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_313_event_333.pysnap @@ -0,0 +1,3608 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CALLING_SOME_+initialize_METHOD" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dyld::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::processInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::recursiveInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachO::doInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachO::doModInitFunctions" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::function::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__value_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__function::__alloc_func::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "__functional_base" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke_void_return_wrapper::__call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "type_traits" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "initialize.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MZ::`anonymous namespace'::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CALLING_SOME_+initialize_METHOD" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dlopen_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dyld::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::processInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoader::recursiveInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachO::doInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ImageLoaderMachO::doModInitFunctions" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__report_load" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "e678e9c9f08b5e0f9987605f0f5dbae5", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_319_event_321.pysnap new file mode 100644 index 000000000000..e6725da492e7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_319_event_321.pysnap @@ -0,0 +1,3828 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_DPSNextEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_BlockUntilNextEventMatchingListInModeWithFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ReceiveNextEventCommon" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RunCurrentEventLoopInMode" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThreadPerformPerform" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSView displayIfNeeded]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSOpenGLContext flushBuffer]" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLFlushDrawable" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glSwap_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldPresentFramebufferData" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SwapFlush" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_NSTryRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_DPSNextEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_BlockUntilNextEventMatchingListInModeWithFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ReceiveNextEventCommon" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RunCurrentEventLoopInMode" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThreadPerformPerform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSView displayIfNeeded]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSOpenGLContext flushBuffer]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLFlushDrawable" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glSwap_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldPresentFramebufferData" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SwapFlush" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_NSTryRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "f6d6be7dc293b9a8dad3b8aa2a567e49", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_389_event_389.pysnap new file mode 100644 index 000000000000..73be3779eda5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_389_event_389.pysnap @@ -0,0 +1,728 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_body" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_testcancel" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_body" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_testcancel" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "aeed765d29d1a60cb094f66d2cd8efb2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_432.pysnap new file mode 100644 index 000000000000..f2a52ee07aa6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_432.pysnap @@ -0,0 +1,2240 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpTpWorkCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpTpWorkCallback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "4ab7102beb2132ba98606306a88fcdb8", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_453.pysnap new file mode 100644 index 000000000000..9207e63c0269 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_432_event_453.pysnap @@ -0,0 +1,2240 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpTpWorkCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xtree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Tree::insert" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xtree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Tree::_Emplace" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TppWorkerThread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlpTpWorkCallback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xtree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Tree::insert" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xtree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Tree::_Emplace" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "f1cecca3f7a7663f9c2e639a44c20047", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_445_event_445.pysnap new file mode 100644 index 000000000000..05bf77c6f6f0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/group_445_event_445.pysnap @@ -0,0 +1,2450 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "winmain.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wWinMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::{ctor}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::_Reallocate_for" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Func_class::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "purevirt.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_purecall" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x40000015 / 0x00000001" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "winmain.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wWinMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::{ctor}" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "xstring" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::basic_string::_Reallocate_for" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "functional" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Func_class::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "function_template.hpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "boost::function0::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "purevirt.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_purecall" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "7388d8aa6c112020d5c3e7b180fd0b88", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap new file mode 100644 index 000000000000..8fd5fe45af1c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap @@ -0,0 +1,65 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message_hybrid_fingerprint": { + "client_values": [ + "{{ default }}", + "dogs are great" + ], + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message and custom client fingerprint", + "hash": "abba9a2abb368402ddb0087f2fd35161", + "hint": null, + "key": "app_exception_message_hybrid_fingerprint", + "type": "salted_component", + "values": [ + "{{ default }}", + "dogs are great" + ] + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 000000000000..412ca454e4d6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,1624 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace_hybrid_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames and custom server fingerprint", + "hash": "48b7c477395bac7808f08b858e0e60ce", + "hint": null, + "key": "app_exception_stacktrace_hybrid_fingerprint", + "matched_rule": "type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\"", + "type": "salted_component", + "values": [ + "{{ default }}", + "soft-timelimit-exceeded" + ] + }, + "system_exception_stacktrace_hybrid_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames and custom server fingerprint", + "hash": "5ccb31c375a89ea9080ab8c582db85bc", + "hint": null, + "key": "system_exception_stacktrace_hybrid_fingerprint", + "matched_rule": "type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\"", + "type": "salted_component", + "values": [ + "{{ default }}", + "soft-timelimit-exceeded" + ] + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 000000000000..6f041f16dc25 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,1621 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "custom_server_fingerprint": { + "client_values": [ + "{{ default }}", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom server fingerprint", + "hash": "24793dce104101c91709115d8d5e6b3c", + "hint": null, + "key": "custom_server_fingerprint", + "matched_rule": "type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\"", + "type": "custom_fingerprint", + "values": [ + "soft-timelimit-exceeded" + ] + }, + "system_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because custom server fingerprint takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SoftTimeLimitExceeded" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "SoftTimeLimitExceeded()" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapped" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _do_process_event(cache_key, start_time, event_id, process_event)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.store" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "store.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_do_process_event" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "new_data = process_stacktraces(data)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.stacktraces" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "stacktraces.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process_stacktraces" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if processor.preprocess_step(processing_task):" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "preprocess_step" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "referenced_images=referenced_images," + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.lang.native.symbolizer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "symbolizer.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "with_conversion_errors=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_symcaches" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.debugfile" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "debugfile.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_load_cachefiles_via_fs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "model.cache_file.save_to(cachefile_path)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "save_to" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=False).detach_tempfile()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_get_chunked_blob" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "delete=delete" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__init__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._prefetch(prefetch_to, delete)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.models.file" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "file.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_prefetch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures._base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__exit__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.shutdown(wait=True)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "concurrent.futures.thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "shutdown" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "t.join(sys.maxint)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "join" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.__block.wait(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "threading" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threading.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wait" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_sleep(delay)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "billiard.pool" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "pool.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "soft_timeout_sighandler" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise SoftTimeLimitExceeded()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — all frames", + "hash": null, + "hint": "ignored because custom server fingerprint takes precedence", + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 000000000000..ff8a607f30fa --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,65 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message_hybrid_fingerprint": { + "client_values": [ + "{{ default }}", + "adopt don't shop" + ], + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Charlie didn't bring the ball back!" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message and custom client fingerprint", + "hash": "0f58238774d450eca3e1e3308c07d406", + "hint": null, + "key": "app_exception_message_hybrid_fingerprint", + "type": "salted_component", + "values": [ + "{{ default }}", + "adopt don't shop" + ] + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 000000000000..a3aa51ba2b01 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,65 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message_hybrid_fingerprint": { + "client_values": [ + "{{ default }}", + "dogs are great" + ], + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "FailedToFetchError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "FailedToFetchError: Maisey can't see the ball anymore :-(" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message and custom client fingerprint", + "hash": "d2aed060b28939907a736431aef667e2", + "hint": null, + "key": "app_exception_message_hybrid_fingerprint", + "type": "salted_component", + "values": [ + "{{ default }}", + "dogs are great" + ] + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/in_app_in_ui.pysnap new file mode 100644 index 000000000000..27c53f03ca0b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/in_app_in_ui.pysnap @@ -0,0 +1,2280 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BREAKPOINT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "autoplayOption" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.m" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoObservers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::observer_callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::layout_and_display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::layout_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[CALayer layoutSublayers]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIView(CALayerDelegate) layoutSublayersOfLayer:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TableView.layoutSubviews" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView layoutSubviews]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView _updateVisibleCellsNow:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "anytableviewcontroller.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dailydigesttableviewsection.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DailyDigestTableViewSection.photoCell" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Sequence.compactMap" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSource" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CurrentUserProfile.isVideoAutoplay.getter" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "currentuserprofile.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CurrentUserProfile.isVideoAutoplay.getter" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "currentuserprofile.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "value" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "5b032559156688c9eabe4e4bd5ae6bd4", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BREAKPOINT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "autoplayOption" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.m" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIApplication _run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GSEventRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoObservers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::observer_callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::layout_and_display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::layout_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[CALayer layoutSublayers]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UIView(CALayerDelegate) layoutSublayersOfLayer:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TableView.layoutSubviews" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView layoutSubviews]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView _updateVisibleCellsNow:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "anytableviewcontroller.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AnyTableViewController.tableView" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dailydigesttableviewsection.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DailyDigestTableViewSection.photoCell" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Sequence.compactMap" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "closure" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSources" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "mediaslideshow+extensions.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "MediaSlideshow.toSource" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CurrentUserProfile.isVideoAutoplay.getter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "currentuserprofile.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CurrentUserProfile.isVideoAutoplay.getter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "currentuserprofile.swift" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "value" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "1921b991270e24c19ea1ed6863892d71", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_chained.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_chained.pysnap new file mode 100644 index 000000000000..f1b875f155ba --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_chained.pysnap @@ -0,0 +1,3925 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "BindException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Address already in use" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.Connector" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connector.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProtocol" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprotocol.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.AbstractEndpoint" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.NioEndpoint" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nioendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.ServerSocketAdaptor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "serversocketadaptor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.ServerSocketChannelImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "serversocketchannelimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind0" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "LifecycleException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "service.getName(): \"Tomcat\"; Protocol handler start failed" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.Connector" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connector.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startInternal" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "LifecycleException" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Failed to start component [Connector[HTTP/-]]" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:framework -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "chained exception stacktraces — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_chained_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "Failed to start connector [Connector[HTTP/-]]" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "BindException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Address already in use" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:io.sentry.* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.Connector" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connector.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProtocol" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprotocol.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.AbstractEndpoint" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.NioEndpoint" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nioendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.ServerSocketAdaptor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "serversocketadaptor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.ServerSocketChannelImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "serversocketchannelimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sun.nio.ch.Net" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "net.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bind0" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "LifecycleException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "service.getName(): \"Tomcat\"; Protocol handler start failed" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:io.sentry.* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.Connector" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connector.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startInternal" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "LifecycleException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Failed to start component [Connector[HTTP/-]]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:io.sentry.* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refreshContext" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.SpringApplication" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "springapplication.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.context.support.AbstractApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "refresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finishRefresh" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "embeddedwebapplicationcontext.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "startEmbeddedServletContainer" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "tomcatembeddedservletcontainer.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addPreviouslyRemovedConnectors" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardService" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardservice.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "addConnector" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.util.LifecycleBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lifecyclebase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "db7a5bf0e72c22eb770a3be8940782c6", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_minimal.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_minimal.pysnap new file mode 100644 index 000000000000..e634f87a84e9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/java_minimal.pysnap @@ -0,0 +1,3983 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ArithmeticException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "/ by zero" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.Thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "taskthread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.util.concurrent.ThreadPoolExecutor$Worker" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threadpoolexecutor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.util.concurrent.ThreadPoolExecutor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threadpoolexecutor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.SocketProcessorBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "socketprocessorbase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nioendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProtocol$ConnectionHandler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprotocol.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProcessorLight" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprocessorlight.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.http11.Http11Processor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "http11processor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.CoyoteAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "coyoteadapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardEngineValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardenginevalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.valves.ErrorReportValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errorreportvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardHostValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardhostvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.authenticator.AuthenticatorBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "authenticatorbase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardContextValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardcontextvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardWrapperValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardwrappervalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.CharacterEncodingFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "characterencodingfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.HiddenHttpMethodFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hiddenhttpmethodfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.HttpPutFormContentFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpputformcontentfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.RequestContextFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestcontextfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.websocket.server.WsFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "wsfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "javax.servlet.http.HttpServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "javax.servlet.http.HttpServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doGet" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processRequest" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.DispatcherServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "dispatcherservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doService" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.DispatcherServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "dispatcherservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doDispatch" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstracthandlermethodadapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestmappinghandleradapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestmappinghandleradapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeHandlerMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "servletinvocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeAndHandle" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.method.support.InvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "invocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeForRequest" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.method.support.InvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "invocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doInvoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.DelegatingMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "delegatingmethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.NativeMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nativemethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.NativeMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nativemethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "home" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ArithmeticException: / by zero] with root cause" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ArithmeticException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "/ by zero" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.Thread" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "thread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "taskthread.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.util.concurrent.ThreadPoolExecutor$Worker" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threadpoolexecutor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.util.concurrent.ThreadPoolExecutor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "threadpoolexecutor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runWorker" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.SocketProcessorBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "socketprocessorbase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nioendpoint.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doRun" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProtocol$ConnectionHandler" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprotocol.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.AbstractProcessorLight" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstractprocessorlight.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "process" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.coyote.http11.Http11Processor" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "http11processor.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.connector.CoyoteAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "coyoteadapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardEngineValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardenginevalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.valves.ErrorReportValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errorreportvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardHostValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardhostvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.authenticator.AuthenticatorBase" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "authenticatorbase.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardContextValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardcontextvalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.StandardWrapperValve" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "standardwrappervalve.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.CharacterEncodingFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "characterencodingfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.HiddenHttpMethodFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hiddenhttpmethodfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.HttpPutFormContentFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpputformcontentfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.OncePerRequestFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onceperrequestfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.filter.RequestContextFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestcontextfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilterInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.tomcat.websocket.server.WsFilter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "wsfilter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.apache.catalina.core.ApplicationFilterChain" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applicationfilterchain.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "internalDoFilter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "javax.servlet.http.HttpServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "javax.servlet.http.HttpServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "httpservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "service" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doGet" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.FrameworkServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "frameworkservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processRequest" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.DispatcherServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "dispatcherservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doService" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.DispatcherServlet" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "dispatcherservlet.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doDispatch" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "abstracthandlermethodadapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestmappinghandleradapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handleInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "requestmappinghandleradapter.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeHandlerMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "servletinvocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeAndHandle" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.method.support.InvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "invocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeForRequest" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "org.springframework.web.method.support.InvocableHandlerMethod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "invocablehandlermethod.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "doInvoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "java.lang.reflect.Method" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "method.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.DelegatingMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "delegatingmethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.NativeMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nativemethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jdk.internal.reflect.NativeMethodAccessorImpl" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "nativemethodaccessorimpl.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:io.sentry.* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "io.sentry.example.Application" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "application.java" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "home" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "6c27831782d10c44d7d0a01ef3f9c71e", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 000000000000..a27f7e3f257c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Loading chunk failed.\n(timeout: " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "10dfd81e2df31e96fae451b9e205ad81", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 000000000000..890fd0fbe31d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + ": logged in (error ) time spent --- correlation id , checksum (md5 ); payload timestamp (submitted from via via ) at offset " + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "b8e2a347e75266ca7bb565e2b3c0722e", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap new file mode 100644 index 000000000000..1d60ca1a5f59 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap @@ -0,0 +1,900 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ReferenceError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "varant is not defined" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchInteractiveEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "interactiveUpdates" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "interactiveUpdates$1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performSyncWork" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performWork" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performWorkOnRoot" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "renderRoot" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "replayUnitOfWork" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeGuardedCallback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "invokeGuardedCallbackDev" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "sentryWrapped" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callCallback" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ReferenceError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "varant is not defined" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatchInteractiveEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "interactiveUpdates" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "interactiveUpdates$1" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performSyncWork" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performWork" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "performWorkOnRoot" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "renderRoot" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "replayUnitOfWork" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invokeGuardedCallback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "invokeGuardedCallbackDev" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "sentryWrapped" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "react-dom.development.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callCallback" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "e734632ed44ebbaaeee1d0f589397a1a", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message.pysnap new file mode 100644 index 000000000000..cfa00e697520 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "event" + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "4119639092e62c55ea8be348e4d9260d", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message_parameterization.pysnap new file mode 100644 index 000000000000..a2e1d3964ee3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_message_parameterization.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "message", + "name": "message", + "values": [ + "testing testing , , " + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "f9e47f16e3b9770b440157179c47bf7a", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_polyfills.pysnap new file mode 100644 index 000000000000..209d6963f721 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_polyfills.pysnap @@ -0,0 +1,306 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (module:@babel/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (module:core-js/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "core-js/internals/task" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "listener" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (module:tslib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "tslib/tslib.es6" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "sent" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "be36642f41f047346396f018f62375d3", + "hint": null, + "key": "app_exception_message", + "type": "component" + }, + "system_exception_message": { + "component": { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:@babel/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:core-js/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "core-js/internals/task" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "listener" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (module:tslib/** -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "tslib/tslib.es6" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "sent" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception message", + "hash": null, + "hint": "ignored because app exception takes precedence", + "key": "system_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap new file mode 100644 index 000000000000..6b9ce31a02d0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap @@ -0,0 +1,126 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored single non-URL JavaScript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_url_frame.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_url_frame.pysnap new file mode 100644 index 000000000000..9f72549b9730 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_single_url_frame.pysnap @@ -0,0 +1,126 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_unpkg.pysnap new file mode 100644 index 000000000000..8b9cd7a4e882 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_unpkg.pysnap @@ -0,0 +1,376 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**https://unpkg.com/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-dom@16.13.1/umd/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unpkg" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**https://cdnjs.cloudflare.com/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "cdnjs" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**https://cdn.jsdelivr.net/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "jquery.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jsdelivr" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**https://esm.run/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "d3@7.6.1" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-dom@16.13.1/umd/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unpkg" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "cdnjs" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "jquery.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "jsdelivr" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "d3@7.6.1" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "run" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "96955d6eb6b1c842b7c64ac8eb3ffe8d", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_url_path_as_module.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_url_path_as_module.pysnap new file mode 100644 index 000000000000..6f0d0d227a84 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_url_path_as_module.pysnap @@ -0,0 +1,188 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dogs.are.great" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored bad javascript module", + "id": "module", + "name": null, + "values": [ + "adopt/dont/shop.js" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "shop.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "dogs.are.great" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "great.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored bad javascript module", + "id": "module", + "name": null, + "values": [ + "adopt/dont/shop.js" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "shop.js" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "1001e7b7dd0155a6d4021cd6d6b9f50d", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap new file mode 100644 index 000000000000..db3fb2583cd5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,760 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "811a408067f03b8eff2437a8e7515966", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap new file mode 100644 index 000000000000..2859a1e5dccd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap @@ -0,0 +1,768 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eval code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "native code" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eval code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "native code" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "811a408067f03b8eff2437a8e7515966", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap new file mode 100644 index 000000000000..5b436b88e795 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,698 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "test/<" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "test/<" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "811a408067f03b8eff2437a8e7515966", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 000000000000..e7167181dd3c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,796 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c21dd7692399d460904836c279bbeb36", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 000000000000..e47ddc9d6975 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,804 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eval code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "native code" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eval code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "native code" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "Anonymous function" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c21dd7692399d460904836c279bbeb36", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 000000000000..cd8d423be64e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,734 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "test/<" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "test/<" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c21dd7692399d460904836c279bbeb36", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 000000000000..6e176ca68e17 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,858 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "test" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c21dd7692399d460904836c279bbeb36", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap new file mode 100644 index 000000000000..b9b18b7f6501 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap @@ -0,0 +1,826 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "testMethod" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "eval" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "test" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "map" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callback" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callAnotherThing" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "test.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "aha" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "811a408067f03b8eff2437a8e7515966", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 000000000000..e852ba316f93 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,1692 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NotFoundError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "GET /issues//events/latest/ " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/_microtask" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_microtask.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "M" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fn();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "es6.promise.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fn" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "while (chain.length > i) run(chain[i++]); // variable length - can't use forEach" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "es6.promise.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = handler(value); // may throw" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_next" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "asyncGeneratorStep" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var info = gen[key](arg);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "key" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return this._invoke(method, arg);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var record = tryCatch(innerFn, self, context);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "tryCatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return { type: \"normal\", arg: fn.call(obj, arg) };" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/lazyLoad" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lazyload.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fn" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.setState({" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} !==typeof a&&\"function\"!==typeof a&&null!=a?B(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=functi {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} );e.payload=b;void 0!==c&&null!==c&&(e.callback=c);ff(a,e);If(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gf();d {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "If" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} );else if(c=b.expirationTime,0===c||aah&&($g=0,t(\"185\"))}} {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Yg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ),qh(),oh(),lh=kh;else for(;null!==Y&&0!==Z&&(0===a||a>=Z);)Xg(Y,Z,!0),qh();null!==hh&&(ch=0,dh=null);0!==Z&&Zg(Y,Z);hh=null;eh=!1;$g=0;mh=n {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Xg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finishedWork,null!==d&&rh( {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "rh" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} nate;q=Q;p=y;switch(q.tag){case 2:case 3:var X=q.stateNode;if(q.effectTag&4)if(null===oc)X.props=q.memoizedProps,X.state=q.memoizedState,X.c {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "X" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.fetchData();" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/api" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "api.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "const preservedError = new Error();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "b5165008246a0897e1e7d18eb1df4d33", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NotFoundError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "GET /issues//events/latest/ " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/_microtask" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_microtask.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "M" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fn();" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "es6.promise.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fn" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "while (chain.length > i) run(chain[i++]); // variable length - can't use forEach" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "es6.promise.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = handler(value); // may throw" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_next" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "asyncGeneratorStep" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var info = gen[key](arg);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "key" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return this._invoke(method, arg);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var record = tryCatch(innerFn, self, context);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "tryCatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return { type: \"normal\", arg: fn.call(obj, arg) };" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/lazyLoad" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lazyload.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fn" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.setState({" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} !==typeof a&&\"function\"!==typeof a&&null!=a?B(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=functi {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} );e.payload=b;void 0!==c&&null!==c&&(e.callback=c);ff(a,e);If(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gf();d {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "If" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} );else if(c=b.expirationTime,0===c||aah&&($g=0,t(\"185\"))}} {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Yg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ),qh(),oh(),lh=kh;else for(;null!==Y&&0!==Z&&(0===a||a>=Z);)Xg(Y,Z,!0),qh();null!==hh&&(ch=0,dh=null);0!==Z&&Zg(Y,Z);hh=null;eh=!1;$g=0;mh=n {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Xg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finishedWork,null!==d&&rh( {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "rh" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} nate;q=Q;p=y;switch(q.tag){case 2:case 3:var X=q.stateNode;if(q.effectTag&4)if(null===oc)X.props=q.memoizedProps,X.state=q.memoizedState,X.c {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "X" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.fetchData();" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/api" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "api.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "const preservedError = new Error();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "f9e1efa045242909883a37dc74e4fc97", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 000000000000..5987d97e4d8e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,1406 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NotFoundError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "GET /issues//events/latest/ " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked in-app by the client but ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "promiseReactionJob" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_next" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "asyncGeneratorStep" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var info = gen[key](arg);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "key" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var record = tryCatch(innerFn, self, context);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "tryCatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return { type: \"normal\", arg: fn.call(obj, arg) };" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/lazyLoad" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lazyload.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "call" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.setState({" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setState" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ructor=G;m(H,E.prototype);H.isPureReactComponent=!0;var I={current:null,currentDispatcher:null},J=Object.prototype.hasOwnProperty,K={key:!0, {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "enqueueSetState" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} &(e.callback=c);ff(a,e);If(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gf();c=Hf(c,a);var d=df(c);d.tag=2;void 0!==" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tag" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "var U=null,T=null,ch=0,dh=void 0,V=!1,Y=null,Z=0,Vg=0,eh=!1,fh=!1,gh=null,hh=null,W=!1,Wg=!1,Ug=!1,ih=null,jh=ba.unstable_now(),kh=(jh/10|0) {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Yg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "function Xg(a,b,c){V?t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finis {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Xg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "function rh(a,b,c){var d=a.firstBatch;if(null!==d&&d._expirationTime<=c&&(null===ih?ih=[d]:ih.push(d),d._defer)){a.finishedWork=b;a.expirati {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ih" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} .__reactInternalSnapshotBeforeUpdate)}var kg=q.updateQueue;null!==kg&&(X.props=q.memoizedProps,X.state=q.memoizedState,lf(q,kg,X,p));break;c {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "q" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.fetchData();" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchData" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/api" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "api.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "const preservedError = new Error();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "b5165008246a0897e1e7d18eb1df4d33", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NotFoundError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "GET /issues//events/latest/ " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename suggests native code", + "id": "filename", + "name": null, + "values": [ + "[native code]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "promiseReactionJob" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_next" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asynctogenerator.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "asyncGeneratorStep" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var info = gen[key](arg);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "key" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var record = tryCatch(innerFn, self, context);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runtime.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "tryCatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return { type: \"normal\", arg: fn.call(obj, arg) };" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/components/lazyLoad" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "lazyload.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "call" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.setState({" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "setState" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ructor=G;m(H,E.prototype);H.isPureReactComponent=!0;var I={current:null,currentDispatcher:null},J=Object.prototype.hasOwnProperty,K={key:!0, {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "enqueueSetState" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} &(e.callback=c);ff(a,e);If(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gf();c=Hf(c,a);var d=df(c);d.tag=2;void 0!==" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tag" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "var U=null,T=null,ch=0,dh=void 0,V=!1,Y=null,Z=0,Vg=0,eh=!1,fh=!1,gh=null,hh=null,W=!1,Wg=!1,Ug=!1,ih=null,jh=ba.unstable_now(),kh=(jh/10|0) {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Yg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "function Xg(a,b,c){V?t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finis {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Xg" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "function rh(a,b,c){var d=a.firstBatch;if(null!==d&&d._expirationTime<=c&&(null===ih?ih=[d]:ih.push(d),d._defer)){a.finishedWork=b;a.expirati {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "react-dom.production.min.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ih" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} .__reactInternalSnapshotBeforeUpdate)}var kg=q.updateQueue;null!==kg&&(X.props=q.memoizedProps,X.state=q.memoizedState,lf(q,kg,X,p));break;c {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "q" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.fetchData();" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/views/groupDetails/shared/groupEventDetails" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "groupeventdetails.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchData" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app/api" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "api.jsx" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fetchGroupEventAndMarkSeen" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "const preservedError = new Error();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "ff35b5385c8228096073758c6f50075b", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel.pysnap new file mode 100644 index 000000000000..4f300cebcb62 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel.pysnap @@ -0,0 +1,4304 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "LARAVEL TEST" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "server.php" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "require_once __DIR__.'/public/index.php';" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "index.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "require_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$request = Illuminate\\Http\\Request::capture()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $this->sendRequestThroughRouter($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "->then($this->dispatchToRouter());" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::then" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $pipeline($this->passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "checkformaintenancemode.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "validatepostsize.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "transformsrequest.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "transformsrequest.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "trustproxies.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Fideloper\\Proxy\\TrustProxies::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $destination($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->router->dispatch($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->dispatchToRoute($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::dispatchToRoute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->runRoute($request, $this->findRoute($request));" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::runRoute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$this->runRouteWithinStack($route, $request)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::runRouteWithinStack" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "});" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::then" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $pipeline($this->passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "encryptcookies.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Cookie\\Middleware\\EncryptCookies::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->encrypt($next($this->decrypt($request)));" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "addqueuedcookiestoresponse.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "startsession.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Session\\Middleware\\StartSession::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $next($request), $session" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "shareerrorsfromsession.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\View\\Middleware\\ShareErrorsFromSession::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "verifycsrftoken.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return tap($next($request), function ($response) use ($request) {" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "substitutebindings.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Middleware\\SubstituteBindings::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $destination($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$request, $route->run()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "route.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Route::run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->runCallable();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "route.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Route::runCallable" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$this->parametersWithoutNulls(), new ReflectionFunction($this->action['uses'])" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "web.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "throw new Exception('LARAVEL TEST');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "04604148d9d04bfb7b3b3c19810a995c", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "LARAVEL TEST" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "server.php" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "require_once __DIR__.'/public/index.php';" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "index.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "require_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$request = Illuminate\\Http\\Request::capture()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $this->sendRequestThroughRouter($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "->then($this->dispatchToRouter());" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::then" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $pipeline($this->passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "checkformaintenancemode.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "validatepostsize.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "transformsrequest.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "transformsrequest.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "trustproxies.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Fideloper\\Proxy\\TrustProxies::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $destination($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "kernel.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->router->dispatch($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->dispatchToRoute($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::dispatchToRoute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->runRoute($request, $this->findRoute($request));" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::runRoute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$this->runRouteWithinStack($route, $request)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::runRouteWithinStack" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "});" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::then" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $pipeline($this->passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "encryptcookies.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Cookie\\Middleware\\EncryptCookies::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->encrypt($next($this->decrypt($request)));" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "addqueuedcookiestoresponse.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "startsession.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Session\\Middleware\\StartSession::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$response = $next($request), $session" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "shareerrorsfromsession.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\View\\Middleware\\ShareErrorsFromSession::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "verifycsrftoken.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return tap($next($request), function ($response) use ($request) {" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "substitutebindings.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Middleware\\SubstituteBindings::handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $next($request);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $destination($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "router.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$request, $route->run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "route.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Route::run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $this->runCallable();" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "route.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\Route::runCallable" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "$this->parametersWithoutNulls(), new ReflectionFunction($this->action['uses'])" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "web.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "throw new Exception('LARAVEL TEST');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "f3b018db683f7190f410fec0fbc1a9b3", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel_anonymous.pysnap new file mode 100644 index 000000000000..20fbeebe0312 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/laravel_anonymous.pysnap @@ -0,0 +1,356 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "LARAVEL TEST" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "server.php" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "require_once __DIR__.'/public/index.php';" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": "anonymous class method", + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "bf617e996d4427cda2f75c965c4266e2", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Exception" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "LARAVEL TEST" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "server.php" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "require_once __DIR__.'/public/index.php';" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": "anonymous class method", + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return $callable($passable);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "pipeline.php" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "? $pipe->{$this->method}(...$parameters)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "dc13fee96d9e544e8aee8f1b4e6cbf22", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_prefers_message.pysnap new file mode 100644 index 000000000000..7585d22fd0ed --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_prefers_message.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there %s!" + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "8ec8bbc71eb6e2af7fbe5076a8534f96", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_uses_formatted.pysnap new file mode 100644 index 000000000000..a004b673b52c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/logentry_uses_formatted.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there world!" + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "329b29efcf1f77067a063e34f56e7791", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_amd_driver.pysnap new file mode 100644 index 000000000000..b72cda032fc5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_amd_driver.pysnap @@ -0,0 +1,3138 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glTexSubImage2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glTexSubImage2D_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleTextureImagePut" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CFRunLoopRunSpecific" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopRun" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSources0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRunLoopDoSource0" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glTexSubImage2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "glTexSubImage2D_Exec" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gleTextureImagePut" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "11e3dca34353528edf7608d914e134f9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_intel_driver.pysnap new file mode 100644 index 000000000000..d64a7ca3bc4b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/macos_intel_driver.pysnap @@ -0,0 +1,3866 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_DPSNextEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_BlockUntilNextEventMatchingListInModeWithFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ReceiveNextEventCommon" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RunCurrentEventLoopInMode" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThreadPerformPerform" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSView displayIfNeeded]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_NSTryRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:telemetry -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "0x00000000 / 0x00000000" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication run]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_DPSNextEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_BlockUntilNextEventMatchingListInModeWithFilter" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ReceiveNextEventCommon" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RunCurrentEventLoopInMode" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThreadPerformPerform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[NSView displayIfNeeded]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:telemetry -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_NSTryRunModal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Transaction::commit" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Context::commit_transaction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CA::Layer::display_if_needed" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[_NSOpenGLViewBackingLayer display]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CGLDescribeRenderer" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gliSetInteger" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gldFlushObject" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "intelSubmitCommands" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "IntelCommandBuffer::getNew" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusSubmitDataBuffers" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusKillClientExt" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "gpusGenerateCrashLog.cold.1" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "22760595718fcd37489c365e30a5e166", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/malloc_sentinel.pysnap new file mode 100644 index 000000000000..7bf259401fe7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/malloc_sentinel.pysnap @@ -0,0 +1,1620 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SIGABRT" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::basic_string::~basic_string" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "free" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_report" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_vreport" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "pthread_kill" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SIGABRT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "stripped_application_code" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "stripped_application_code" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::basic_string::~basic_string" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "free" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_report" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_vreport" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "pthread_kill" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "44fcfaf834a1238bfaa22fcfabeea65f", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_prefers_message.pysnap new file mode 100644 index 000000000000..7585d22fd0ed --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_prefers_message.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there %s!" + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "8ec8bbc71eb6e2af7fbe5076a8534f96", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_uses_formatted.pysnap new file mode 100644 index 000000000000..7df656290467 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_uses_formatted.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there Peter!" + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "d3f5e52d24e9c1eae5abe6c866cced63", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_with_key_pair_values.pysnap new file mode 100644 index 000000000000..d1f870b620a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/message_with_key_pair_values.pysnap @@ -0,0 +1,33 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": "stripped event-specific values", + "id": "message", + "name": "message", + "values": [ + "Error key1= key2= key3= key4= key5= other_date=datetime.datetime(, , , , , tzinfo=d..." + ] + } + ] + }, + "contributes": true, + "description": "message", + "hash": "96165d7350648408b585a16cdec87b5c", + "hint": null, + "key": "message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/minified_javascript.pysnap new file mode 100644 index 000000000000..9263024b5256 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/minified_javascript.pysnap @@ -0,0 +1,2040 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NS_ERROR_NOT_INITIALIZED" + ] + }, + { + "contributes": false, + "hint": null, + "id": "value", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "M" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} o,r;for(b&&(o=i.domain)&&o.exit();t;){r=t.fn,t=t.next;try{r()}catch(o){throw t?n():e=void 0,o}}e=void 0,o&&o.enter()};if(b)n=function(){i.n {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "S/<" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ,M):b(n)):M(o)}catch(t){a&&!i&&a.exit(),M(t)}};n.length>p;)i(n[p++]);t._c=[],t._n=!1,e&&!t._h&&x(t)})}},x=function(t){d.call(b,function(){va {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "i" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ry{c?(r||(2==t._h&&T(t),t._h=1),!0===c?n=o:(a&&a.enter(),n=c(o),a&&(a.exit(),i=!0)),n===e.promise?M(y(\"Promise-chain cycle\")):(p=N(n))?p.cal {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "b" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ply(e,o);function c(t){n(i,r,p,c,b,\"next\",t)}function b(t){n(i,r,p,c,b,\"throw\",t)}c(void 0)})}}},,,function(t,e,n){(t.exports=n(1466)).tz.lo {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "n" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} e)}},function(t,e){function n(t,e,n,o,r,p,i){try{var c=t[p](i),b=c.value}catch(t){return void n(t)}c.done?e(b):Promise.resolve(b).then(o,r)} {snip}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "g/p;)i(n[p++]);t._c=[],t._n=!1,e&&!t._h&&x(t)})}},x=function(t){d.call(b,function(){va {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "i" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ry{c?(r||(2==t._h&&T(t),t._h=1),!0===c?n=o:(a&&a.enter(),n=c(o),a&&(a.exit(),i=!0)),n===e.promise?M(y(\"Promise-chain cycle\")):(p=N(n))?p.cal {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "b" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} ply(e,o);function c(t){n(i,r,p,c,b,\"next\",t)}function b(t){n(i,r,p,c,b,\"throw\",t)}c(void 0)})}}},,,function(t,e,n){(t.exports=n(1466)).tz.lo {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "n" + ] + }, + { + "contributes": false, + "hint": "ignored because line is too long", + "id": "context_line", + "name": null, + "values": [ + "{snip} e)}},function(t,e){function n(t,e,n,o,r,p,i){try{var c=t[p](i),b=c.value}catch(t){return void n(t)}c.done?e(b):Promise.resolve(b).then(o,r)} {snip}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry/dist/vendor" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "vendor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "g/::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "9b78cced1eefcd0c655a0a3d8ce2cdd2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash1.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash1.pysnap new file mode 100644 index 000000000000..c4a379524052 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash1.pysnap @@ -0,0 +1,538 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CD3D11LayeredChild::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter10" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CD3D11LayeredChild::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter10" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "2e0d26cae5986fcda5edf66612a78268", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash2.pysnap new file mode 100644 index 000000000000..b05d06a6f7d1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash2.pysnap @@ -0,0 +1,472 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter10" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter10" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c85e23e804b52ea4b9f290ba838e77a0", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash3.pysnap new file mode 100644 index 000000000000..1839a55151c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_driver_crash3.pysnap @@ -0,0 +1,596 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NOutermost::CDeviceChild::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter12" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CUseCountedObject::UCDestroy" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "destructor'" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NOutermost::CDeviceChild::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CContext::LUCBeginLayerDestruction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "NDXGI::CDevice::DestroyDriverInstance" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "OpenAdapter12" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "784442a33bd16c15013bb8f69f68e7d6", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_limit_frames.pysnap new file mode 100644 index 000000000000..f2910f773437 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_limit_frames.pysnap @@ -0,0 +1,294 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored because only 1 frame is considered by custom stacktrace rule (family:native max-frames=1)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "8f4c7709e4af98d3c47ce3519690e6d9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_malloc_chain.pysnap new file mode 100644 index 000000000000..79914a8ebb52 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_malloc_chain.pysnap @@ -0,0 +1,480 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "application_frame" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_zone_malloc" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_malloc" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate_from_block" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate_from_block.cold.1" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "application_frame" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "malloc_zone_malloc" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_malloc" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate_from_block" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "nanov2_allocate_from_block.cold.1" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "3ff01ce959249abecc6bc8a8f1432b0b", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_no_filenames.pysnap new file mode 100644 index 000000000000..7b113766d1e0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_no_filenames.pysnap @@ -0,0 +1,976 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::integrations::log::Logger::log" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "418120a66f7031923031f5c52aca0724", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::integrations::log::Logger::log" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry::hub::Hub::with_active::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored unknown function", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "bbcdb2e1d8df09ffe0fffd30fb361d4b", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_unlimited_frames.pysnap new file mode 100644 index 000000000000..16bf738f7124 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_unlimited_frames.pysnap @@ -0,0 +1,294 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "::operator()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "9b78cced1eefcd0c655a0a3d8ce2cdd2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_windows_anon_namespace.pysnap new file mode 100644 index 000000000000..9a915d7a7497 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_windows_anon_namespace.pysnap @@ -0,0 +1,438 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`anonymous namespace'::start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`anonymous namespace'::crash" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`anonymous namespace'::start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`anonymous namespace'::crash" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "46b84e4da51648cc9f9741abd2bdad51", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_with_function_name.pysnap new file mode 100644 index 000000000000..2a48d04d0ef4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/native_with_function_name.pysnap @@ -0,0 +1,379 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::crash" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::something::nested::Foo::crash" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because thread has no stacktrace", + "id": "threads", + "name": "thread", + "values": [] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::crash" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "(anonymous namespace)::something::nested::Foo::crash" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c29439027eafcf7642f641554ab0f0ef", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_exception_weird.pysnap new file mode 100644 index 000000000000..26e9b265d72b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_exception_weird.pysnap @@ -0,0 +1,952 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bla" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "withScope" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "*/" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "onunhandledrejection.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onunhandledrejection.ts" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "mockConstructor [as captureException]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return fn.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "})();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finalReturnValue" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return specificMockImpl.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return original.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "captureException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if (maxBreadcrumbs <= 0) {" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "invokeClient" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "* @returns Scope, the new cloned scope" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "baseclient.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "baseclient.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "captureException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "promisedEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "backend.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "backend.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "eventFromException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "6a84e724a0d67c6b036ecc24fcfb4be5", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "bla" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "withScope" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "*/" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "onunhandledrejection.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "onunhandledrejection.ts" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "mockConstructor [as captureException]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return fn.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "})();" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "finalReturnValue" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return specificMockImpl.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "jest-mock.build:index" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "index.js" + ] + }, + { + "contributes": false, + "hint": "ignored unknown function name", + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return original.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "captureException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "if (maxBreadcrumbs <= 0) {" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "hub" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "hub.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "invokeClient" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "* @returns Scope, the new cloned scope" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "baseclient.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "baseclient.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "captureException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "promisedEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "backend.ts" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "backend.ts" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "eventFromException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "97adcd276fbfdd9ae8271c04255e522f", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_low_level_async.pysnap new file mode 100644 index 000000000000..c3334e7c98a4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/node_low_level_async.pysnap @@ -0,0 +1,244 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (function:processTicksAndRejections -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "task_queues" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task_queues" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processTicksAndRejections" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (function:runMicrotasks -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "axiosinterceptor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runMicrotasks" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "be36642f41f047346396f018f62375d3", + "hint": null, + "key": "app_exception_message", + "type": "component" + }, + "system_exception_message": { + "component": { + "contributes": false, + "hint": "ignored because app exception takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "bad" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (function:processTicksAndRejections -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "task_queues" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task_queues" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "processTicksAndRejections" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (function:runMicrotasks -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "axiosinterceptor.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "runMicrotasks" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception message", + "hash": null, + "hint": "ignored because app exception takes precedence", + "key": "system_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_exception_base.pysnap new file mode 100644 index 000000000000..bcf3ae0ee3e0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_exception_base.pysnap @@ -0,0 +1,316 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "beb01c07d991f36b9da1e90fc7169ad8", + "hint": null, + "key": "app_chained_exception_stacktrace", + "type": "component" + }, + "system_chained_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "ValueError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "hello world" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "8c527d091797ca91a535be7b461e5059", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 000000000000..cf7fbcc0edaa --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,988 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MultiValueDictKeyError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "\"'user'\"" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.core.handlers.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.dispatch(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapper" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return bound_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.decorators.csrf" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "csrf.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wrapped_view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return view_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bound_func" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return func(self, *args2, **kwargs2)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hook.handle(request)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry_plugins.heroku.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "email = request.POST['user']" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.datastructures" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "datastructures.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__getitem__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise MultiValueDictKeyError(repr(key))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4ec09a051686463f01ce05bffbcf3f89", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MultiValueDictKeyError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "\"'user'\"" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.core.handlers.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.dispatch(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapper" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return bound_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.decorators.csrf" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "csrf.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wrapped_view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return view_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bound_func" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return func(self, *args2, **kwargs2)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (path:**/release_webhook.py v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hook.handle(request)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry_plugins.heroku.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "email = request.POST['user']" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.datastructures" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "datastructures.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__getitem__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise MultiValueDictKeyError(repr(key))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b19423b06ce0a7e46ae8b00e12804378", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 000000000000..05294075da5e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,988 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MultiValueDictKeyError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "\"'user'\"" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no contributing frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.core.handlers.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.dispatch(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapper" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return bound_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.decorators.csrf" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "csrf.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wrapped_view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return view_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bound_func" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return func(self, *args2, **kwargs2)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hook.handle(request)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry_plugins.heroku.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "email = request.POST['user']" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.datastructures" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "datastructures.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__getitem__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise MultiValueDictKeyError(repr(key))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "MultiValueDictKeyError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "\"'user'\"" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.core.handlers.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "get_response" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self.dispatch(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_wrapper" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return bound_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.decorators.csrf" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "csrf.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "wrapped_view" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return view_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.decorators" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "decorators.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "bound_func" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return func(self, *args2, **kwargs2)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.views.generic.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "dispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return handler(request, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.web.frontend.release_webhook" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "release_webhook.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hook.handle(request)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry_plugins.heroku.plugin" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "plugin.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "email = request.POST['user']" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (function:wrapped_view ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "django.utils.datastructures" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "datastructures.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__getitem__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise MultiValueDictKeyError(repr(key))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "5c0a281b9f8602e5d639d2f722fe5a9a", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_http_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_http_error.pysnap new file mode 100644 index 000000000000..a372b68efea6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_http_error.pysnap @@ -0,0 +1,397 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "HTTPError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + " Client Error: Too Many Requests for url: " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.safe" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "safe.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "safe_execute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.integrations.slack.notify_action" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "notify_action.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "send_notification" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "resp.raise_for_status()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "requests.models" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "models.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise_for_status" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise HTTPError(http_error_msg, response=self)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "721f24ff0b900f7945b4da03890d2a83", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "%s.process_error" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "HTTPError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + " Client Error: Too Many Requests for url: " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.utils.safe" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "safe.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "safe_execute" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "result = func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.integrations.slack.notify_action" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "notify_action.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "send_notification" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "resp.raise_for_status()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "requests.models" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "models.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "raise_for_status" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise HTTPError(http_error_msg, response=self)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d2490be282c0ada7e13288fd90fb0cb3", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap new file mode 100644 index 000000000000..b223ce50c11f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap @@ -0,0 +1,1893 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TimeoutError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "timed out" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app) and un-ignored by custom stacktrace rule (function:post_process_group +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "child_process" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_worker(" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_worker" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_execute_activation(task_func, inflight.activation)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_execute_activation" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "task_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.task" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:post_process_group +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post_process_group" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_post_process_job(" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_post_process_job" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "logger.exception(" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock = self._connect()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise err" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock.connect(socket_address)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4f60cfec2087a65190b283cb848bea62", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "Failed to process pipeline step %s" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TimeoutError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "timed out" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:post_process_group +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "child_process" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_worker(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_worker" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_execute_activation(task_func, inflight.activation)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_execute_activation" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "task_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.task" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post_process_group" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_post_process_job(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_post_process_job" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "logger.exception(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock = self._connect()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise err" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock.connect(socket_address)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "e5ae333037d1ba0ea9379b6d9693aca4", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap new file mode 100644 index 000000000000..97ce65c4ec9d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap @@ -0,0 +1,3617 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn._subprocess" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_subprocess.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "subprocess_started" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "target(sockets=sockets)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.server" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "server.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return runner.run(main)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._loop.run_until_complete(task)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_until_complete" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run_forever()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_forever" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._run_once()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "handle._run()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._context.run(self._callback, *self._args)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.lifespan.on" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "on.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await app(scope, self.receive, self.send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.middleware.proxy_headers" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "proxy_headers.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await super().__call__(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.errors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.cors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.exceptions" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "exceptions.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.middleware.asyncexitstack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asyncexitstack.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.lifespan(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with self.lifespan_context(app) as maybe_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (function:run_app +app v+app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "getattr(logger, level)(msg, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "620b9e72c9565c3ef54e519ec997b57a", + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "message", + "name": "message", + "values": [ + "Error creating HTTP client: cannot import name 'create_http_client' from 'app.utils.http' (D:\\engine\\app\\utils\\http.py)" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system threads take precedence", + "key": "message", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn._subprocess" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_subprocess.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "subprocess_started" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "target(sockets=sockets)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.server" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "server.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return runner.run(main)" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._loop.run_until_complete(task)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_until_complete" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run_forever()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_forever" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._run_once()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "handle._run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._context.run(self._callback, *self._args)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.lifespan.on" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "on.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await app(scope, self.receive, self.send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.middleware.proxy_headers" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "proxy_headers.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await super().__call__(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.errors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.cors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.exceptions" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "exceptions.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.middleware.asyncexitstack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asyncexitstack.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.lifespan(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with self.lifespan_context(app) as maybe_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": "un-ignored by custom stacktrace rule (function:run_app +group v+group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "getattr(logger, level)(msg, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — all frames", + "hash": "ed32779a2628338d3534c4e182caf8e8", + "hint": null, + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap new file mode 100644 index 000000000000..6276808a78b6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap @@ -0,0 +1,1893 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TimeoutError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "timed out" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "child_process" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_worker(" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_worker" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_execute_activation(task_func, inflight.activation)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_execute_activation" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "task_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.task" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post_process_group" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_post_process_job(" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_post_process_job" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "logger.exception(" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock = self._connect()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise err" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock.connect(socket_address)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "message", + "name": "message", + "values": [ + "Failed to process pipeline step %s" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "message", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TimeoutError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "timed out" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "child_process" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_worker(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_worker" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_execute_activation(task_func, inflight.activation)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.workerchild" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "workerchild.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_execute_activation" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "task_func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.taskworker.task" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "task.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._func(*args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "post_process_group" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "run_post_process_job(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "sentry.tasks.post_process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "post_process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_post_process_job" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "logger.exception(" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "exception" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock = self._connect()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "raise err" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "redis.connection" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "connection.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_connect" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "sock.connect(socket_address)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "1bc764ab44acfab9a38f23ae670038bd", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap new file mode 100644 index 000000000000..3d039ca408a7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap @@ -0,0 +1,3617 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system threads take precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn._subprocess" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_subprocess.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "subprocess_started" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "target(sockets=sockets)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.server" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "server.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return runner.run(main)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._loop.run_until_complete(task)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_until_complete" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run_forever()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_forever" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._run_once()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "handle._run()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._context.run(self._callback, *self._args)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.lifespan.on" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "on.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await app(scope, self.receive, self.send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.middleware.proxy_headers" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "proxy_headers.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await super().__call__(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.errors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.cors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.exceptions" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "exceptions.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.middleware.asyncexitstack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asyncexitstack.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.lifespan(scope, receive, send)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with self.lifespan_context(app) as maybe_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "getattr(logger, level)(msg, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "thread stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system threads take precedence", + "key": "app_thread_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because system threads take precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because system threads take precedence", + "id": "message", + "name": "message", + "values": [ + "Error creating HTTP client: cannot import name 'create_http_client' from 'app.utils.http' (D:\\engine\\app\\utils\\http.py)" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because system threads take precedence", + "key": "message", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "__main__" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "spawn_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "exitcode = _main(fd, parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.spawn" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "spawn.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._bootstrap(parent_sentinel)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_bootstrap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "multiprocessing.process" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "process.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._target(*self._args, **self._kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn._subprocess" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "_subprocess.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "subprocess_started" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "target(sockets=sockets)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.server" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "server.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return runner.run(main)" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.runners" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "runners.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return self._loop.run_until_complete(task)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_until_complete" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.run_forever()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_forever" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._run_once()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.base_events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base_events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run_once" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "handle._run()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "asyncio.events" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "events.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_run" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._context.run(self._callback, *self._args)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.lifespan.on" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "on.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await app(scope, self.receive, self.send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "uvicorn.middleware.proxy_headers" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "proxy_headers.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await super().__call__(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.applications" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "applications.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.errors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "errors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.base" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "base.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.cors" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "cors.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.middleware.exceptions" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "exceptions.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.middleware.asyncexitstack" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "asyncexitstack.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.app(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__call__" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.middleware_stack(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "await self.lifespan(scope, receive, send)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "starlette.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with self.lifespan_context(app) as maybe_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "fastapi.routing" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "routing.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "merged_lifespan" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "async with original_context(app) as maybe_original_state:" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "run_app" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "app.main" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "main.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "do_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "getattr(logger, level)(msg, *args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self._log(ERROR, msg, args, **kwargs)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_log" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.callHandlers(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "callHandlers" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "hdlr.handle(record)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "logging" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "__init__.py" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "handle" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "self.emit(record)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — all frames", + "hash": "a18195beb2cfb93ea25c9331c988dbee", + "hint": null, + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering.pysnap new file mode 100644 index 000000000000..230635317a8a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TypeError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Load failed" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "11e6467c8358a9366c6538f95dcd7bd4", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 000000000000..b5b8f8c1bdc3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,57 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + }, + "contributes": true, + "description": "exception message", + "hash": "70dd09f56349dcce62a74137b00bb571", + "hint": null, + "key": "app_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 000000000000..16c235795a9d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,98 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_chained_exception_message": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "chained_exception", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TypeError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Load failed" + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Error" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." + ] + }, + { + "contributes": false, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "chained exception messages", + "hash": "5f209162115f576bedbaf6f0ad30e5aa", + "hint": null, + "key": "app_chained_exception_message", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_native.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_native.pysnap new file mode 100644 index 000000000000..2214a0358f59 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/react_native.pysnap @@ -0,0 +1,2018 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "TypeError" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "undefined is not a function (evaluating '({}).invalidFunction()')" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/BatchedBridge/MessageQueue" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "messagequeue.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "value" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return this.flushedQueue();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/BatchedBridge/MessageQueue" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "messagequeue.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "flushedQueue" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this._inCall--;" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/BatchedBridge/MessageQueue" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "messagequeue.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_inCall" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return this.flushedQueue();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/BatchedBridge/MessageQueue" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "messagequeue.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "flushedQueue" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this._lastFlush = new Date().getTime();" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_lastFlush" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "_receiveRootNodeIDEvent(index, eventTopLevelType, i);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_receiveRootNodeIDEvent" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "batchedUpdates(function() {" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "batchedUpdates" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return _batchedUpdates(fn, bookkeeping);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_batchedUpdates" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "return fn(a);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "fn" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "(forEachAccumulated(events, executeDispatchesAndReleaseTopLevel)," + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "forEachAccumulated" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "Array.isArray(arr) ? arr.forEach(cb, scope) : arr && cb.call(scope, arr);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "[native code] forEach" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "D" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "executeDispatch(e, !1, dispatchListeners, dispatchInstances);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "executeDispatch" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "ReactErrorUtils.invokeGuardedCallbackAndCatchFirstError(" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "invokeGuardedCallbackAndCatchFirstError" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "ReactErrorUtils.invokeGuardedCallback.apply(this, arguments);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "apply" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "invokeGuardedCallback.apply(ReactErrorUtils, arguments);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "reactnativerenderer-prod.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "apply" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "var funcArgs = Array.prototype.slice.call(arguments, 3);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Components/Touchable/Touchable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "touchable.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "arguments" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "touchableHandleResponderRelease: function(e) {" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Components/Touchable/Touchable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "touchable.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_receiveSignal" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this._performSideEffectsForTransition(curState, nextState, signal, e);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Components/Touchable/Touchable" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "touchable.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "_performSideEffectsForTransition" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.touchableHandlePress(e);" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "react-native/Libraries/Components/Touchable/TouchableNativeFeedback.android" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "touchablenativefeedback.android.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "this" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "this.props.onPress && this.props.onPress(e);" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "App" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "app.js" + ] + }, + { + "contributes": false, + "hint": "ignored because sourcemap used and context line available", + "id": "function", + "name": null, + "values": [ + "onPress" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "cd2a9fd0cdaa8cd55ed22b101fc65882", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 000000000000..d0f6d693abdd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,180 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — in-app frames", + "hash": "659ad79e2e70c822d30a53d7d889529e", + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app stacktrace takes precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — all frames", + "hash": null, + "hint": "ignored because app stacktrace takes precedence", + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 000000000000..d008a907768e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,250 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system stacktrace takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dojo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "c" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dojo.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "_createDocumentViewModel" + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "event-level stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system stacktrace takes precedence", + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored low quality javascript frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": "ignored because filename is anonymous", + "id": "filename", + "name": null, + "values": [ + "" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dojo.js" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "c" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "dojo.js" + ] + }, + { + "contributes": true, + "hint": "trimmed javascript function", + "id": "function", + "name": null, + "values": [ + "_createDocumentViewModel" + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "c5da56c71b31f34c5880d734cbc8f5bb", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_negated_match.pysnap new file mode 100644 index 000000000000..2f137e11af06 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_negated_match.pysnap @@ -0,0 +1,542 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (!function:log_demo::* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (!function:log_demo::* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (!function:log_demo::* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (!function:log_demo::* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (!function:log_demo::* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "ef42635ff82b83bc711ed7c65b7cb189", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust.pysnap new file mode 100644 index 000000000000..64041e6a30a5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust.pysnap @@ -0,0 +1,542 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "ef42635ff82b83bc711ed7c65b7cb189", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "193a67f0b7f8b5a69f29dc6a259d47c3", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust2.pysnap new file mode 100644 index 000000000000..bf1eaf59cbd8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_rust2.pysnap @@ -0,0 +1,542 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:std::* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "ef42635ff82b83bc711ed7c65b7cb189", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "log_demo" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Holy shit everything is on fire!" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start_internal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (family:native function:__* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "___rust_maybe_catch_panic" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::panicking::try::do_call" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::rt::lang_start::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log_demo::main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by custom stacktrace rule (family:native function:*::__* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "log::__private_api_log" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "68021c81b00bc4f2f983b11f10efbfda", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 000000000000..bc904a9f153d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,800 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — in-app frames", + "hash": "1effb24729ae4c43efa36b460511136a", + "hint": null, + "key": "app_stacktrace", + "type": "component" + }, + "system_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "659ad79e2e70c822d30a53d7d889529e", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/template_compute_hashes.pysnap new file mode 100644 index 000000000000..07301e83eb9d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/template_compute_hashes.pysnap @@ -0,0 +1,50 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "template": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "template", + "name": "template", + "values": [ + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "foo.html" + ] + }, + { + "contributes": true, + "hint": null, + "id": "context_line", + "name": null, + "values": [ + "{% invalid template tag %}" + ] + } + ] + } + ] + }, + "contributes": true, + "description": "filename and context line", + "hash": "1f5bdebe3c9f414c7dbb4296a8353245", + "hint": null, + "key": "template", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_compute_hashes.pysnap new file mode 100644 index 000000000000..2ecb5bd822d7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_compute_hashes.pysnap @@ -0,0 +1,138 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.c" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "1a11687556cf74559f0ae90b1c87e2fd", + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because app threads take precedence", + "id": "system", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because hash matches app variant", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "baz.c" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "thread stacktrace — all frames", + "hash": null, + "hint": "ignored because app threads take precedence", + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_no_hash.pysnap new file mode 100644 index 000000000000..5a689213f0a2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/threads_no_hash.pysnap @@ -0,0 +1,39 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": false, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because it contains neither a single thread nor multiple threads with exactly one crashing or current thread; instead contains 0 crashing, 2 current, and 2 total threads", + "id": "threads", + "name": "thread", + "values": [] + } + ] + }, + "contributes": false, + "description": "thread stacktrace — in-app frames", + "hash": null, + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "fallback": { + "contributes": true, + "description": "fallback grouping", + "hash": "d41d8cd98f00b204e9800998ecf8427e", + "hint": null, + "key": "fallback", + "type": "fallback" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity.pysnap new file mode 100644 index 000000000000..ac810aca20a2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity.pysnap @@ -0,0 +1,636 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NullReferenceException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Object reference not set to an instance of an object" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eventsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.EventSystem:Update()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "executeevents.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "executeevents.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "button.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "button.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.UI.Button.Press ()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "unityevent_0.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.Events.UnityEvent.Invoke ()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "unityevent.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.Events.InvokableCall.Invoke ()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "samplescript.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SampleScript.ThrowNull ()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "63f25f224c4a56add964d1570880704c", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "NullReferenceException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Object reference not set to an instance of an object" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "eventsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.EventSystem:Update()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "executeevents.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "executeevents.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "button.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "button.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.UI.Button.Press ()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "unityevent_0.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.Events.UnityEvent.Invoke ()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "unityevent.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.Events.InvokableCall.Invoke ()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "samplescript.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SampleScript.ThrowNull ()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "7909deacdb3f511a715efb7f2670d4dc", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap new file mode 100644 index 000000000000..2180bad58a42 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap @@ -0,0 +1,450 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.NullReferenceException" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Object reference not set to an instance of an object" + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "GameBootstrap" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "gamebootstrap.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GameBootstrap.Start()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "UnityEngine.MonoBehaviour" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "UnityEngine.SetupCoroutine" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator, System.IntPtr)" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "EnemySpawner+d__4" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner+d__4.MoveNext()" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "CombatSystem" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem.ApplyDamage(UnityEngine.GameObject, System.Int32)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "System.NullReferenceException" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Object reference not set to an instance of an object" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "GameBootstrap" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "gamebootstrap.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GameBootstrap.Start()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "UnityEngine.MonoBehaviour" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "UnityEngine.SetupCoroutine" + ] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator, System.IntPtr)" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "EnemySpawner+d__4" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner+d__4.MoveNext()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "CombatSystem" + ] + }, + { + "contributes": false, + "hint": "ignored because module takes precedence", + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem.ApplyDamage(UnityEngine.GameObject, System.Int32)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "872f67574fe082419e092229105d22ca", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_android.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_android.pysnap new file mode 100644 index 000000000000..c7e555a91cde --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_android.pysnap @@ -0,0 +1,876 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__libc_init" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "android_main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityPlayerLoop" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry__handle_signal" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_android_capture_envelope" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__libc_init" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "android_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityPlayerLoop" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry__handle_signal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_android_capture_envelope" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "04d641eb30b794030ed5b0d7d779eb05", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap new file mode 100644 index 000000000000..06a919792801 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap @@ -0,0 +1,624 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SIGABRT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Abort" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "textures.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unrelated_native_app_source_under_assets_dir" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (path:**/vendor/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unrelated_native_app_source_under_package_cache_dir" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by the client", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "developer_own_libgame_binary_not_unity_gameactivity_glue" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "windows_il2cpp_project_source_with_backslash_paths" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "linux_il2cpp_project_source" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "inputaction.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "registry_package_source_under_runtime_dir_never_restored" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "legacy_ios_engine_binary_unity_6000_0_and_older" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "windows_sentry_native_sdk" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "539935023e2db3e104789c1c69ca2cf5", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "SIGABRT" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Abort" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "textures.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unrelated_native_app_source_under_assets_dir" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "bar.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "unrelated_native_app_source_under_package_cache_dir" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "developer_own_libgame_binary_not_unity_gameactivity_glue" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "windows_il2cpp_project_source_with_backslash_paths" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "linux_il2cpp_project_source" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "inputaction.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "registry_package_source_under_runtime_dir_never_restored" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "legacy_ios_engine_binary_unity_6000_0_and_older" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "windows_sentry_native_sdk" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "7429f5a97df8b817f3b36cab1970f9ea", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_ios.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_ios.pysnap new file mode 100644 index 000000000000..1db99de2e341 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_ios.pysnap @@ -0,0 +1,1004 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.mm" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UnityAppController repaint]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "PlayerLoop" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryCrashInstallationReporter reportCrash]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "8bbdecb4ad2f92d58133a93ee009a07b", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "start" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "main.mm" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UIApplicationMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UnityAppController repaint]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "PlayerLoop" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryCrashInstallationReporter reportCrash]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "bae55c8a9132232871adf6b662a2d6da", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_macos.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_macos.pysnap new file mode 100644 index 000000000000..59d3d86b427f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unity_il2cpp_macos.pysnap @@ -0,0 +1,876 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": false, + "hint": "ignored because system exception takes precedence", + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": false, + "hint": "ignored because this variant does not have a contributing stacktrace, but the system variant does", + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": true, + "hint": null, + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": false, + "hint": "ignored because it contains no in-app frames", + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityMain" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "PlayerLoop" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry__handle_signal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureCrashEvent:]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": false, + "description": "exception stacktrace — in-app frames", + "hash": null, + "hint": "ignored because system exception takes precedence", + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Attempted to dereference null pointer." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UnityMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "PlayerLoop" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ScriptingInvocation::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppinvokertable.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "enemyspawner.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "EnemySpawner_Update" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "combatsystem.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CombatSystem_ApplyDamage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tmp_text.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMP_Text_SetText" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "animation.bindings.cs" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Animation_Play" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "il2cppcodegen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "il2cpp_codegen_raise_null_reference_exception" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry__handle_signal" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureCrashEvent:]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "cd7247c52d95df0f046b9e8d86ca231f", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assert_mac.pysnap new file mode 100644 index 000000000000..05a573a44c0b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assert_mac.pysnap @@ -0,0 +1,2092 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "p__commonOp__fn__fn__makeReturn__fn___fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FGenericPlatformMisc::RaiseException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "2301317599ab22875b83ce2dafdab6ce", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "EXC_BAD_ACCESS" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "p__commonOp__fn__fn__makeReturn__fn___fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FGenericPlatformMisc::RaiseException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "65c0ee687814f8d166cc29c9443ffc8a", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 000000000000..26bd78add8b2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,1588 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "SIGTRAP" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Trap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__start_thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "android_main" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AndroidMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UGameEngine::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UWorld::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FLatentActionManager::ProcessLatentActions" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FLatentActionManager::TickLatentActionForObject" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AActor::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tgkill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "8c134ce2a43a0b2c55654902491307c2", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "SIGTRAP" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Trap" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__start_thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "android_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AndroidMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UGameEngine::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UWorld::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FLatentActionManager::ProcessLatentActions" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FLatentActionManager::TickLatentActionForObject" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "AActor::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "tgkill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "f203e9bc12df86bb01fbd92a45643f86", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..21870231558c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,2794 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "unknown 0x00004000 / 0x7ff89574837a" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: unknown / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WinMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "LaunchWindowsStartup" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMainWrapper" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsPlatformApplicationMisc::PumpMessages" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::AppWndProc" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::DeferMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessDeferredMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SharedPointerInternals::NewIntrusiveReferenceController" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TArray::Remove'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseUObjectMethodDelegateInstance::Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TThreadSingleton::Get'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.gen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::AssertFailed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryoutputdeviceerror.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsErrorOutputDevice::Serialize" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:throw ^-app -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RaiseException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "c246c95d4a435b3d601044aebae72a38", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": false, + "hint": "ignored because exception is synthetic", + "id": "type", + "name": null, + "values": [ + "unknown 0x00004000 / 0x7ff89574837a" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Fatal Error: unknown / " + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WinMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "LaunchWindowsStartup" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMainWrapper" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsPlatformApplicationMisc::PumpMessages" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::AppWndProc" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::DeferMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessDeferredMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SharedPointerInternals::NewIntrusiveReferenceController" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TArray::Remove'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseUObjectMethodDelegateInstance::Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TThreadSingleton::Get'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.gen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::CheckVerifyFailedImpl2" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::AssertFailed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FOutputDevice::LogfImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryoutputdeviceerror.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSentryOutputDeviceError::Serialize" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsErrorOutputDevice::Serialize" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:throw ^-group -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RaiseException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "69925caf2921426d8587558ce078b9e2", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 000000000000..2debe6c0fc73 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,5672 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Ensure failed" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Ensure condition failed: ensurePtr != nullptr [File:/Users/tustanivsky/Work/sentry-unreal/sample/Source/SentryPlayground/SentryPlaygroundUtils.cpp] [Line: ]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "dca3cb1a150c80ca2103ca14a870736e", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Ensure failed" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Ensure condition failed: ensurePtr != nullptr [File:/Users/tustanivsky/Work/sentry-unreal/sample/Source/SentryPlayground/SentryPlaygroundUtils.cpp] [Line: ]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored because app/system exception takes precedence", + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegateBase::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient captureException:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d8dceed7558e86d6622149fd98607a02", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..823f4fc682bb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,3244 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Ensure failed" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Ensure condition failed: ensurePtr != nullptr [File:D:\\projects\\sentry-unreal\\sample\\Source\\SentryPlayground\\SentryPlaygroundUtils.cpp] [Line: ]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WinMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "LaunchWindowsStartup" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMainWrapper" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsPlatformApplicationMisc::PumpMessages" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:system -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::AppWndProc" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::DeferMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessDeferredMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SharedPointerInternals::NewIntrusiveReferenceController" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TArray::Remove'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseUObjectMethodDelegateInstance::Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TThreadSingleton::Get'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.gen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CheckVerifyImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegate::Broadcast" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "delegateinstancesimpl.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tuple.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Core::Private::Tuple::TTupleBase::ApplyAfter" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "invoke.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentrysubsystem.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`USentrySubsystem::Initialize'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentrysubsystemdesktop.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySubsystemDesktop::CaptureEnsure" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_value_set_stacktrace" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_value_new_stacktrace" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_unwind_stack_from_ucontext" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "8961a4ec639f0697b27b860bbaf365bb", + "hint": null, + "key": "app_exception_stacktrace", + "type": "component" + }, + "system_exception_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "exception", + "name": "exception", + "values": [ + { + "contributes": true, + "hint": null, + "id": "type", + "name": null, + "values": [ + "Ensure failed" + ] + }, + { + "contributes": false, + "hint": "ignored because stacktrace takes precedence", + "id": "value", + "name": null, + "values": [ + "Ensure condition failed: ensurePtr != nullptr [File:D:\\projects\\sentry-unreal\\sample\\Source\\SentryPlayground\\SentryPlaygroundUtils.cpp] [Line: ]" + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "RtlUserThreadStart" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "BaseThreadInitThunk" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__scrt_common_main_seh" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "exe_common.inl" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "invoke_main" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "WinMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "LaunchWindowsStartup" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMainWrapper" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsPlatformApplicationMisc::PumpMessages" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "DispatchMessageWorker" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::AppWndProc" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::DeferMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FWindowsApplication::ProcessDeferredMessage" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SharedPointerInternals::NewIntrusiveReferenceController" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TArray::Remove'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseUObjectMethodDelegateInstance::Execute" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`TThreadSingleton::Get'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execCallMathFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.gen.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::execTerminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentryplaygroundutils.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentryPlaygroundUtils::Terminate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Assert::Private::ExecCheckImplInternal" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "CheckVerifyImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FDebug::EnsureFailed" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastDelegate::Broadcast" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "delegateinstancesimpl.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "tuple.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UE::Core::Private::Tuple::TTupleBase::ApplyAfter" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "invoke.h" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentrysubsystem.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "`USentrySubsystem::Initialize'::`2'::::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "filename", + "name": null, + "values": [ + "sentrysubsystemdesktop.cpp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySubsystemDesktop::CaptureEnsure" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_value_set_stacktrace" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_value_new_stacktrace" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "sentry_unwind_stack_from_ucontext" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "4fa979767cc67d57c9bc771f6e48ed45", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_event_capture_mac.pysnap new file mode 100644 index 000000000000..705cd1560dfe --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2026_10_24/unreal_event_capture_mac.pysnap @@ -0,0 +1,2639 @@ +--- +source: tests/sentry/grouping/test_grouping_info.py::test_grouping_info +--- +{ + "grouping_config": "newstyle:2026-10-24", + "variants": { + "app_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "app", + "name": "in-app", + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (category:internals -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execLetObj" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessContextOpcode" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::CallFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::execCaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySubsystemApple::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureEvent:withScopeBlock:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureEvent:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "54e8028fb2526cf31b12dd66c01ad9e2", + "hint": null, + "key": "app_thread_stacktrace", + "type": "component" + }, + "message": { + "component": { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "default", + "name": null, + "values": [ + { + "contributes": false, + "hint": "ignored because app/system threads take precedence", + "id": "message", + "name": "message", + "values": [ + "Message for scoped event" + ] + } + ] + }, + "contributes": false, + "description": "message", + "hash": null, + "hint": "ignored because app/system threads take precedence", + "key": "message", + "type": "component" + }, + "system_thread_stacktrace": { + "component": { + "contributes": true, + "hint": null, + "id": "system", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "threads", + "name": "thread", + "values": [ + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "thread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:threadbase -group v-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "_pthread_start" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:internals -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[FCocoaGameThread main]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[UEAppDelegate runGameThread:]" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "GuardedMain" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FEngineLoop::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::Tick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::TickPlatform" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessDeferredEvents" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FMacApplication::ProcessMouseUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::OnMouseUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::ProcessMouseButtonUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "FSlateApplication::RoutePointerUpEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::OnMouseButtonUp" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SButton::ExecuteOnClick" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UButton::SlateHandleClicked" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "TMulticastScriptDelegate::ProcessMulticastDelegate" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessEvent" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (category:indirection -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalFunction::lambda::operator()" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "ProcessLocalScriptFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::execLetObj" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::ProcessContextOpcode" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UObject::CallFunction" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "UFunction::Invoke" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::execCaptureEventWithScope" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored due to recursion", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "USentrySubsystem::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "SentrySubsystemApple::CaptureEventWithScope" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureEvent:withScopeBlock:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "+[SentrySDK captureEvent:withScope:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryThreadInspector getCurrentThreads]" + ] + } + ] + }, + { + "contributes": false, + "hint": "ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": false, + "hint": null, + "id": "filename", + "name": null, + "values": [] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "contributes": true, + "description": "thread stacktrace — all frames", + "hash": "9e04decaf79ecba9dc0314dc0edd3993", + "hint": null, + "key": "system_thread_stacktrace", + "type": "component" + } + } +} diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/actix.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/actix.pysnap new file mode 100644 index 000000000000..b744c75fc3cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/actix.pysnap @@ -0,0 +1,790 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "fa86c1473c78dd5f6008506ed614f1d9" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "actix_web::pipeline" + value (ignored because stacktrace takes precedence) + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" + stacktrace* + frame (marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "__pthread_start" + frame* (marked in-app by the client) + function* + "__pthread_body" + frame (marked out of app by the client) + filename* + "thread.rs" + function* + "std::sys::unix::thread::Thread::new::thread_start" + frame (marked out of app by built-in stacktrace rule (family:native function:alloc::* -app)) + filename* + "boxed.rs" + function* + "alloc::boxed::FnBox::call_box" + frame (marked out of app by the client) + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}" + frame (marked out of app by the client) + filename* + "panic.rs" + function* + "std::panic::catch_unwind" + frame (marked out of app by the client) + filename* + "panicking.rs" + function* + "std::panicking::try" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "___rust_maybe_catch_panic" + frame (marked out of app by the client) + filename* + "panicking.rs" + function* + "std::panicking::try::do_call" + frame (marked out of app by the client) + filename* + "panic.rs" + function* + "std::panic::AssertUnwindSafe::call_once" + frame (marked out of app by the client) + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}" + frame (marked out of app by the client) + filename* + "backtrace.rs" + function* + "std::sys_common::backtrace::__rust_begin_short_backtrace" + frame* (marked in-app by the client) + filename* + "arbiter.rs" + function* + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_reactor::with_default" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_reactor::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* (marked in-app by the client) + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* (marked in-app by the client) + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "global.rs" + function* + "tokio_executor::global::with_default" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* (marked in-app by the client) + filename* + "global.rs" + function* + "tokio_executor::global::with_default::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::block_on" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::tick" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::CurrentRunner::set_spawn" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + frame* (marked in-app by the client) + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduled::tick" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_fn_notify" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::std::set" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter::{{closure}}" + frame* (marked in-app by the client) + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + frame (marked out of app by the client) + filename* + "mod.rs" + function* + "alloc::boxed::Box::poll" + frame* (marked in-app by the client) + filename* + "then.rs" + function* + "futures::future::then::Then::poll" + frame* (marked in-app by the client) + filename* + "chain.rs" + function* + "futures::future::chain::Chain::poll" + frame* (marked in-app by the client) + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame (marked in-app by the client but ignored due to recursion) + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame* (marked in-app by the client) + filename* + "acceptor.rs" + function* + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + frame* (marked in-app by the client) + filename* + "and_then.rs" + function* + "actix_net::service::and_then::AndThenFuture::poll" + frame* (marked in-app by the client) + filename* + "map_err.rs" + function* + "actix_net::service::map_err::MapErrFuture::poll" + frame* (marked in-app by the client) + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* (marked in-app by the client) + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_handler" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_io" + frame* (marked in-app by the client) + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::parse" + frame* (marked in-app by the client) + filename* + "pipeline.rs" + function* + "actix_web::pipeline::Pipeline::poll_io" + frame* (marked in-app by the client) + filename* + "<::log::macros::log macros>" + function* + "actix_web::pipeline::ProcessResponse::poll_io" + frame* (marked in-app by the client) + filename* + "lib.rs" + function* + "log::__private_api_log" + frame (marked out of app by the client) + filename* + "log.rs" + function* + "sentry::integrations::log::Logger::log" + frame (marked out of app by the client) + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active" + frame (marked out of app by the client) + filename* + "hub.rs" + function* + "sentry::hub::Hub::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (marked out of app by the client) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame (marked out of app by the client) + filename* + "hub.rs" + function* + "sentry::hub::Hub::with::{{closure}}" + frame (marked out of app by the client) + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active::{{closure}}" +-------------------------------------------------------------------------- +system: + hash: "0fd89da61ff62bc3b09751ac8ce133f9" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "actix_web::pipeline" + value (ignored because stacktrace takes precedence) + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "__pthread_start" + frame* + function* + "__pthread_body" + frame* + filename* + "thread.rs" + function* + "std::sys::unix::thread::Thread::new::thread_start" + frame* + filename* + "boxed.rs" + function* + "alloc::boxed::FnBox::call_box" + frame* + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "panic.rs" + function* + "std::panic::catch_unwind" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "panicking.rs" + function* + "std::panicking::try" + frame* + filename* + "lib.rs" + function* + "___rust_maybe_catch_panic" + frame* + filename* + "panicking.rs" + function* + "std::panicking::try::do_call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "panic.rs" + function* + "std::panic::AssertUnwindSafe::call_once" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "backtrace.rs" + function* + "std::sys_common::backtrace::__rust_begin_short_backtrace" + frame* + filename* + "arbiter.rs" + function* + "actix::arbiter::Arbiter::new_with_builder::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter" + frame* + filename* + "lib.rs" + function* + "tokio_reactor::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "lib.rs" + function* + "tokio_reactor::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}" + frame* + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "clock.rs" + function* + "tokio_timer::clock::clock::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}" + frame* + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "handle.rs" + function* + "tokio_timer::timer::handle::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}" + frame* + filename* + "global.rs" + function* + "tokio_executor::global::with_default" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "global.rs" + function* + "tokio_executor::global::with_default::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}" + frame* + filename* + "runtime.rs" + function* + "tokio::runtime::current_thread::runtime::Runtime::block_on::{{closure}}" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::block_on" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Entered::tick" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::CurrentRunner::set_spawn" + frame* + filename* + "lib.rs" + function* + "tokio_current_thread::Borrow::enter::{{closure}}::{{closure}}" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduler::tick::{{closure}}" + frame* + filename* + "scheduler.rs" + function* + "tokio_current_thread::scheduler::Scheduled::tick" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_fn_notify" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::std::set" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::enter::{{closure}}" + frame* + filename* + "mod.rs" + function* + "futures::task_impl::Spawn::poll_future_notify::{{closure}}" + frame* + filename* + "mod.rs" + function* + "alloc::boxed::Box::poll" + frame* + filename* + "then.rs" + function* + "futures::future::then::Then::poll" + frame* + filename* + "chain.rs" + function* + "futures::future::chain::Chain::poll" + frame* + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame (ignored due to recursion) + filename* + "either.rs" + function* + "futures::future::either::Either::poll" + frame* + filename* + "acceptor.rs" + function* + "actix_web::server::acceptor::ServerMessageAcceptorServiceFut::poll" + frame* + filename* + "and_then.rs" + function* + "actix_net::service::and_then::AndThenFuture::poll" + frame* + filename* + "map_err.rs" + function* + "actix_net::service::map_err::MapErrFuture::poll" + frame* + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* + filename* + "channel.rs" + function* + "actix_web::server::channel::HttpChannel::poll" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_handler" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::poll_io" + frame* + filename* + "h1.rs" + function* + "actix_web::server::h1::Http1Dispatcher::parse" + frame* + filename* + "pipeline.rs" + function* + "actix_web::pipeline::Pipeline::poll_io" + frame* + filename* + "<::log::macros::log macros>" + function* + "actix_web::pipeline::ProcessResponse::poll_io" + frame* + filename* + "lib.rs" + function* + "log::__private_api_log" + frame* + filename* + "log.rs" + function* + "sentry::integrations::log::Logger::log" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with" + frame* + filename* + "local.rs" + function* + "std::thread::local::LocalKey::with" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "local.rs" + function* + "std::thread::local::LocalKey::try_with" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with::{{closure}}" + frame* + filename* + "hub.rs" + function* + "sentry::hub::Hub::with_active::{{closure}}" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/android_anr.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/android_anr.pysnap new file mode 100644 index 000000000000..2ddd5930de4e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/android_anr.pysnap @@ -0,0 +1,1572 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "ApplicationNotResponding" + value* (stripped event-specific values) + "Application Not Responding for at least ms." + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "com.android.internal.os.ZygoteInit" + filename (ignored because module takes precedence) + "zygoteinit.java" + function* + "main" + frame (marked out of app by the client) + module* + "com.android.internal.os.ZygoteInit$MethodAndArgsCaller" + filename (ignored because module takes precedence) + "zygoteinit.java" + function* + "run" + frame (marked out of app by the client) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "android.app.ActivityThread" + filename (ignored because module takes precedence) + "activitythread.java" + function* + "main" + frame (marked out of app by the client) + module* + "android.os.Looper" + filename (ignored because module takes precedence) + "looper.java" + function* + "loop" + frame (marked out of app by the client) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "dispatchMessage" + frame (marked out of app by the client) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "handleCallback" + frame (marked out of app by the client) + module* + "android.view.Choreographer$FrameDisplayEventReceiver" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (marked out of app by the client) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doFrame" + frame (marked out of app by the client) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doCallbacks" + frame (marked out of app by the client) + module* + "android.view.Choreographer$CallbackRecord" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (marked out of app by the client) + module* + "android.view.ViewRootImpl$TraversalRunnable" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "run" + frame (marked out of app by the client) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "doTraversal" + frame (marked out of app by the client) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performTraversals" + frame (marked out of app by the client) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performLayout" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (marked out of app by the client) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (marked out of app by the client) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (marked out of app by the client) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (marked out of app by the client) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "onLayout" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayout" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayoutStep1" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "processAdapterUpdatesAndSetAnimationFlags" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.AdapterHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "consumeUpdatesInOnePass" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView$6" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionsForAdd" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionRecordsForInsert" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.ChildHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getUnfilteredChildAt" + frame (marked out of app by the client) + module* + "androidx.recyclerview.widget.RecyclerView$5" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getChildAt" + threads (ignored because this variant does not have a contributing stacktrace, but the system variant does) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "java.lang.Thread" + filename (ignored because module takes precedence) + "thread.java" + function* + "getStackTrace" + frame (marked out of app by the client) + module* + "dalvik.system.VMStack" + filename (ignored because module takes precedence) + "vmstack.java" + function* + "getThreadStackTrace" +-------------------------------------------------------------------------- +system: + hash: "b4626f44de843f1f586ff2648425c4f0" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ApplicationNotResponding" + value (ignored because stacktrace takes precedence) + "Application Not Responding for at least ms." + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "com.android.internal.os.ZygoteInit" + filename (ignored because module takes precedence) + "zygoteinit.java" + function* + "main" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "com.android.internal.os.ZygoteInit$MethodAndArgsCaller" + filename (ignored because module takes precedence) + "zygoteinit.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.app.ActivityThread" + filename (ignored because module takes precedence) + "activitythread.java" + function* + "main" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.os.Looper" + filename (ignored because module takes precedence) + "looper.java" + function* + "loop" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "dispatchMessage" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "handleCallback" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer$FrameDisplayEventReceiver" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doCallbacks" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer$CallbackRecord" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl$TraversalRunnable" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "doTraversal" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performTraversals" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame* + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "onLayout" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayout" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayoutStep1" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "processAdapterUpdatesAndSetAnimationFlags" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.AdapterHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "consumeUpdatesInOnePass" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView$6" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionsForAdd" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionRecordsForInsert" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.ChildHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getUnfilteredChildAt" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView$5" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getChildAt" + threads (ignored because system exception takes precedence) + stacktrace* + frame* + module* + "java.lang.Thread" + filename (ignored because module takes precedence) + "thread.java" + function* + "getStackTrace" + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "dalvik.system.VMStack" + filename (ignored because module takes precedence) + "vmstack.java" + function* + "getThreadStackTrace" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/aspnetcore.pysnap new file mode 100644 index 000000000000..c329ebb511ab --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/aspnetcore.pysnap @@ -0,0 +1,351 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "85f90327d3b9ef257838f2664b9915e6" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "System.Exception" + value (ignored because stacktrace takes precedence) + "sync exception" + stacktrace* + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware" + function* + "Invoke" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware" + function* + "Invoke" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Routing.EndpointMiddleware" + function* + "Invoke" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeAsync" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeFilterPipelineAsync" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Next" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Rethrow" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeNextResourceFilter" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeInnerFilterAsync" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Next" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Rethrow" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeNextActionFilterAsync" + frame (marked out of app by the client) + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame (marked out of app by the client) + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeActionMethodAsync" + frame (marked out of app by the client) + module* + "Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor" + function* + "Execute" + frame (marked out of app by the client) + module* + "Microsoft.Extensions.Internal.ObjectMethodExecutor" + function* + "Execute" + frame* (marked in-app by the client) + module* + "(unknown)" + function* + "lambda_method" + frame* (marked in-app by the client) + module* + "SentryTest2.Controllers.ValuesController" + filename (ignored because module takes precedence) + "valuescontroller.cs" + function* + "Get" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system exception takes precedence + root_component: + default (ignored because app/system exception takes precedence) + message (ignored because app/system exception takes precedence) + "An unhandled exception has occurred while executing the request." +-------------------------------------------------------------------------- +system: + hash: "97dff72812f7f33f6fd01179d7963d07" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "System.Exception" + value (ignored because stacktrace takes precedence) + "sync exception" + stacktrace* + frame* + module* + "Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Routing.EndpointMiddleware" + function* + "Invoke" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeAsync" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeFilterPipelineAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Next" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "Rethrow" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker" + function* + "InvokeNextResourceFilter" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeInnerFilterAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Next" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "Rethrow" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeNextActionFilterAsync" + frame* + module* + "System.Runtime.CompilerServices.TaskAwaiter" + function* + "HandleNonSuccessAndDebuggerNotification" + frame* + module* + "System.Runtime.ExceptionServices.ExceptionDispatchInfo" + function* + "Throw" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" + function* + "InvokeActionMethodAsync" + frame* + module* + "Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor" + function* + "Execute" + frame* + module* + "Microsoft.Extensions.Internal.ObjectMethodExecutor" + function* + "Execute" + frame* + module* + "(unknown)" + function* + "lambda_method" + frame* + module* + "SentryTest2.Controllers.ValuesController" + filename (ignored because module takes precedence) + "valuescontroller.cs" + function* + "Get" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/block_invoke.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/block_invoke.pysnap new file mode 100644 index 000000000000..4d0c7c3fae2e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/block_invoke.pysnap @@ -0,0 +1,47 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "ad4d21cacbbadddbe1a37535d7dbbba5" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by the client) + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame (marked out of app by the client) + function* + "__99+[Something else]_block_invoke_2" + frame (marked out of app by the client) + function* + "__00+[Something else]_block_invoke_2" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app threads take precedence + root_component: + default (ignored because app threads take precedence) + message (ignored because app threads take precedence) + "Foo" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app threads take precedence + root_component: + system (ignored because app threads take precedence) + threads (ignored because hash matches app variant) + stacktrace* + frame* + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__99+[Something else]_block_invoke_2" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__00+[Something else]_block_invoke_2" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/bugly.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/bugly.pysnap new file mode 100644 index 000000000000..45d64185187a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/bugly.pysnap @@ -0,0 +1,56 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "SIGSEGV" + value* + "Segfault" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + frame (marked out of app by the client) + frame (marked out of app by the client) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "__kernel_rt_sigreturn" + frame (marked out of app by the client) + frame (marked out of app by the client) + frame (marked out of app by the client) + function* + "kill" +-------------------------------------------------------------------------- +system: + hash: "d9c9b0f9ba46e32fddd7cd1512fad235" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "SIGSEGV" + value (ignored because stacktrace takes precedence) + "Segfault" + stacktrace* + frame + frame + frame (ignored due to recursion) + frame* + function* + "stripped_application_code" + frame* + function* + "__kernel_rt_sigreturn" + frame + frame + frame* + function* + "kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 000000000000..6a7dad93c8ed --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,47 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because built-in fingerprint takes precedence + root_component: + app (ignored because built-in fingerprint takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "ChunkLoadError" + value* + "ChunkLoadError: something something..." + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "foo.bar" + filename (ignored because module takes precedence) + "bar.tsx" + function* + "main" +-------------------------------------------------------------------------- +built_in_fingerprint: + hash: "e130644157dc9d186569686838e16f9b" + fingerprint_info: {"matched_rule":{"attributes":{},"fingerprint":["chunkloaderror"],"is_builtin":true,"matchers":[["family","javascript"],["type","ChunkLoadError"]],"text":"family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\""}} + values: ["chunkloaderror"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because built-in fingerprint takes precedence + root_component: + system (ignored because built-in fingerprint takes precedence) + exception* + type* + "ChunkLoadError" + value (ignored because stacktrace takes precedence) + "ChunkLoadError: something something..." + stacktrace* + frame* + module* + "foo.bar" + filename (ignored because module takes precedence) + "bar.tsx" + function* + "main" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 000000000000..a301b9c39f9b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,47 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because built-in fingerprint takes precedence + root_component: + app (ignored because built-in fingerprint takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "ChunkLoadError" + value* + "ChunkLoadError: something else..." + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "bar.bar" + filename (ignored because module takes precedence) + "foo.tsx" + function* + "main" +-------------------------------------------------------------------------- +built_in_fingerprint: + hash: "e130644157dc9d186569686838e16f9b" + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"],"matched_rule":{"attributes":{},"fingerprint":["chunkloaderror"],"is_builtin":true,"matchers":[["family","javascript"],["type","ChunkLoadError"]],"text":"family:\"javascript\" type:\"ChunkLoadError\" -> \"chunkloaderror\""}} + values: ["chunkloaderror"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because built-in fingerprint takes precedence + root_component: + system (ignored because built-in fingerprint takes precedence) + exception* + type* + "ChunkLoadError" + value (ignored because stacktrace takes precedence) + "ChunkLoadError: something else..." + stacktrace* + frame* + module* + "bar.bar" + filename (ignored because module takes precedence) + "foo.tsx" + function* + "main" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/callee_guaranteed.pysnap new file mode 100644 index 000000000000..0e85d6158663 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/callee_guaranteed.pysnap @@ -0,0 +1,256 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "3bb283edd206ca9069e3da4ce9c11869" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "" + ns_error* + domain* + "" + code* + 2 + stacktrace* + frame (marked out of app by the client) + function* + "start" + frame (marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "UIApplicationMain" + frame (marked out of app by the client) + function* + "-[UIApplication _run]" + frame (marked out of app by the client) + function* + "GSEventRunModal" + frame (marked out of app by the client) + function* + "CFRunLoopRunSpecific" + frame (marked out of app by the client) + function* + "__CFRunLoopRun" + frame (marked out of app by the client) + function* + "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__" + frame (marked out of app by the client) + function* + "_dispatch_main_queue_callback_4CF" + frame (marked out of app by the client) + function* + "_dispatch_client_callout" + frame (marked out of app by the client) + function* + "_dispatch_call_block_and_release" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame* (marked in-app by the client) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame* (marked in-app by the client) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "@callee_guaranteed" + frame* (marked in-app by the client) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored due to recursion) + function* + "stripped_application_code" +-------------------------------------------------------------------------- +system: + hash: "ab329c350a2abfdf4798139a4aee0d8b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "" + ns_error* + domain* + "" + code* + 2 + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_main_queue_callback_4CF" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_call_block_and_release" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame (ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame (ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap new file mode 100644 index 000000000000..ee2f28b997ff --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_no_regex_match.pysnap @@ -0,0 +1,7 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +hashed_checksum: + hash: "de46d023e69b171b90ccf3ebca7aede4" + checksum: "de46d023e69b171b90ccf3ebca7aede4" + raw_checksum: "not a legit checksum" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_regex_match.pysnap new file mode 100644 index 000000000000..c0ef3672255f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/checksum_regex_match.pysnap @@ -0,0 +1,6 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +checksum: + hash: "11212012123120120415201309082013" + checksum: "11212012123120120415201309082013" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 000000000000..70a05395cf6e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,119 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "7c8a196d16b94be382add324be2605ee" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "unicorn" + frame (marked out of app by the client) + function* + "UIApplicationMain" + frame (marked out of app by the client) + function* + "-[UIApplication _run]" + frame (marked out of app by the client) + function* + "_dispatch_main_queue_drain" + frame (marked out of app by the client) + function* + "_dispatch_client_callout" + frame (marked out of app by the client) + function* + "_dispatch_block_async_invoke2" + frame (marked out of app by the client) + function* + "-[NSBlockOperation main]" + frame (marked out of app by the client) + function* + "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__" + frame* (marked in-app by the client) + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "FudgeLogTaggedError" + frame (marked out of app by the client) + function* + "closure" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "SentrySetupInteractor.setupSentry" + frame (marked out of app by the client) + function* + "_dispatch_lane_barrier_sync_invoke_and_complete" + frame (marked out of app by the client) + function* + "_dispatch_client_callout" + frame (marked out of app by the client) + function* + "closure" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system threads take precedence + root_component: + default (ignored because app/system threads take precedence) + message (ignored because app/system threads take precedence) + "Foo" +-------------------------------------------------------------------------- +system: + hash: "cd7f51d716fd57adc1a5ce1c112e538f" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* + function* + "unicorn" + frame* + function* + "UIApplicationMain" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIApplication _run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_main_queue_drain" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_block_async_invoke2" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "-[NSBlockOperation main]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__" + frame* + function* + "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2" + frame* + function* + "FudgeLogTaggedError" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "closure" + frame* + function* + "SentrySetupInteractor.setupSentry" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_lane_barrier_sync_invoke_and_complete" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "closure" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/connection_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/connection_error.pysnap new file mode 100644 index 000000000000..0047f529f25c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/connection_error.pysnap @@ -0,0 +1,235 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "452f63c005af7ac8bd3ce1f988b04471" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ConnectionError" + value (ignored because stacktrace takes precedence) + "Error while reading from socket: ('Connection closed by server.',)" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.utils.safe" + filename (ignored because module takes precedence) + "safe.py" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.utils.services" + filename (ignored because module takes precedence) + "services.py" + function* + "" + context_line* + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + frame* (marked in-app by the client) + module* + "getsentry.quotas" + filename (ignored because module takes precedence) + "quotas.py" + function* + "is_rate_limited" + context_line* + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + frame* (marked in-app by the client) + module* + "sentry.quotas.redis" + filename (ignored because module takes precedence) + "redis.py" + function* + "is_rate_limited" + context_line* + "rejections = is_rate_limited(client, keys, args)" + frame* (marked in-app by the client) + module* + "sentry.utils.redis" + filename (ignored because module takes precedence) + "redis.py" + function* + "call_script" + context_line* + "return script(keys, args, client)" + frame (marked out of app by the client) + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "__call__" + context_line* + "return client.evalsha(self.sha, len(keys), *args)" + frame (marked out of app by the client) + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "evalsha" + context_line* + "return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)" + frame (marked out of app by the client) + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "execute_command" + context_line* + "return self.parse_response(connection, command_name, **options)" + frame (marked out of app by the client) + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "parse_response" + context_line* + "response = connection.read_response()" + frame (marked out of app by the client) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "read_response" + context_line* + "response = self._parser.read_response()" + frame (marked out of app by the client) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "read_response" + context_line* + "(e.args,))" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system exception takes precedence + root_component: + default (ignored because app/system exception takes precedence) + message (ignored because app/system exception takes precedence) + "%s.process_error" +-------------------------------------------------------------------------- +system: + hash: "b23d305fce7a3c4343f5c57a2937bfad" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ConnectionError" + value (ignored because stacktrace takes precedence) + "Error while reading from socket: ('Connection closed by server.',)" + stacktrace* + frame* + module* + "sentry.utils.safe" + filename (ignored because module takes precedence) + "safe.py" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.utils.services" + filename (ignored because module takes precedence) + "services.py" + function* + "" + context_line* + "context[key] = (lambda f: lambda *a, **k: getattr(self, f)(*a, **k))(key)" + frame* + module* + "getsentry.quotas" + filename (ignored because module takes precedence) + "quotas.py" + function* + "is_rate_limited" + context_line* + "return super(SubscriptionQuota, self).is_rate_limited(project, key=key)" + frame* + module* + "sentry.quotas.redis" + filename (ignored because module takes precedence) + "redis.py" + function* + "is_rate_limited" + context_line* + "rejections = is_rate_limited(client, keys, args)" + frame* + module* + "sentry.utils.redis" + filename (ignored because module takes precedence) + "redis.py" + function* + "call_script" + context_line* + "return script(keys, args, client)" + frame* + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "__call__" + context_line* + "return client.evalsha(self.sha, len(keys), *args)" + frame* + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "evalsha" + context_line* + "return self.execute_command('EVALSHA', sha, numkeys, *keys_and_args)" + frame* + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "execute_command" + context_line* + "return self.parse_response(connection, command_name, **options)" + frame* + module* + "redis.client" + filename (ignored because module takes precedence) + "client.py" + function* + "parse_response" + context_line* + "response = connection.read_response()" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "read_response" + context_line* + "response = self._parser.read_response()" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "read_response" + context_line* + "(e.args,))" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap new file mode 100644 index 000000000000..122a9a6d7a7b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_and_app_frames.pysnap @@ -0,0 +1,84 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "9c580bff7b008113595f9f1e0ef1962f" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" + stacktrace* + frame (marked out of app by custom stacktrace rule (function:runApp -app)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame (marked out of app by custom stacktrace rule (function:handleRequest -app)) + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (marked in-app by custom stacktrace rule (function:recordMetrics +app) but ignored by custom stacktrace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" + frame* (marked in-app by custom stacktrace rule (function:playFetch +app)) + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" +-------------------------------------------------------------------------- +system: + hash: "27e4433059022647e4d83d344cbf738c" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" + stacktrace* + frame (ignored by custom stacktrace rule (function:runApp -group)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame* + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (ignored by custom stacktrace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" + frame* + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_frames.pysnap new file mode 100644 index 000000000000..4164952bb5ec --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/contributing_system_frames.pysnap @@ -0,0 +1,70 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" + stacktrace (ignored because it contains no contributing frames) + frame (marked out of app by custom stacktrace rule (function:runApp -app)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame (marked out of app by custom stacktrace rule (function:handleRequest -app)) + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (marked in-app by custom stacktrace rule (function:recordMetrics +app) but ignored by custom stacktrace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" +-------------------------------------------------------------------------- +system: + hash: "9b3e1c08a50257c5ad760f1f3205a48b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" + stacktrace* + frame (ignored by custom stacktrace rule (function:runApp -group)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame* + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (ignored by custom stacktrace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp.pysnap new file mode 100644 index 000000000000..73a60425a7a7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp.pysnap @@ -0,0 +1,17 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "666766514295bb52812324097cdaf53e" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation (ignored because it's not a local script violation) + uri* + "YYY" + message (ignored because csp takes precedence) + "Blocked 'script' from 'YYY'" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_img_src.pysnap new file mode 100644 index 000000000000..2c3c452f7009 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_img_src.pysnap @@ -0,0 +1,15 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "1742101e08eb1608f569751dfedd0062" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "img-src" + violation (ignored because it's not a local script violation) + uri* + "ftp://example.com" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap new file mode 100644 index 000000000000..6235236d6d14 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_no_blocked_uri.pysnap @@ -0,0 +1,15 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "efddf1cde918097259aa7d4904fb1942" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation (ignored because it's not a local script violation) + uri* + "'self'" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap new file mode 100644 index 000000000000..34ce02f248a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_data_uri.pysnap @@ -0,0 +1,15 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "4e6f2bce9d121aa89f4dc5e5da08afb5" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "img-src" + violation (ignored because it's not a local script violation) + uri* + "data:" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 000000000000..e5eb68b0fc26 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,18 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "56c6520f35bce2f89ed2c4e725ccef65" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation* + "'unsafe-eval'" + uri (ignored because violation takes precedence) + "'self'" + message (ignored because csp takes precedence) + "Blocked unsafe eval() 'script'" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 000000000000..9352c136e9c0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,18 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "d346ee37d19a2be6587e609075ca2d57" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation* + "'unsafe-inline'" + uri (ignored because violation takes precedence) + "'self'" + message (ignored because csp takes precedence) + "Blocked unsafe inline 'script'" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap new file mode 100644 index 000000000000..180d5852c736 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_script_src_uri.pysnap @@ -0,0 +1,15 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "223cdacfe5b4b830dc700b5c18cc21b4" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "script-src" + violation (ignored because it's not a local script violation) + uri* + "example.com" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap new file mode 100644 index 000000000000..c78bfbac95ce --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/csp_style_src_elem.pysnap @@ -0,0 +1,17 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "537a973f594c364842893e9a72af62a5" + contributing component: csp + hint: None + root_component: + default* + csp* + salt* (a static salt) + "style-src-elem" + violation (ignored because it's not a local script violation) + uri* + "use.fontawesome.com" + message (ignored because csp takes precedence) + "Blocked 'style' from ''" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap new file mode 100644 index 000000000000..1fffa5899f9f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client.pysnap @@ -0,0 +1,339 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: exception + hint: ignored because custom client fingerprint takes precedence + root_component: + app (ignored because custom client fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame (marked out of app by the client) + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame (marked out of app by the client) + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame (marked out of app by the client) + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_client_fingerprint: + hash: "1f104d36b017e2e430aed1f6a94a5a9d" + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"]} + values: ["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because custom client fingerprint takes precedence + root_component: + system (ignored because custom client fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 000000000000..f57175331275 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,339 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + app (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame (marked out of app by the client) + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame (marked out of app by the client) + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame (marked out of app by the client) + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_server_fingerprint: + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + system (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap new file mode 100644 index 000000000000..4809d3caf46c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_message_parameterization.pysnap @@ -0,0 +1,19 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: exception + hint: ignored because custom client fingerprint takes precedence + root_component: + app (ignored because custom client fingerprint takes precedence) + exception* + type* + "FailedToFetchError" + value* (stripped event-specific values) + "FailedToFetchError: Charlie didn't bring balls back!" +-------------------------------------------------------------------------- +custom_client_fingerprint: + hash: "156c06a9ee7580f198f83891db3b176c" + fingerprint_info: {"client_fingerprint":["{{ message }}","dogs are great"]} + values: ["FailedToFetchError: Charlie didn't bring balls back!","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap new file mode 100644 index 000000000000..355f1dc8f82b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,339 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + app (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame (marked out of app by the client) + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame (marked out of app by the client) + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame (marked out of app by the client) + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_server_fingerprint: + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + system (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/empty.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/empty.pysnap new file mode 100644 index 000000000000..d275a636cac1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/empty.pysnap @@ -0,0 +1,5 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap new file mode 100644 index 000000000000..20e4c545034e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_cocoa_nserror.pysnap @@ -0,0 +1,168 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "029f3b967068b1539f96957b7c0451d7" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "iOS_Swift.SampleError" + value (ignored because ns-error info takes precedence) + "Code= Description=The operation couldn’t be completed. (iOS_Swift.SampleError error .)" + ns_error* + domain* + "iOS_Swift.SampleError" + code* + 0 + threads (ignored because app exception takes precedence) + stacktrace* + frame (marked out of app by the client) + function* + "start" + frame (marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "main" + frame (marked out of app by the client) + function* + "UIApplicationMain" + frame (marked out of app by the client) + function* + "-[UIApplication _run]" + frame (marked out of app by the client) + function* + "GSEventRunModal" + frame (marked out of app by the client) + function* + "CFRunLoopRunSpecific" + frame (marked out of app by the client) + function* + "__CFRunLoopRun" + frame (marked out of app by the client) + function* + "__CFRunLoopDoSources0" + frame (marked out of app by the client) + function* + "__CFRunLoopDoSource0" + frame (marked out of app by the client) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (marked out of app by the client) + function* + "__eventFetcherSourceCallback" + frame (marked out of app by the client) + function* + "__processEventQueue" + frame (marked out of app by the client) + function* + "-[UIApplicationAccessibility sendEvent:]" + frame (marked out of app by the client) + function* + "-[UIApplication sendEvent:]" + frame (marked out of app by the client) + function* + "-[UIWindow sendEvent:]" + frame (marked out of app by the client) + function* + "-[UIWindow _sendTouchesForEvent:]" + frame (marked out of app by the client) + function* + "-[UIControl touchesEnded:withEvent:]" + frame (marked out of app by the client) + function* + "-[UIControl _sendActionsForEvents:withEvent:]" + frame (marked out of app by the client) + function* + "-[UIControl sendAction:to:forEvent:]" + frame (marked out of app by the client) + function* + "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2" + frame (marked out of app by the client) + function* + "-[UIApplication sendAction:to:from:forEvent:]" + frame* (marked in-app by the client) + function* + "ViewController.captureError" + frame (marked in-app by the client but ignored due to recursion) + function* + "ViewController.captureError" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app exception takes precedence + root_component: + system (ignored because app exception takes precedence) + threads (ignored because app exception takes precedence) + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "main" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__eventFetcherSourceCallback" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__processEventQueue" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIApplicationAccessibility sendEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIApplication sendEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIWindow sendEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIWindow _sendTouchesForEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIControl touchesEnded:withEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIControl _sendActionsForEvents:withEvent:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIControl sendAction:to:forEvent:]" + frame (ignored by built-in stacktrace rule (family:native function:__*[[]Sentry* -group)) + function* + "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIApplication sendAction:to:from:forEvent:]" + frame* + function* + "ViewController.captureError" + frame (ignored due to recursion) + function* + "ViewController.captureError" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap new file mode 100644 index 000000000000..751e8052a493 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "b23ee1963904c2ca87b145febf94b66c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" + value* + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap new file mode 100644 index 000000000000..0c7e1cce5a94 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_2.pysnap @@ -0,0 +1,34 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "ebcb7aa3baed0b2447fed7b265db777c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app exception takes precedence + root_component: + system (ignored because app exception takes precedence) + exception (ignored because hash matches app variant) + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap new file mode 100644 index 000000000000..7c11a055e489 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_compute_hashes_3.pysnap @@ -0,0 +1,54 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "8c527d091797ca91a535be7b461e5059" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app exception takes precedence + root_component: + system (ignored because app exception takes precedence) + chained_exception (ignored because hash matches app variant) + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* + filename* + "baz.py" + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap new file mode 100644 index 000000000000..e3c0e5366722 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_all_exceptions_marked_as_groups.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 000000000000..0eac34c18407 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,25 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "e2bf1e0628b7b1824a9b63dec7a079a3" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "System.Exception" + value* + "Some Inner Exception" + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 000000000000..e3c0e5366722 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 000000000000..e3c0e5366722 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 000000000000..5a8a03980908 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap new file mode 100644 index 000000000000..7e2fc01b23ae --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_no_root.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "028157fe357e4592e39eacb32eafa2db" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnermostException" + value* + "Whoops" + exception* + type* + "InnerException" + value* + "Nope" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 000000000000..f2aebe2a9940 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "f0078a82f351095ba595daa7d493aa3c" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.Exception" + value* + "Some Inner Exception" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 000000000000..e3c0e5366722 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "93b26686d00504b4e5aa1cb0244d8b37" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "InnerException" + value* + "Nope" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 000000000000..1bb88b46f4fd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "0809098f9f613b63467605dd1739cc9b" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 000000000000..0eac34c18407 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,25 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "e2bf1e0628b7b1824a9b63dec7a079a3" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "System.Exception" + value* + "Some Inner Exception" + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap new file mode 100644 index 000000000000..5a8a03980908 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_exception.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 000000000000..5a8a03980908 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 000000000000..e3083ec042d2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,25 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "17022e0561e9b6e6351723a08aa81b18" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.Exception" + value* + "And now for something completely different." + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 000000000000..5a8a03980908 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "a4f16891fa438620699cb2d9af5cc827" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 000000000000..f2aebe2a9940 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "f0078a82f351095ba595daa7d493aa3c" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.Exception" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.Exception" + value* + "Some Inner Exception" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 000000000000..01d3f6518b4a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,87 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "1ddf9a146f61f3c8667d7312727caff2" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "DoStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the stuff" + stacktrace* + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_stuff" + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_different_stuff" + exception* + type* + "DoOtherStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the other stuff" + stacktrace* + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_other_stuff" + frame (marked in-app by the client but ignored due to recursion) + module* + "dostuff" + function* + "do_other_stuff" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." +-------------------------------------------------------------------------- +system: + hash: "f9f80cec48a38448579e3c41b9c525f5" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "DoStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the stuff" + stacktrace* + frame* + module* + "dostuff" + function* + "do_stuff" + frame* + module* + "dostuff" + function* + "do_different_stuff" + exception* + type* + "DoOtherStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the other stuff" + stacktrace* + frame* + module* + "dostuff" + function* + "do_other_stuff" + frame (ignored due to recursion) + module* + "dostuff" + function* + "do_other_stuff" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap new file mode 100644 index 000000000000..067ef9d93eea --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types.pysnap @@ -0,0 +1,25 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "bca604b98cb4637167eb6190a92e8933" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.SuchWowException" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.AmazingException" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 000000000000..c9125ad9ed76 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,25 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "fca0fd23f09e8da4481304ef2a531100" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "MyApp.CoolException" + value* (stripped event-specific values) + "Test " + exception* + type* + "MyApp.BeansException" + value* (stripped event-specific values) + "Test " + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap new file mode 100644 index 000000000000..9b55631059d2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_javascript_no_in_app.pysnap @@ -0,0 +1,60 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "TypeError" + value* + "Cannot read property 'submitError' of null" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "app/components/modals/createTeamModal" + filename (ignored because module takes precedence) + "createteammodal.jsx" + context_line* + "onError(err);" + frame (marked out of app by the client) + module* + "app/views/settings/components/forms/form" + filename (ignored because module takes precedence) + "form.jsx" + function (ignored because sourcemap used and context line available) + "onError" + context_line* + "this.model.submitError(error);" +-------------------------------------------------------------------------- +system: + hash: "9b140b41d4ae2bd9588ccff62cb8358f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TypeError" + value (ignored because stacktrace takes precedence) + "Cannot read property 'submitError' of null" + stacktrace* + frame* + module* + "app/components/modals/createTeamModal" + filename (ignored because module takes precedence) + "createteammodal.jsx" + context_line* + "onError(err);" + frame* + module* + "app/views/settings/components/forms/form" + filename (ignored because module takes precedence) + "form.jsx" + function (ignored because sourcemap used and context line available) + "onError" + context_line* + "this.model.submitError(error);" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_type.pysnap new file mode 100644 index 000000000000..583f329cc490 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_type.pysnap @@ -0,0 +1,12 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "5eb63bbbe01eeed093cb22bb8f5acdc3" + contributing component: exception + hint: None + root_component: + app* + exception* + value* + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_value.pysnap new file mode 100644 index 000000000000..b23301d95287 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/exception_without_value.pysnap @@ -0,0 +1,12 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "5a2cfd89b7b171fd7b4794b08023d04f" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "ValueError" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap new file mode 100644 index 000000000000..a7159b248f2a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/fallback_prefix_level_1.pysnap @@ -0,0 +1,60 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "EXC_BAD_ACCESS" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "start" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "UIApplicationMain" + frame (marked out of app by the client) + function* + "-[UIApplication _run]" + frame (marked out of app by the client) + function* + "GSEventRunModal" + frame (marked out of app by the client) + function* + "objc_release" +-------------------------------------------------------------------------- +system: + hash: "c670c5a80a2775994bd2d63b408abd6c" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "GSEventRunModal" + frame* + function* + "objc_release" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..142812370579 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__" + function* + "invoke" +-------------------------------------------------------------------------- +system: + hash: "526b64456c48836a46ec1a89544fd412" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_empty_list.pysnap new file mode 100644 index 000000000000..b66f0c9f3ebd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_empty_list.pysnap @@ -0,0 +1,21 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no frames) +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no frames) diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..2298faa18a71 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "7d2cc7acbf90328200d960bf78a26234" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 000000000000..da07956d6d3f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.api.OutboundController$$FastClassByGuice$$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "465d672b2d322bf6a1b44499f6dabc1f" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$FastClassByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..167429d2cba3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "45c0b0a8c777e7a7040d7c39233a08a5" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 000000000000..c3cbeb4e992f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,31 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (family:javascript path:org-dartlang-sdk:///** -app)) + filename* + "async_patch.dart" + function* + "_asyncStartSync" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (family:javascript path:org-dartlang-sdk:///** -group)) + filename* + "async_patch.dart" + function* + "_asyncStartSync" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 000000000000..0a2efe98d5f5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__$fn__" + function* + "invoke" +-------------------------------------------------------------------------- +system: + hash: "353e05904b48bd3ae4fa9623934a70d0" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sentry_clojure_example.core$_main$fn__$fn__" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 000000000000..b146efb50829 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$$$FastClassByGuice$$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "0094f39fc617031afb6c655419f4a9f2" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.OutboundController$$EnhancerByGuice$$$$FastClassByGuice$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 000000000000..4af872d47cc5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$$$EnhancerBySpringCGLIB$$$$FastClassBySpringCGLIB$$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "be15ca3d511b96918e087c4f42503ca2" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "invalid.gruml.talkytalkyhub.common.config.JipJipConfig$$EnhancerBySpringCGLIB$$$$EnhancerBySpringCGLIB$$$$FastClassBySpringCGLIB$$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 000000000000..45df44eb7a82 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,56 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "foo.js" + function* + "test" + context_line* + "hello world" + frame (non app frame) + filename* + "foo.js" + function* + "test" + context_line* + "hello world" + frame (non app frame) + filename (ignored because frame points to a URL) + "foo.js" + context_line (ignored because file path is a URL and function name is missing) + "hello world" +-------------------------------------------------------------------------- +system: + hash: "e04dce7550635e05dbd7f656102cf304" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename (ignored because frame points to a URL) + "foo.js" + function* + "test" + context_line* + "hello world" + frame* + filename* + "foo.js" + function* + "test" + context_line* + "hello world" + frame + filename (ignored because frame points to a URL) + "foo.js" + context_line (ignored because file path is a URL and function name is missing) + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 000000000000..72ea719fa866 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" +-------------------------------------------------------------------------- +system: + hash: "098f6bcd4621d373cade4e832627b4f6" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 000000000000..9af80ddfceec --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "7f7aaadf-a006-4217-9ed5-5fbf8585c6c0" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame + filename (ignored because frame points to a URL) + "7f7aaadf-a006-4217-9ed5-5fbf8585c6c0" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap new file mode 100644 index 000000000000..db1d4f3fd628 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" + context_line* + "hello world" +-------------------------------------------------------------------------- +system: + hash: "64a0e0a34d99dce03a8c5a4c237a4b5a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" + context_line* + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap new file mode 100644 index 000000000000..db1d4f3fd628 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" + context_line* + "hello world" +-------------------------------------------------------------------------- +system: + hash: "64a0e0a34d99dce03a8c5a4c237a4b5a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename (ignored because frame points to a URL) + "foo.py" + function* + "test" + context_line* + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 000000000000..1325767676ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (family:javascript module:**/packages/flutter/** -app)) + module* + "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding" + filename (ignored because frame points to a URL) + "binding.dart" + function* (trimmed javascript function) + "_flushPointerEventQueue" +-------------------------------------------------------------------------- +system: + hash: "e0e7c4713e9092dc77635d5a0d5db31d" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding" + filename (ignored because frame points to a URL) + "binding.dart" + function* (trimmed javascript function) + "_flushPointerEventQueue" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 000000000000..f84d3ad7dbc8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.model.User$HibernateProxy$" + function* + "jipJipManagementApplication" +-------------------------------------------------------------------------- +system: + hash: "c32a94349d9e9b72d31a46610c6c9589" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.model.User$HibernateProxy$" + function* + "jipJipManagementApplication" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 000000000000..04bb23df2d2a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* + "foo.bar.Baz" + function (ignored lambda function) + "lambda$work$1" +-------------------------------------------------------------------------- +system: + hash: "be7f1b8b4014de623c533a8218dba5bd" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "foo.bar.Baz" + function (ignored lambda function) + "lambda$work$1" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 000000000000..56b4f2a1b23e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module (ignored java lambda) + "foo.bar.Baz$$Lambda$40/1673859467" + function* + "call" +-------------------------------------------------------------------------- +system: + hash: "53b9e9679a8ea25880376080b76f98ad" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module (ignored java lambda) + "foo.bar.Baz$$Lambda$40/1673859467" + function* + "call" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap new file mode 100644 index 000000000000..7d14330b0a4e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" +-------------------------------------------------------------------------- +system: + hash: "538bdfd8d7bb2495d0d6429c3689a420" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap new file mode 100644 index 000000000000..7d14330b0a4e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_2.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" +-------------------------------------------------------------------------- +system: + hash: "538bdfd8d7bb2495d0d6429c3689a420" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "com.example.api.entry.EntriesResource_$$_javassist" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap new file mode 100644 index 000000000000..9e446768e0a5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_javassist_3.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* (cleaned javassist parts) + "entriesresource_$$_javassist.java" + function* + "fn" +-------------------------------------------------------------------------- +system: + hash: "dc3d511120ce04996b1eef3496516e5c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* (cleaned javassist parts) + "entriesresource_$$_javassist.java" + function* + "fn" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap new file mode 100644 index 000000000000..34281cfa23fc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "forEach" +-------------------------------------------------------------------------- +system: + hash: "30eb5001914d29dd8461898b5b8094fe" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename (ignored because filename suggests native code) + "[native code]" + function* + "forEach" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 000000000000..a544d5a147d7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,91 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (path:package:sentry_logging/** -app)) + filename* + "sentry_logging.dart" + function* + "SentryLogging.log" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_dio/** -app)) + filename* + "sentry_dio.dart" + function* + "SentryDio.dio" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_file/** -app)) + filename* + "sentry_file.dart" + function* + "SentryFile.file" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_hive/** -app)) + filename* + "sentry_hive.dart" + function* + "SentryHive.hive" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_isar/** -app)) + filename* + "sentry_isar.dart" + function* + "SentryIsar.isar" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_sqflite/** -app)) + filename* + "sentry_sqflite.dart" + function* + "SentrySqflite.sqflite" + frame (marked out of app by built-in stacktrace rule (path:package:sentry_drift/** -app)) + filename* + "sentry_drift.dart" + function* + "SentryDrift.drift" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (path:package:sentry_logging/** -group)) + filename* + "sentry_logging.dart" + function* + "SentryLogging.log" + frame (ignored by built-in stacktrace rule (path:package:sentry_dio/** -group)) + filename* + "sentry_dio.dart" + function* + "SentryDio.dio" + frame (ignored by built-in stacktrace rule (path:package:sentry_file/** -group)) + filename* + "sentry_file.dart" + function* + "SentryFile.file" + frame (ignored by built-in stacktrace rule (path:package:sentry_hive/** -group)) + filename* + "sentry_hive.dart" + function* + "SentryHive.hive" + frame (ignored by built-in stacktrace rule (path:package:sentry_isar/** -group)) + filename* + "sentry_isar.dart" + function* + "SentryIsar.isar" + frame (ignored by built-in stacktrace rule (path:package:sentry_sqflite/** -group)) + filename* + "sentry_sqflite.dart" + function* + "SentrySqflite.sqflite" + frame (ignored by built-in stacktrace rule (path:package:sentry_drift/** -group)) + filename* + "sentry_drift.dart" + function* + "SentryDrift.drift" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 000000000000..ba9cbe6c91da --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,31 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (path:package:sentry/** -app)) + filename* + "sentry_exception_factory.dart" + function* + "SentryExceptionFactory.getSentryException" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (path:package:sentry/** -group)) + filename* + "sentry_exception_factory.dart" + function* + "SentryExceptionFactory.getSentryException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 000000000000..f601aa7e4773 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,31 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (path:package:sentry_flutter/** -app)) + filename* + "sentry_exception_factory.dart" + function* + "SentryExceptionFactory.getSentryException" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (path:package:sentry_flutter/** -group)) + filename* + "sentry_exception_factory.dart" + function* + "SentryExceptionFactory.getSentryException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 000000000000..5886bac926ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:framework -app)) + module* (removed codegen marker) + "sun.reflect.GeneratedSerializationConstructorAccessor" + function* + "invoke" +-------------------------------------------------------------------------- +system: + hash: "07d1a8e5728b3c4c7aa8b8273fd0e753" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sun.reflect.GeneratedSerializationConstructorAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 000000000000..b3076746dc9b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:framework -app)) + module* (removed codegen marker) + "sun.reflect.GeneratedConstructorAccessor" + function* + "invoke" +-------------------------------------------------------------------------- +system: + hash: "09e0efcab18f545166318118ed4e0292" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed codegen marker) + "sun.reflect.GeneratedConstructorAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 000000000000..b3732e80a36a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:framework -app)) + module* (removed reflection marker) + "sun.reflect.GeneratedMethodAccessor" + function* + "invoke" + frame (marked out of app by built-in stacktrace rule (category:framework -app)) + module* (removed reflection marker) + "jdk.internal.reflect.GeneratedMethodAccessor" + function* + "invoke" +-------------------------------------------------------------------------- +system: + hash: "9bc326575875422d0d4ced3c35d9f916" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* (removed reflection marker) + "sun.reflect.GeneratedMethodAccessor" + function* + "invoke" + frame* + module* (removed reflection marker) + "jdk.internal.reflect.GeneratedMethodAccessor" + function* + "invoke" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap new file mode 100644 index 000000000000..230922ae0564 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.py" + function* (ruby block) + "block" +-------------------------------------------------------------------------- +system: + hash: "27eed4125fc13d42163ddb0b8f357b48" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + function* (ruby block) + "block" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 000000000000..bedffd4c9e18 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.html.erb" + function* (removed generated erb template suffix) + "_foo_html_erb" +-------------------------------------------------------------------------- +system: + hash: "4067a71d7098866f87c746a57a77b2bb" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" + function* (removed generated erb template suffix) + "_foo_html_erb" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 000000000000..e350338434d5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,24 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.html.erb" +-------------------------------------------------------------------------- +system: + hash: "2f908c015ad77a50595512fcf65d344c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 000000000000..e350338434d5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,24 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.html.erb" +-------------------------------------------------------------------------- +system: + hash: "2f908c015ad77a50595512fcf65d344c" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.html.erb" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap new file mode 100644 index 000000000000..e5b21befd487 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,32 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.py" + function (ignored because sourcemap used and context line available) + "bar" + context_line* + "foo bar" +-------------------------------------------------------------------------- +system: + hash: "60e0a667027bef0d0b7c4882891df7e8" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + function (ignored because sourcemap used and context line available) + "bar" + context_line* + "foo bar" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap new file mode 100644 index 000000000000..4f1523da15ef --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_uses_module_over_filename.pysnap @@ -0,0 +1,28 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* + "foo" + filename (ignored because module takes precedence) + "foo.py" +-------------------------------------------------------------------------- +system: + hash: "acbd18db4cc2f85cedef654fccc4a4d8" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "foo" + filename (ignored because module takes precedence) + "foo.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap new file mode 100644 index 000000000000..1472cef7e5ab --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/frame_with_only_required_vars.pysnap @@ -0,0 +1,24 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "foo.py" +-------------------------------------------------------------------------- +system: + hash: "1effb24729ae4c43efa36b460511136a" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/go_pkg_mod.pysnap new file mode 100644 index 000000000000..887d0399ef0c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/go_pkg_mod.pysnap @@ -0,0 +1,56 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "98ba9d44b8e7924ce21654996f92c2eb" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "*pq.Error" + value (ignored because stacktrace takes precedence) + "pq: cannot cast jsonb null to type integer" + stacktrace* + frame (marked out of app by built-in stacktrace rule (path:**/go/pkg/mod/** -app)) + module* + "github.com/robfig/cron/v3" + filename (ignored because module takes precedence) + "cron.go" + function* + "FuncJob.Run" + frame* (marked in-app by the client) + module* + "main" + filename (ignored because module takes precedence) + "main.go" + function* + "background.func2" +-------------------------------------------------------------------------- +system: + hash: "6bbf86806a0ec54202e633626ae09bd4" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "*pq.Error" + value (ignored because stacktrace takes precedence) + "pq: cannot cast jsonb null to type integer" + stacktrace* + frame* + module* + "github.com/robfig/cron/v3" + filename (ignored because module takes precedence) + "cron.go" + function* + "FuncJob.Run" + frame* + module* + "main" + filename (ignored because module takes precedence) + "main.go" + function* + "background.func2" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_125_event_126.pysnap new file mode 100644 index 000000000000..4a2c0c66fa78 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_125_event_126.pysnap @@ -0,0 +1,284 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / 0x00000032" + value* (stripped event-specific values) + "Fatal Error: EXC_BAD_ACCESS / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (non app frame) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "CFBundleGetFunctionPointerForName" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_CFBundleLoadExecutableAndReturnError" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_CFBundleDlfcnLoadBundle" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "dlopen_internal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "dyld::link" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoader::link" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoader::recursiveRebase" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoaderMachOCompressed::rebase" +-------------------------------------------------------------------------- +system: + hash: "3da34e8c72dbcd4a490ac36eb7130638" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / 0x00000032" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored due to recursion) + function* + "start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "CFBundleGetFunctionPointerForName" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_CFBundleLoadExecutableAndReturnError" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_CFBundleDlfcnLoadBundle" + frame* + function* + "dlopen" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "dlopen_internal" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "dyld::link" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoader::link" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoader::recursiveRebase" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoaderMachOCompressed::rebase" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_200_event_200.pysnap new file mode 100644 index 000000000000..c88f81b5d1e3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_200_event_200.pysnap @@ -0,0 +1,172 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "RtlUserThreadStart" + frame (non app frame) + function* + "BaseThreadInitThunk" + frame (non app frame) + function* + "TppWorkerThread" + frame (non app frame) + function* + "TppWorkpExecuteCallback" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "WEBIO_REQUEST::OnIoComplete" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "HTTP_USER_REQUEST::OnSendRequest" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "HTTP_BASE_OBJECT::Dereference" + frame (non app frame) + function* + "destructor'" + frame (non app frame) + function* + "HTTP_USER_REQUEST::~HTTP_USER_REQUEST" + frame (non app frame) + function* + "destructor'" + frame (non app frame) + function* + "RtlFreeHeap" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "memset" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpFreeUserBlock" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpFreeUserBlockToHeap" + frame (non app frame) + function* + "RtlFreeHeap" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpFreeHeapInternal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpFreeHeap" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlEnterCriticalSection" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpEnterCriticalSectionContended" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpWaitOnCriticalSection" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpWaitOnAddress" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RtlpOptimizeWaitOnAddressWaitList" +-------------------------------------------------------------------------- +system: + hash: "ca733a48a19d237df8577d09449095d9" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "TppWorkpExecuteCallback" + frame* + function* + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "WEBIO_REQUEST::OnIoComplete" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "HTTP_USER_REQUEST::OnSendRequest" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "HTTP_BASE_OBJECT::Dereference" + frame* + function* + "destructor'" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "HTTP_USER_REQUEST::~HTTP_USER_REQUEST" + frame* + function* + "destructor'" + frame* + function* + "RtlFreeHeap" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "memset" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpFreeUserBlock" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpFreeUserBlockToHeap" + frame* + function* + "RtlFreeHeap" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpFreeHeapInternal" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpFreeHeap" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlEnterCriticalSection" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpEnterCriticalSectionContended" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpWaitOnCriticalSection" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpWaitOnAddress" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RtlpOptimizeWaitOnAddressWaitList" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_275_event_275.pysnap new file mode 100644 index 000000000000..525ce1b9b56a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_275_event_275.pysnap @@ -0,0 +1,204 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_root_queues_init_once" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_dispatch_worker_thread2" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_root_queue_drain" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_client_callout" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" +-------------------------------------------------------------------------- +system: + hash: "2c1bbd635b64d5adccdb64a620044075" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_dispatch_root_queues_init_once" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_wqthread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_dispatch_worker_thread2" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_root_queue_drain" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_289_event_312.pysnap new file mode 100644 index 000000000000..eef46e15a90c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_289_event_312.pysnap @@ -0,0 +1,188 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "thread.cpp" + function* + "boost::thread::start_thread_noexcept" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (non app frame) + filename* + "thread.cpp" + function* + "boost::`anonymous namespace'::thread_proxy" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "glDeleteTextures_Exec" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gleUnbindDeleteHashNamesAndObjects" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gleUnbindTextureObject" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldUpdateDispatch" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldUpdateDispatch" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gldCreateDevice" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "d90cd4f110751aff5a0a7df3c546a339" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "thread.cpp" + function* + "boost::thread::start_thread_noexcept" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "thread.cpp" + function* + "boost::`anonymous namespace'::thread_proxy" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame* + function* + "glDeleteTextures_Exec" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gleUnbindDeleteHashNamesAndObjects" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gleUnbindTextureObject" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gldUpdateDispatch" + frame (ignored due to recursion) + function* + "gldUpdateDispatch" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gpusSubmitDataBuffers" + frame* + function* + "gldCreateDevice" + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_294.pysnap new file mode 100644 index 000000000000..29bb7aa738a9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_294.pysnap @@ -0,0 +1,286 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "map" + function* + "std::__1::map::~map" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "utility" + function* + "std::__1::pair::~pair" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::__1::thread::~thread" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "std::terminate" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::__terminate" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "default_terminate_handler" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "abort_message" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) +-------------------------------------------------------------------------- +system: + hash: "12f18dcb1efe33b32c7afe5004addaaa" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_wqthread" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "map" + function* + "std::__1::map::~map" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (ignored due to recursion) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame* + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "utility" + function* + "std::__1::pair::~pair" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::__1::thread::~thread" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "std::terminate" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "std::__terminate" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "default_terminate_handler" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort_message" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__abort" + frame diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_329.pysnap new file mode 100644 index 000000000000..bfb126dc7594 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_294_event_329.pysnap @@ -0,0 +1,316 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_root_queues_init_once" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_dispatch_worker_thread2" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_root_queue_drain" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_dispatch_client_callout" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "map" + function* + "std::__1::map::~map" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "utility" + function* + "std::__1::pair::~pair" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "std::terminate" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::__terminate" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "demangling_terminate_handler" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "abort_message" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "12f18dcb1efe33b32c7afe5004addaaa" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_dispatch_root_queues_init_once" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_wqthread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_dispatch_worker_thread2" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_root_queue_drain" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "map" + function* + "std::__1::map::~map" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (ignored due to recursion) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (ignored due to recursion) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame* + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "utility" + function* + "std::__1::pair::~pair" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "std::terminate" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "std::__terminate" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "demangling_terminate_handler" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort_message" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_307.pysnap new file mode 100644 index 000000000000..a2ba82e7747d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_307.pysnap @@ -0,0 +1,124 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value* + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "__dynamic_cast" +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "__dynamic_cast" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_657.pysnap new file mode 100644 index 000000000000..f58c9a003925 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_307_event_657.pysnap @@ -0,0 +1,114 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value* + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_313.pysnap new file mode 100644 index 000000000000..2eebad58dc62 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_313.pysnap @@ -0,0 +1,382 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (non app frame) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_objc_msgSend_uncached" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "lookUpImpOrForward" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "initializeAndMaybeRelock" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "initializeNonMetaClass" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CALLING_SOME_+initialize_METHOD" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "dlopen_internal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__report_load" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "__report_load.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "e678e9c9f08b5e0f9987605f0f5dbae5" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored due to recursion) + function* + "start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_objc_msgSend_uncached" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "lookUpImpOrForward" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "initializeAndMaybeRelock" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "initializeNonMetaClass" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CALLING_SOME_+initialize_METHOD" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame* + function* + "dlopen" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "dlopen_internal" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__report_load" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "__report_load.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_333.pysnap new file mode 100644 index 000000000000..3c76ca6ed7a3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_313_event_333.pysnap @@ -0,0 +1,392 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (non app frame) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_objc_msgSend_uncached" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "lookUpImpOrForward" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "initializeAndMaybeRelock" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "initializeNonMetaClass" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CALLING_SOME_+initialize_METHOD" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "dlopen_internal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "dyld::runInitializers" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoader::runInitializers" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoader::processInitializers" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoader::recursiveInitialization" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoaderMachO::doInitialization" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ImageLoaderMachO::doModInitFunctions" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__report_load" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "e678e9c9f08b5e0f9987605f0f5dbae5" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "initialize.cpp" + function* + "MZ::`anonymous namespace'::lambda::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_objc_msgSend_uncached" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "lookUpImpOrForward" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "initializeAndMaybeRelock" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "initializeNonMetaClass" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CALLING_SOME_+initialize_METHOD" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame* + function* + "dlopen" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "dlopen_internal" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "dyld::runInitializers" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoader::runInitializers" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoader::processInitializers" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoader::recursiveInitialization" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoaderMachO::doInitialization" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ImageLoaderMachO::doModInitFunctions" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__report_load" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_319_event_321.pysnap new file mode 100644 index 000000000000..ceea25b15e10 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_319_event_321.pysnap @@ -0,0 +1,388 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "-[NSApplication run]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_DPSNextEvent" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ReceiveNextEventCommon" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RunCurrentEventLoopInMode" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CFRunLoopRunSpecific" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopRun" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopDoSources0" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopDoSource0" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThreadPerformPerform" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "-[NSView displayIfNeeded]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "-[NSOpenGLContext flushBuffer]" + frame (non app frame) + function* + "CGLFlushDrawable" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "glSwap_Exec" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldPresentFramebufferData" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "SwapFlush" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "intelSubmitCommands" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusKillClientExt" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "_sigtramp" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "NSRunAlertPanel" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_NSTryRunModal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Transaction::commit" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Context::commit_transaction" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Layer::display_if_needed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "CGLTexImageIOSurface2D" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CGLDescribeRenderer" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gliSetInteger" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldFlushObject" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "intelSubmitCommands" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "IntelCommandBuffer::getNew" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "gpusSubmitDataBuffers" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusKillClientExt" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "f6d6be7dc293b9a8dad3b8aa2a567e49" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame* + function* + "-[NSApplication run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_DPSNextEvent" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ReceiveNextEventCommon" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RunCurrentEventLoopInMode" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThreadPerformPerform" + frame* + function* + "stripped_application_code" + frame* + function* + "-[NSView displayIfNeeded]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "-[NSOpenGLContext flushBuffer]" + frame* + function* + "CGLFlushDrawable" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "glSwap_Exec" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gldPresentFramebufferData" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "SwapFlush" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "intelSubmitCommands" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "IntelCommandBuffer::getNew" + frame* + function* + "gpusSubmitDataBuffers" + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusKillClientExt" + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "_sigtramp" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "NSRunAlertPanel" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "_NSTryRunModal" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Transaction::commit" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Context::commit_transaction" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Layer::display_if_needed" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CGLTexImageIOSurface2D" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CGLDescribeRenderer" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gliSetInteger" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gldFlushObject" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "intelSubmitCommands" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "IntelCommandBuffer::getNew" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusSubmitDataBuffers" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusKillClientExt" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_389_event_389.pysnap new file mode 100644 index 000000000000..9070a5a3e053 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_389_event_389.pysnap @@ -0,0 +1,88 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_body" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_pthread_testcancel" +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_body" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_pthread_testcancel" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_432.pysnap new file mode 100644 index 000000000000..3c0b9d4b26d7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_432.pysnap @@ -0,0 +1,256 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "RtlUserThreadStart" + frame (non app frame) + function* + "BaseThreadInitThunk" + frame (non app frame) + function* + "TppWorkerThread" + frame (non app frame) + function* + "RtlpTpWorkCallback" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "raise" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" +-------------------------------------------------------------------------- +system: + hash: "4ab7102beb2132ba98606306a88fcdb8" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlpTpWorkCallback" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "raise" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_453.pysnap new file mode 100644 index 000000000000..a12b639db0c3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_432_event_453.pysnap @@ -0,0 +1,256 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "RtlUserThreadStart" + frame (non app frame) + function* + "BaseThreadInitThunk" + frame (non app frame) + function* + "TppWorkerThread" + frame (non app frame) + function* + "RtlpTpWorkCallback" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "xtree" + function* + "std::_Tree::insert" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "xtree" + function* + "std::_Tree::_Emplace" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "raise" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" +-------------------------------------------------------------------------- +system: + hash: "f1cecca3f7a7663f9c2e639a44c20047" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlpTpWorkCallback" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "xtree" + function* + "std::_Tree::insert" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "xtree" + function* + "std::_Tree::_Emplace" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "raise" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_445_event_445.pysnap new file mode 100644 index 000000000000..5b25c2a8b411 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/group_445_event_445.pysnap @@ -0,0 +1,298 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "RtlUserThreadStart" + frame (non app frame) + function* + "BaseThreadInitThunk" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "exe_common.inl" + function* + "invoke_main" + frame (non app frame) + filename* + "winmain.cpp" + function* + "wWinMain" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "xstring" + function* + "std::basic_string::{ctor}" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "xstring" + function* + "std::basic_string::_Reallocate_for" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::_Func_class::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "UserCallWinProcCheckWow" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + filename* + "purevirt.cpp" + function* + "_purecall" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "raise" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" +-------------------------------------------------------------------------- +system: + hash: "7388d8aa6c112020d5c3e7b180fd0b88" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "winmain.cpp" + function* + "wWinMain" + frame* + filename* + "xstring" + function* + "std::basic_string::{ctor}" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (ignored due to recursion) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "xstring" + function* + "std::basic_string::_Reallocate_for" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "functional" + function* + "std::_Func_class::operator()" + frame* + function* + "stripped_application_code" + frame* + function* + "DispatchMessageWorker" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "UserCallWinProcCheckWow" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "purevirt.cpp" + function* + "_purecall" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "raise" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap new file mode 100644 index 000000000000..19e56bfb3364 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_base.pysnap @@ -0,0 +1,16 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "abba9a2abb368402ddb0087f2fd35161" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" + values: ["{{ default }}","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 000000000000..7f88d3f9e406 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,338 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "48b7c477395bac7808f08b858e0e60ce" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["{{ default }}","soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\""}} + root_component: + app* + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame (marked out of app by the client) + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame (marked out of app by the client) + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame (marked out of app by the client) + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" + values: ["{{ default }}","soft-timelimit-exceeded"] +-------------------------------------------------------------------------- +system: + hash: "5ccb31c375a89ea9080ab8c582db85bc" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["celery","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["{{ default }}","soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"{{ default }}soft-timelimit-exceeded\""}} + root_component: + system* + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" + values: ["{{ default }}","soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 000000000000..4d5ae348fcc6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,339 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + app (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* (marked in-app by the client) + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* (marked in-app by the client) + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* (marked in-app by the client) + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* (marked in-app by the client) + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* (marked in-app by the client) + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* (marked in-app by the client) + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame (marked out of app by the client) + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame (marked out of app by the client) + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame (marked out of app by the client) + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame (marked out of app by the client) + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_server_fingerprint: + hash: "24793dce104101c91709115d8d5e6b3c" + fingerprint_info: {"client_fingerprint":["{{ default }}","SoftTimeLimitExceeded","sentry.tasks.store.process_event"],"matched_rule":{"attributes":{},"fingerprint":["soft-timelimit-exceeded"],"matchers":[["type","SoftTimeLimitExceeded"]],"text":"type:\"SoftTimeLimitExceeded\" -> \"soft-timelimit-exceeded\""}} + values: ["soft-timelimit-exceeded"] +-------------------------------------------------------------------------- +system: + hash: null + contributing component: exception + hint: ignored because custom server fingerprint takes precedence + root_component: + system (ignored because custom server fingerprint takes precedence) + exception* + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + stacktrace* + frame* + module* + "sentry.tasks.base" + filename (ignored because module takes precedence) + "base.py" + function* + "_wrapped" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "process_event" + context_line* + "return _do_process_event(cache_key, start_time, event_id, process_event)" + frame* + module* + "sentry.tasks.store" + filename (ignored because module takes precedence) + "store.py" + function* + "_do_process_event" + context_line* + "new_data = process_stacktraces(data)" + frame* + module* + "sentry.stacktraces" + filename (ignored because module takes precedence) + "stacktraces.py" + function* + "process_stacktraces" + context_line* + "if processor.preprocess_step(processing_task):" + frame* + module* + "sentry.lang.native.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "preprocess_step" + context_line* + "referenced_images=referenced_images," + frame* + module* + "sentry.lang.native.symbolizer" + filename (ignored because module takes precedence) + "symbolizer.py" + function* + "__init__" + context_line* + "with_conversion_errors=True)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "get_symcaches" + context_line* + "symcaches = self._load_cachefiles_via_fs(project, cachefiles, SymCache)" + frame* + module* + "sentry.models.debugfile" + filename (ignored because module takes precedence) + "debugfile.py" + function* + "_load_cachefiles_via_fs" + context_line* + "model.cache_file.save_to(cachefile_path)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "save_to" + context_line* + "delete=False).detach_tempfile()" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_get_chunked_blob" + context_line* + "delete=delete" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "__init__" + context_line* + "self._prefetch(prefetch_to, delete)" + frame* + module* + "sentry.models.file" + filename (ignored because module takes precedence) + "file.py" + function* + "_prefetch" + context_line* + "exe.submit(fetch_file, idx.offset, idx.blob.getfile)" + frame* + module* + "concurrent.futures._base" + filename (ignored because module takes precedence) + "_base.py" + function* + "__exit__" + context_line* + "self.shutdown(wait=True)" + frame* + module* + "concurrent.futures.thread" + filename (ignored because module takes precedence) + "thread.py" + function* + "shutdown" + context_line* + "t.join(sys.maxint)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "join" + context_line* + "self.__block.wait(delay)" + frame* + module* + "threading" + filename (ignored because module takes precedence) + "threading.py" + function* + "wait" + context_line* + "_sleep(delay)" + frame* + module* + "billiard.pool" + filename (ignored because module takes precedence) + "pool.py" + function* + "soft_timeout_sighandler" + context_line* + "raise SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 000000000000..308fd55a5b47 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,16 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "0f58238774d450eca3e1e3308c07d406" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","adopt don't shop"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" + values: ["{{ default }}","adopt don't shop"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 000000000000..eef8d3bc88ae --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,16 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "d2aed060b28939907a736431aef667e2" + contributing component: exception + hint: None + fingerprint_info: {"client_fingerprint":["{{ default }}","dogs are great"]} + root_component: + app* + exception* + type* + "FailedToFetchError" + value* + "FailedToFetchError: Maisey can't see the ball anymore :-(" + values: ["{{ default }}","dogs are great"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/in_app_in_ui.pysnap new file mode 100644 index 000000000000..703ab26e34d4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/in_app_in_ui.pysnap @@ -0,0 +1,296 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "5b032559156688c9eabe4e4bd5ae6bd4" + contributing component: exception + hint: None + root_component: + app* + exception* + type (ignored because exception is synthetic) + "EXC_BREAKPOINT" + value (ignored because stacktrace takes precedence) + "autoplayOption" + stacktrace* + frame (marked out of app by the client) + function* + "start" + frame (marked in-app by the client but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "main.m" + function* + "main" + frame (marked out of app by the client) + function* + "UIApplicationMain" + frame (marked out of app by the client) + function* + "-[UIApplication _run]" + frame (marked out of app by the client) + function* + "GSEventRunModal" + frame (marked out of app by the client) + function* + "CFRunLoopRunSpecific" + frame (marked out of app by the client) + function* + "__CFRunLoopRun" + frame (marked out of app by the client) + function* + "__CFRunLoopDoObservers" + frame (marked out of app by the client) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__" + frame (marked out of app by the client) + function* + "CA::Transaction::observer_callback" + frame (marked out of app by the client) + function* + "CA::Transaction::commit" + frame (marked out of app by the client) + function* + "CA::Context::commit_transaction" + frame (marked out of app by the client) + function* + "CA::Layer::layout_and_display_if_needed" + frame (marked out of app by the client) + function* + "CA::Layer::layout_if_needed" + frame (marked out of app by the client) + function* + "-[CALayer layoutSublayers]" + frame (marked out of app by the client) + function* + "-[UIView(CALayerDelegate) layoutSublayersOfLayer:]" + frame* (marked in-app by the client) + filename* + "" + function* + "TableView.layoutSubviews" + frame (marked out of app by the client) + function* + "-[UITableView layoutSubviews]" + frame (marked out of app by the client) + function* + "-[UITableView _updateVisibleCellsNow:]" + frame (marked out of app by the client) + function* + "-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:]" + frame* (marked in-app by the client) + filename* + "" + function* + "AnyTableViewController.tableView" + frame (marked in-app by the client but ignored due to recursion) + filename* + "" + function* + "AnyTableViewController.tableView" + frame* (marked in-app by the client) + filename* + "anytableviewcontroller.swift" + function* + "AnyTableViewController.tableView" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "closure" + frame* (marked in-app by the client) + filename* + "dailydigesttableviewsection.swift" + function* + "DailyDigestTableViewSection.photoCell" + frame* (marked in-app by the client) + filename* + "" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "" + function* + "Sequence.compactMap" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + filename* + "" + function* + "closure" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* (marked in-app by the client) + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSource" + frame* (marked in-app by the client) + filename* + "" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* (marked in-app by the client) + filename* + "currentuserprofile.swift" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* (marked in-app by the client) + filename* + "currentuserprofile.swift" + function* + "value" +-------------------------------------------------------------------------- +system: + hash: "1921b991270e24c19ea1ed6863892d71" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BREAKPOINT" + value (ignored because stacktrace takes precedence) + "autoplayOption" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "main.m" + function* + "main" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoObservers" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CA::Transaction::observer_callback" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CA::Transaction::commit" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CA::Context::commit_transaction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CA::Layer::layout_and_display_if_needed" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CA::Layer::layout_if_needed" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[CALayer layoutSublayers]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UIView(CALayerDelegate) layoutSublayersOfLayer:]" + frame* + filename* + "" + function* + "TableView.layoutSubviews" + frame* + function* + "-[UITableView layoutSubviews]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UITableView _updateVisibleCellsNow:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:]" + frame* + filename* + "" + function* + "AnyTableViewController.tableView" + frame (ignored due to recursion) + filename* + "" + function* + "AnyTableViewController.tableView" + frame* + filename* + "anytableviewcontroller.swift" + function* + "AnyTableViewController.tableView" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "closure" + frame* + filename* + "dailydigesttableviewsection.swift" + function* + "DailyDigestTableViewSection.photoCell" + frame* + filename* + "" + function* + "MediaSlideshow.toSources" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* + filename* + "" + function* + "Sequence.compactMap" + frame (ignored by built-in stacktrace rule (category:internals -group)) + filename* + "" + function* + "closure" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSources" + frame* + filename* + "mediaslideshow+extensions.swift" + function* + "MediaSlideshow.toSource" + frame* + filename* + "" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* + filename* + "currentuserprofile.swift" + function* + "CurrentUserProfile.isVideoAutoplay.getter" + frame* + filename* + "currentuserprofile.swift" + function* + "value" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_chained.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_chained.pysnap new file mode 100644 index 000000000000..06001771cd9b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_chained.pysnap @@ -0,0 +1,791 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + chained_exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + exception* + type* + "BindException" + value* + "Address already in use" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame (marked out of app by the client) + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.apache.catalina.connector.Connector" + filename (ignored because module takes precedence) + "connector.java" + function* + "startInternal" + frame (marked out of app by the client) + module* + "org.apache.coyote.AbstractProtocol" + filename (ignored because module takes precedence) + "abstractprotocol.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.apache.tomcat.util.net.AbstractEndpoint" + filename (ignored because module takes precedence) + "abstractendpoint.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.apache.tomcat.util.net.NioEndpoint" + filename (ignored because module takes precedence) + "nioendpoint.java" + function* + "bind" + frame (marked out of app by the client) + module* + "sun.nio.ch.ServerSocketAdaptor" + filename (ignored because module takes precedence) + "serversocketadaptor.java" + function* + "bind" + frame (marked out of app by the client) + module* + "sun.nio.ch.ServerSocketChannelImpl" + filename (ignored because module takes precedence) + "serversocketchannelimpl.java" + function* + "bind" + frame (marked out of app by the client) + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind" + frame (marked out of app by the client) + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind" + frame (marked out of app by the client) + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind0" + exception* + type* + "LifecycleException" + value* + "service.getName(): \"Tomcat\"; Protocol handler start failed" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame (marked out of app by the client) + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.apache.catalina.connector.Connector" + filename (ignored because module takes precedence) + "connector.java" + function* + "startInternal" + exception* + type* + "LifecycleException" + value* (stripped event-specific values) + "Failed to start component [Connector[HTTP/-]]" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:framework -app)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame (marked out of app by the client) + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame (marked out of app by the client) + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame (marked out of app by the client) + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + default (ignored because system exception takes precedence) + message (ignored because system exception takes precedence) + "Failed to start connector [Connector[HTTP/-]]" +-------------------------------------------------------------------------- +system: + hash: "db7a5bf0e72c22eb770a3be8940782c6" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "BindException" + value (ignored because stacktrace takes precedence) + "Address already in use" + stacktrace* + frame (ignored by built-in stacktrace rule (module:io.sentry.* -group)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" + frame* + module* + "org.apache.catalina.connector.Connector" + filename (ignored because module takes precedence) + "connector.java" + function* + "startInternal" + frame* + module* + "org.apache.coyote.AbstractProtocol" + filename (ignored because module takes precedence) + "abstractprotocol.java" + function* + "start" + frame* + module* + "org.apache.tomcat.util.net.AbstractEndpoint" + filename (ignored because module takes precedence) + "abstractendpoint.java" + function* + "start" + frame* + module* + "org.apache.tomcat.util.net.NioEndpoint" + filename (ignored because module takes precedence) + "nioendpoint.java" + function* + "bind" + frame* + module* + "sun.nio.ch.ServerSocketAdaptor" + filename (ignored because module takes precedence) + "serversocketadaptor.java" + function* + "bind" + frame* + module* + "sun.nio.ch.ServerSocketChannelImpl" + filename (ignored because module takes precedence) + "serversocketchannelimpl.java" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind" + frame* + module* + "sun.nio.ch.Net" + filename (ignored because module takes precedence) + "net.java" + function* + "bind0" + exception* + type* + "LifecycleException" + value (ignored because stacktrace takes precedence) + "service.getName(): \"Tomcat\"; Protocol handler start failed" + stacktrace* + frame (ignored by built-in stacktrace rule (module:io.sentry.* -group)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" + frame* + module* + "org.apache.catalina.connector.Connector" + filename (ignored because module takes precedence) + "connector.java" + function* + "startInternal" + exception* + type* + "LifecycleException" + value (ignored because stacktrace takes precedence) + "Failed to start component [Connector[HTTP/-]]" + stacktrace* + frame (ignored by built-in stacktrace rule (module:io.sentry.* -group)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "main" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "run" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refreshContext" + frame* + module* + "org.springframework.boot.SpringApplication" + filename (ignored because module takes precedence) + "springapplication.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.context.support.AbstractApplicationContext" + filename (ignored because module takes precedence) + "abstractapplicationcontext.java" + function* + "refresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "finishRefresh" + frame* + module* + "org.springframework.boot.context.embedded.EmbeddedWebApplicationContext" + filename (ignored because module takes precedence) + "embeddedwebapplicationcontext.java" + function* + "startEmbeddedServletContainer" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "start" + frame* + module* + "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" + filename (ignored because module takes precedence) + "tomcatembeddedservletcontainer.java" + function* + "addPreviouslyRemovedConnectors" + frame* + module* + "org.apache.catalina.core.StandardService" + filename (ignored because module takes precedence) + "standardservice.java" + function* + "addConnector" + frame* + module* + "org.apache.catalina.util.LifecycleBase" + filename (ignored because module takes precedence) + "lifecyclebase.java" + function* + "start" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_minimal.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_minimal.pysnap new file mode 100644 index 000000000000..4dc68a90cef2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/java_minimal.pysnap @@ -0,0 +1,807 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "ArithmeticException" + value* + "/ by zero" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "java.lang.Thread" + filename (ignored because module takes precedence) + "thread.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable" + filename (ignored because module takes precedence) + "taskthread.java" + function* + "run" + frame (marked out of app by the client) + module* + "java.util.concurrent.ThreadPoolExecutor$Worker" + filename (ignored because module takes precedence) + "threadpoolexecutor.java" + function* + "run" + frame (marked out of app by the client) + module* + "java.util.concurrent.ThreadPoolExecutor" + filename (ignored because module takes precedence) + "threadpoolexecutor.java" + function* + "runWorker" + frame (marked out of app by the client) + module* + "org.apache.tomcat.util.net.SocketProcessorBase" + filename (ignored because module takes precedence) + "socketprocessorbase.java" + function* + "run" + frame (marked out of app by the client) + module* + "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor" + filename (ignored because module takes precedence) + "nioendpoint.java" + function* + "doRun" + frame (marked out of app by the client) + module* + "org.apache.coyote.AbstractProtocol$ConnectionHandler" + filename (ignored because module takes precedence) + "abstractprotocol.java" + function* + "process" + frame (marked out of app by the client) + module* + "org.apache.coyote.AbstractProcessorLight" + filename (ignored because module takes precedence) + "abstractprocessorlight.java" + function* + "process" + frame (marked out of app by the client) + module* + "org.apache.coyote.http11.Http11Processor" + filename (ignored because module takes precedence) + "http11processor.java" + function* + "service" + frame (marked out of app by the client) + module* + "org.apache.catalina.connector.CoyoteAdapter" + filename (ignored because module takes precedence) + "coyoteadapter.java" + function* + "service" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardEngineValve" + filename (ignored because module takes precedence) + "standardenginevalve.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.valves.ErrorReportValve" + filename (ignored because module takes precedence) + "errorreportvalve.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardHostValve" + filename (ignored because module takes precedence) + "standardhostvalve.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.authenticator.AuthenticatorBase" + filename (ignored because module takes precedence) + "authenticatorbase.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardContextValve" + filename (ignored because module takes precedence) + "standardcontextvalve.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.StandardWrapperValve" + filename (ignored because module takes precedence) + "standardwrappervalve.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.CharacterEncodingFilter" + filename (ignored because module takes precedence) + "characterencodingfilter.java" + function* + "doFilterInternal" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.HiddenHttpMethodFilter" + filename (ignored because module takes precedence) + "hiddenhttpmethodfilter.java" + function* + "doFilterInternal" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.HttpPutFormContentFilter" + filename (ignored because module takes precedence) + "httpputformcontentfilter.java" + function* + "doFilterInternal" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.springframework.web.filter.RequestContextFilter" + filename (ignored because module takes precedence) + "requestcontextfilter.java" + function* + "doFilterInternal" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "org.apache.tomcat.websocket.server.WsFilter" + filename (ignored because module takes precedence) + "wsfilter.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame (marked out of app by the client) + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame (marked out of app by the client) + module* + "javax.servlet.http.HttpServlet" + filename (ignored because module takes precedence) + "httpservlet.java" + function* + "service" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "service" + frame (marked out of app by the client) + module* + "javax.servlet.http.HttpServlet" + filename (ignored because module takes precedence) + "httpservlet.java" + function* + "service" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "doGet" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "processRequest" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.DispatcherServlet" + filename (ignored because module takes precedence) + "dispatcherservlet.java" + function* + "doService" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.DispatcherServlet" + filename (ignored because module takes precedence) + "dispatcherservlet.java" + function* + "doDispatch" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter" + filename (ignored because module takes precedence) + "abstracthandlermethodadapter.java" + function* + "handle" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + filename (ignored because module takes precedence) + "requestmappinghandleradapter.java" + function* + "handleInternal" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + filename (ignored because module takes precedence) + "requestmappinghandleradapter.java" + function* + "invokeHandlerMethod" + frame (marked out of app by the client) + module* + "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" + filename (ignored because module takes precedence) + "servletinvocablehandlermethod.java" + function* + "invokeAndHandle" + frame (marked out of app by the client) + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + filename (ignored because module takes precedence) + "invocablehandlermethod.java" + function* + "invokeForRequest" + frame (marked out of app by the client) + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + filename (ignored because module takes precedence) + "invocablehandlermethod.java" + function* + "doInvoke" + frame (marked out of app by the client) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "jdk.internal.reflect.DelegatingMethodAccessorImpl" + filename (ignored because module takes precedence) + "delegatingmethodaccessorimpl.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + filename (ignored because module takes precedence) + "nativemethodaccessorimpl.java" + function* + "invoke" + frame (marked out of app by the client) + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + filename (ignored because module takes precedence) + "nativemethodaccessorimpl.java" + function* + "invoke0" + frame (marked out of app by the client) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "home" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + default (ignored because system exception takes precedence) + message (ignored because system exception takes precedence) + "Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ArithmeticException: / by zero] with root cause" +-------------------------------------------------------------------------- +system: + hash: "6c27831782d10c44d7d0a01ef3f9c71e" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ArithmeticException" + value (ignored because stacktrace takes precedence) + "/ by zero" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "java.lang.Thread" + filename (ignored because module takes precedence) + "thread.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable" + filename (ignored because module takes precedence) + "taskthread.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "java.util.concurrent.ThreadPoolExecutor$Worker" + filename (ignored because module takes precedence) + "threadpoolexecutor.java" + function* + "run" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + module* + "java.util.concurrent.ThreadPoolExecutor" + filename (ignored because module takes precedence) + "threadpoolexecutor.java" + function* + "runWorker" + frame* + module* + "org.apache.tomcat.util.net.SocketProcessorBase" + filename (ignored because module takes precedence) + "socketprocessorbase.java" + function* + "run" + frame* + module* + "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor" + filename (ignored because module takes precedence) + "nioendpoint.java" + function* + "doRun" + frame* + module* + "org.apache.coyote.AbstractProtocol$ConnectionHandler" + filename (ignored because module takes precedence) + "abstractprotocol.java" + function* + "process" + frame* + module* + "org.apache.coyote.AbstractProcessorLight" + filename (ignored because module takes precedence) + "abstractprocessorlight.java" + function* + "process" + frame* + module* + "org.apache.coyote.http11.Http11Processor" + filename (ignored because module takes precedence) + "http11processor.java" + function* + "service" + frame* + module* + "org.apache.catalina.connector.CoyoteAdapter" + filename (ignored because module takes precedence) + "coyoteadapter.java" + function* + "service" + frame* + module* + "org.apache.catalina.core.StandardEngineValve" + filename (ignored because module takes precedence) + "standardenginevalve.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.valves.ErrorReportValve" + filename (ignored because module takes precedence) + "errorreportvalve.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardHostValve" + filename (ignored because module takes precedence) + "standardhostvalve.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.authenticator.AuthenticatorBase" + filename (ignored because module takes precedence) + "authenticatorbase.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardContextValve" + filename (ignored because module takes precedence) + "standardcontextvalve.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.StandardWrapperValve" + filename (ignored because module takes precedence) + "standardwrappervalve.java" + function* + "invoke" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.CharacterEncodingFilter" + filename (ignored because module takes precedence) + "characterencodingfilter.java" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.HiddenHttpMethodFilter" + filename (ignored because module takes precedence) + "hiddenhttpmethodfilter.java" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.HttpPutFormContentFilter" + filename (ignored because module takes precedence) + "httpputformcontentfilter.java" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "org.springframework.web.filter.OncePerRequestFilter" + filename (ignored because module takes precedence) + "onceperrequestfilter.java" + function* + "doFilter" + frame* + module* + "org.springframework.web.filter.RequestContextFilter" + filename (ignored because module takes precedence) + "requestcontextfilter.java" + function* + "doFilterInternal" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "org.apache.tomcat.websocket.server.WsFilter" + filename (ignored because module takes precedence) + "wsfilter.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "doFilter" + frame* + module* + "org.apache.catalina.core.ApplicationFilterChain" + filename (ignored because module takes precedence) + "applicationfilterchain.java" + function* + "internalDoFilter" + frame* + module* + "javax.servlet.http.HttpServlet" + filename (ignored because module takes precedence) + "httpservlet.java" + function* + "service" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "service" + frame* + module* + "javax.servlet.http.HttpServlet" + filename (ignored because module takes precedence) + "httpservlet.java" + function* + "service" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "doGet" + frame* + module* + "org.springframework.web.servlet.FrameworkServlet" + filename (ignored because module takes precedence) + "frameworkservlet.java" + function* + "processRequest" + frame* + module* + "org.springframework.web.servlet.DispatcherServlet" + filename (ignored because module takes precedence) + "dispatcherservlet.java" + function* + "doService" + frame* + module* + "org.springframework.web.servlet.DispatcherServlet" + filename (ignored because module takes precedence) + "dispatcherservlet.java" + function* + "doDispatch" + frame* + module* + "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter" + filename (ignored because module takes precedence) + "abstracthandlermethodadapter.java" + function* + "handle" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + filename (ignored because module takes precedence) + "requestmappinghandleradapter.java" + function* + "handleInternal" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" + filename (ignored because module takes precedence) + "requestmappinghandleradapter.java" + function* + "invokeHandlerMethod" + frame* + module* + "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod" + filename (ignored because module takes precedence) + "servletinvocablehandlermethod.java" + function* + "invokeAndHandle" + frame* + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + filename (ignored because module takes precedence) + "invocablehandlermethod.java" + function* + "invokeForRequest" + frame* + module* + "org.springframework.web.method.support.InvocableHandlerMethod" + filename (ignored because module takes precedence) + "invocablehandlermethod.java" + function* + "doInvoke" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame* + module* + "jdk.internal.reflect.DelegatingMethodAccessorImpl" + filename (ignored because module takes precedence) + "delegatingmethodaccessorimpl.java" + function* + "invoke" + frame* + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + filename (ignored because module takes precedence) + "nativemethodaccessorimpl.java" + function* + "invoke" + frame* + module* + "jdk.internal.reflect.NativeMethodAccessorImpl" + filename (ignored because module takes precedence) + "nativemethodaccessorimpl.java" + function* + "invoke0" + frame (ignored by built-in stacktrace rule (module:io.sentry.* -group)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "home" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 000000000000..0bf5a327faf3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "10dfd81e2df31e96fae451b9e205ad81" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* (stripped event-specific values) + "Loading chunk failed.\n(timeout: " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 000000000000..a37e332b7acf --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "b8e2a347e75266ca7bb565e2b3c0722e" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* (stripped event-specific values) + ": logged in (error ) time spent --- correlation id , checksum (md5 ); payload timestamp (submitted from via via ) at offset " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap new file mode 100644 index 000000000000..9398c7ea8142 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_exception_no_in_app.pysnap @@ -0,0 +1,148 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "ReferenceError" + value* + "varant is not defined" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "dispatchInteractiveEvent" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "interactiveUpdates" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "interactiveUpdates$1" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "performSyncWork" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "performWork" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "performWorkOnRoot" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "renderRoot" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "replayUnitOfWork" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* + "invokeGuardedCallback" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "invokeGuardedCallbackDev" + frame (marked out of app by the client) + filename* + "index.js" + function* (trimmed javascript function) + "sentryWrapped" + frame (marked out of app by the client) + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "callCallback" +-------------------------------------------------------------------------- +system: + hash: "e734632ed44ebbaaeee1d0f589397a1a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "ReferenceError" + value (ignored because stacktrace takes precedence) + "varant is not defined" + stacktrace* + frame* + filename* + "react-dom.development.js" + function* + "dispatchInteractiveEvent" + frame* + filename* + "react-dom.development.js" + function* + "interactiveUpdates" + frame* + filename* + "react-dom.development.js" + function* + "interactiveUpdates$1" + frame* + filename* + "react-dom.development.js" + function* + "performSyncWork" + frame* + filename* + "react-dom.development.js" + function* + "performWork" + frame* + filename* + "react-dom.development.js" + function* + "performWorkOnRoot" + frame* + filename* + "react-dom.development.js" + function* + "renderRoot" + frame* + filename* + "react-dom.development.js" + function* + "replayUnitOfWork" + frame* + filename* + "react-dom.development.js" + function* + "invokeGuardedCallback" + frame* + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "invokeGuardedCallbackDev" + frame* + filename* + "index.js" + function* (trimmed javascript function) + "sentryWrapped" + frame* + filename* + "react-dom.development.js" + function* (trimmed javascript function) + "callCallback" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message.pysnap new file mode 100644 index 000000000000..8baf4f8b80c1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "4119639092e62c55ea8be348e4d9260d" + contributing component: message + hint: None + root_component: + default* + message* + "event" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap new file mode 100644 index 000000000000..8a3342dda256 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_message_parameterization.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "f9e47f16e3b9770b440157179c47bf7a" + contributing component: message + hint: None + root_component: + default* + message* (stripped event-specific values) + "testing testing , , " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_polyfills.pysnap new file mode 100644 index 000000000000..3448b613826c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_polyfills.pysnap @@ -0,0 +1,58 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (module:@babel/** -app)) + module* + "@babel/runtime/helpers/asyncToGenerator" + function (ignored unknown function name) + "" + frame (marked out of app by built-in stacktrace rule (module:core-js/** -app)) + module* + "core-js/internals/task" + function* + "listener" + frame (marked out of app by built-in stacktrace rule (module:tslib/** -app)) + module* + "tslib/tslib.es6" + function* (trimmed javascript function) + "sent" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app exception takes precedence + root_component: + system (ignored because app exception takes precedence) + exception (ignored because hash matches app variant) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (module:@babel/** -group)) + module* + "@babel/runtime/helpers/asyncToGenerator" + function (ignored unknown function name) + "" + frame (ignored by built-in stacktrace rule (module:core-js/** -group)) + module* + "core-js/internals/task" + function* + "listener" + frame (ignored by built-in stacktrace rule (module:tslib/** -group)) + module* + "tslib/tslib.es6" + function* (trimmed javascript function) + "sent" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap new file mode 100644 index 000000000000..d51859c86c13 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_non_url_frame.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename* + "great.js" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame (ignored single non-URL JavaScript frame) + filename* + "great.js" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap new file mode 100644 index 000000000000..097b17f52370 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_single_url_frame.pysnap @@ -0,0 +1,27 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + filename (ignored because frame points to a URL) + "great.js" +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: None + root_component: + system + stacktrace (ignored because it contains no contributing frames) + frame + filename (ignored because frame points to a URL) + "great.js" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_unpkg.pysnap new file mode 100644 index 000000000000..569edee3ac49 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_unpkg.pysnap @@ -0,0 +1,72 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (path:**https://unpkg.com/** -app)) + module* + "react-dom@16.13.1/umd/react-dom.production" + filename (ignored because frame points to a URL) + "react-dom.production.min.js" + function* + "unpkg" + frame (marked out of app by built-in stacktrace rule (path:**https://cdnjs.cloudflare.com/** -app)) + filename (ignored because frame points to a URL) + "react-dom.production.min.js" + function* + "cdnjs" + frame (marked out of app by built-in stacktrace rule (path:**https://cdn.jsdelivr.net/** -app)) + filename (ignored because frame points to a URL) + "jquery.min.js" + function* + "jsdelivr" + frame (marked out of app by built-in stacktrace rule (path:**https://esm.run/** -app)) + filename (ignored because frame points to a URL) + "d3@7.6.1" + function* (trimmed javascript function) + "run" +-------------------------------------------------------------------------- +system: + hash: "96955d6eb6b1c842b7c64ac8eb3ffe8d" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + module* + "react-dom@16.13.1/umd/react-dom.production" + filename (ignored because frame points to a URL) + "react-dom.production.min.js" + function* + "unpkg" + frame* + filename (ignored because frame points to a URL) + "react-dom.production.min.js" + function* + "cdnjs" + frame* + filename (ignored because frame points to a URL) + "jquery.min.js" + function* + "jsdelivr" + frame* + filename (ignored because frame points to a URL) + "d3@7.6.1" + function* (trimmed javascript function) + "run" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap new file mode 100644 index 000000000000..afdea50f76fa --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_url_path_as_module.pysnap @@ -0,0 +1,38 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* + "dogs.are.great" + filename (ignored because frame points to a URL) + "great.js" + frame (non app frame) + module (ignored bad javascript module) + "adopt/dont/shop.js" + filename (ignored because frame points to a URL) + "shop.js" +-------------------------------------------------------------------------- +system: + hash: "1001e7b7dd0155a6d4021cd6d6b9f50d" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "dogs.are.great" + filename (ignored because frame points to a URL) + "great.js" + frame + module (ignored bad javascript module) + "adopt/dont/shop.js" + filename (ignored because frame points to a URL) + "shop.js" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap new file mode 100644 index 000000000000..0307d887f8aa --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,120 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "test.html" + frame (marked out of app by the client) + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename* + "test.html" + function* + "eval" + frame (marked out of app by the client) + filename* + "test.html" + function* + "test" + frame (marked out of app by the client) + filename (ignored because filename is anonymous) + "" + function* (trimmed javascript function) + "map" + frame (marked out of app by the client) + filename* + "test.html" + frame (marked out of app by the client) + filename* + "test.html" + function* (trimmed javascript function) + "callback" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + filename* + "test.html" + function* (trimmed javascript function) + "aha" +-------------------------------------------------------------------------- +system: + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename* + "test.html" + function* + "eval" + frame* + filename* + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + filename (ignored because filename is anonymous) + "" + function* (trimmed javascript function) + "map" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap new file mode 100644 index 000000000000..b8316b8b1238 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_edge.pysnap @@ -0,0 +1,128 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame (marked out of app by the client) + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename* + "eval code" + function* + "eval code" + frame (marked out of app by the client) + filename* + "test.html" + function* + "test" + frame (marked out of app by the client) + filename* + "native code" + function* (trimmed javascript function) + "map" + frame (marked out of app by the client) + filename* + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callback" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + filename* + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame* + filename* + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename* + "eval code" + function* + "eval code" + frame* + filename* + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + filename* + "native code" + function* (trimmed javascript function) + "map" + frame* + filename* + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap new file mode 100644 index 000000000000..12e9e6858028 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,114 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "test.html" + frame (marked out of app by the client) + filename* + "test.html" + function* + "testMethod" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename* + "test.html" + function* + "eval" + frame (marked out of app by the client) + filename* + "test.html" + function* + "test" + frame (marked out of app by the client) + filename* + "test.html" + function (ignored unknown function name) + "test/<" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callback" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename* + "test.html" + function* + "eval" + frame* + filename* + "test.html" + function* + "test" + frame* + filename* + "test.html" + function (ignored unknown function name) + "test/<" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 000000000000..f3282a1bd9f5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,156 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "testMethod" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "eval" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (marked out of app by the client) + filename (ignored because filename is anonymous) + "" + function* (trimmed javascript function) + "map" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "callback" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "aha" +-------------------------------------------------------------------------- +system: + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "eval" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + filename (ignored because filename is anonymous) + "" + function* (trimmed javascript function) + "map" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "callback" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 000000000000..721ecc01ba68 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,164 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "testMethod" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename* + "eval code" + function* + "eval code" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (marked out of app by the client) + module* + "test" + filename (ignored because module takes precedence) + "native code" + function* (trimmed javascript function) + "map" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* (trimmed javascript function) + "testMethod" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename* + "eval code" + function* + "eval code" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + module* + "test" + filename (ignored because module takes precedence) + "native code" + function* (trimmed javascript function) + "map" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "Anonymous function" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 000000000000..99973778a61c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,150 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "testMethod" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "eval" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "test/<" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "testMethod" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "eval" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function (ignored unknown function name) + "test/<" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 000000000000..90a85d027b4f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,162 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "testMethod" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "eval" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "map" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "aha" + frame (marked out of app by the client) + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "c21dd7692399d460904836c279bbeb36" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "testMethod" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "eval" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "map" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callback" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "callAnotherThing" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "aha" + frame* + module* + "test" + filename (ignored because frame points to a URL) + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap new file mode 100644 index 000000000000..272c150afb85 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_safari.pysnap @@ -0,0 +1,130 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "test.html" + frame (marked out of app by the client) + filename* + "test.html" + function* + "testMethod" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "eval" + frame (marked out of app by the client) + filename* + "test.html" + function* + "test" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "map" + frame (marked out of app by the client) + filename* + "test.html" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callback" + frame (marked out of app by the client) + filename* + "test.html" + function* + "callAnotherThing" + frame (marked out of app by the client) + filename (ignored because filename suggests native code) + "[native code]" + function* + "aha" + frame (marked out of app by the client) + filename* + "test.html" + function* + "aha" +-------------------------------------------------------------------------- +system: + hash: "811a408067f03b8eff2437a8e7515966" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" + stacktrace* + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "testMethod" + frame* + filename* + "test.html" + function* + "aha" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "eval" + frame* + filename* + "test.html" + function* + "test" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "map" + frame* + filename* + "test.html" + frame* + filename* + "test.html" + function* + "callback" + frame* + filename* + "test.html" + function* + "callAnotherThing" + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "aha" + frame* + filename* + "test.html" + function* + "aha" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 000000000000..9d136ab047b5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,352 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "b5165008246a0897e1e7d18eb1df4d33" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " + stacktrace* + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/_microtask" + filename (ignored because module takes precedence) + "_microtask.js" + function (ignored because sourcemap used and context line available) + "M" + context_line* + "fn();" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + filename (ignored because module takes precedence) + "es6.promise.js" + function (ignored because sourcemap used and context line available) + "fn" + context_line* + "while (chain.length > i) run(chain[i++]); // variable length - can't use forEach" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + filename (ignored because module takes precedence) + "es6.promise.js" + function (ignored because sourcemap used and context line available) + "run" + context_line* + "result = handler(value); // may throw" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "_next" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "asyncGeneratorStep" + context_line* + "var info = gen[key](arg);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "key" + context_line* + "return this._invoke(method, arg);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "this" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "tryCatch" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* (marked in-app by the client) + module* + "app/components/lazyLoad" + filename (ignored because module takes precedence) + "lazyload.jsx" + function (ignored because sourcemap used and context line available) + "fn" + context_line* + "this.setState({" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + filename (ignored because module takes precedence) + "react.production.min.js" + function* + "this" + context_line (ignored because line is too long) + "{snip} !==typeof a&&\"function\"!==typeof a&&null!=a?B(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=functi {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "this" + context_line (ignored because line is too long) + "{snip} );e.payload=b;void 0!==c&&null!==c&&(e.callback=c);ff(a,e);If(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gf();d {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "If" + context_line (ignored because line is too long) + "{snip} );else if(c=b.expirationTime,0===c||aah&&($g=0,t(\"185\"))}} {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Yg" + context_line (ignored because line is too long) + "{snip} ),qh(),oh(),lh=kh;else for(;null!==Y&&0!==Z&&(0===a||a>=Z);)Xg(Y,Z,!0),qh();null!==hh&&(ch=0,dh=null);0!==Z&&Zg(Y,Z);hh=null;eh=!1;$g=0;mh=n {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Xg" + context_line (ignored because line is too long) + "{snip} t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finishedWork,null!==d&&rh( {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "rh" + context_line (ignored because line is too long) + "{snip} nate;q=Q;p=y;switch(q.tag){case 2:case 3:var X=q.stateNode;if(q.effectTag&4)if(null===oc)X.props=q.memoizedProps,X.state=q.memoizedState,X.c {snip}" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "X" + context_line* + "this.fetchData();" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "this" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* (marked in-app by the client) + module* + "app/api" + filename (ignored because module takes precedence) + "api.jsx" + function (ignored because sourcemap used and context line available) + "fetchGroupEventAndMarkSeen" + context_line* + "const preservedError = new Error();" +-------------------------------------------------------------------------- +system: + hash: "f9e1efa045242909883a37dc74e4fc97" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " + stacktrace* + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/_microtask" + filename (ignored because module takes precedence) + "_microtask.js" + function (ignored because sourcemap used and context line available) + "M" + context_line* + "fn();" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + filename (ignored because module takes precedence) + "es6.promise.js" + function (ignored because sourcemap used and context line available) + "fn" + context_line* + "while (chain.length > i) run(chain[i++]); // variable length - can't use forEach" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/core-js/modules/es6.promise" + filename (ignored because module takes precedence) + "es6.promise.js" + function (ignored because sourcemap used and context line available) + "run" + context_line* + "result = handler(value); // may throw" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "_next" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "asyncGeneratorStep" + context_line* + "var info = gen[key](arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "key" + context_line* + "return this._invoke(method, arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "this" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "tryCatch" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* + module* + "app/components/lazyLoad" + filename (ignored because module takes precedence) + "lazyload.jsx" + function (ignored because sourcemap used and context line available) + "fn" + context_line* + "this.setState({" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + filename (ignored because module takes precedence) + "react.production.min.js" + function* + "this" + context_line (ignored because line is too long) + "{snip} !==typeof a&&\"function\"!==typeof a&&null!=a?B(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=functi {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "this" + context_line (ignored because line is too long) + "{snip} );e.payload=b;void 0!==c&&null!==c&&(e.callback=c);ff(a,e);If(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gf();d {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "If" + context_line (ignored because line is too long) + "{snip} );else if(c=b.expirationTime,0===c||aah&&($g=0,t(\"185\"))}} {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Yg" + context_line (ignored because line is too long) + "{snip} ),qh(),oh(),lh=kh;else for(;null!==Y&&0!==Z&&(0===a||a>=Z);)Xg(Y,Z,!0),qh();null!==hh&&(ch=0,dh=null);0!==Z&&Zg(Y,Z);hh=null;eh=!1;$g=0;mh=n {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Xg" + context_line (ignored because line is too long) + "{snip} t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finishedWork,null!==d&&rh( {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "rh" + context_line (ignored because line is too long) + "{snip} nate;q=Q;p=y;switch(q.tag){case 2:case 3:var X=q.stateNode;if(q.effectTag&4)if(null===oc)X.props=q.memoizedProps,X.state=q.memoizedState,X.c {snip}" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "X" + context_line* + "this.fetchData();" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "this" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* + module* + "app/api" + filename (ignored because module takes precedence) + "api.jsx" + function (ignored because sourcemap used and context line available) + "fetchGroupEventAndMarkSeen" + context_line* + "const preservedError = new Error();" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 000000000000..da9b1d277714 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,290 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "b5165008246a0897e1e7d18eb1df4d33" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " + stacktrace* + frame (marked in-app by the client but ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "promiseReactionJob" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "_next" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "asyncGeneratorStep" + context_line* + "var info = gen[key](arg);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "key" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "tryCatch" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* (marked in-app by the client) + module* + "app/components/lazyLoad" + filename (ignored because module takes precedence) + "lazyload.jsx" + function (ignored because sourcemap used and context line available) + "call" + context_line* + "this.setState({" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + filename (ignored because module takes precedence) + "react.production.min.js" + function* + "setState" + context_line (ignored because line is too long) + "{snip} ructor=G;m(H,E.prototype);H.isPureReactComponent=!0;var I={current:null,currentDispatcher:null},J=Object.prototype.hasOwnProperty,K={key:!0, {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "enqueueSetState" + context_line (ignored because line is too long) + "{snip} &(e.callback=c);ff(a,e);If(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gf();c=Hf(c,a);var d=df(c);d.tag=2;void 0!==" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "tag" + context_line (ignored because line is too long) + "var U=null,T=null,ch=0,dh=void 0,V=!1,Y=null,Z=0,Vg=0,eh=!1,fh=!1,gh=null,hh=null,W=!1,Wg=!1,Ug=!1,ih=null,jh=ba.unstable_now(),kh=(jh/10|0) {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Yg" + context_line (ignored because line is too long) + "function Xg(a,b,c){V?t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finis {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Xg" + context_line (ignored because line is too long) + "function rh(a,b,c){var d=a.firstBatch;if(null!==d&&d._expirationTime<=c&&(null===ih?ih=[d]:ih.push(d),d._defer)){a.finishedWork=b;a.expirati {snip}" + frame (marked out of app by the client) + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "ih" + context_line (ignored because line is too long) + "{snip} .__reactInternalSnapshotBeforeUpdate)}var kg=q.updateQueue;null!==kg&&(X.props=q.memoizedProps,X.state=q.memoizedState,lf(q,kg,X,p));break;c {snip}" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "q" + context_line* + "this.fetchData();" + frame* (marked in-app by the client) + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "fetchData" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* (marked in-app by the client) + module* + "app/api" + filename (ignored because module takes precedence) + "api.jsx" + function (ignored because sourcemap used and context line available) + "fetchGroupEventAndMarkSeen" + context_line* + "const preservedError = new Error();" +-------------------------------------------------------------------------- +system: + hash: "ff35b5385c8228096073758c6f50075b" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " + stacktrace* + frame (ignored low quality javascript frame) + filename (ignored because filename suggests native code) + "[native code]" + function* + "promiseReactionJob" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "_next" + context_line* + "asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator" + filename (ignored because module takes precedence) + "asynctogenerator.js" + function (ignored because sourcemap used and context line available) + "asyncGeneratorStep" + context_line* + "var info = gen[key](arg);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "key" + context_line* + "var record = tryCatch(innerFn, self, context);" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/regenerator-runtime/runtime" + filename (ignored because module takes precedence) + "runtime.js" + function (ignored because sourcemap used and context line available) + "tryCatch" + context_line* + "return { type: \"normal\", arg: fn.call(obj, arg) };" + frame* + module* + "app/components/lazyLoad" + filename (ignored because module takes precedence) + "lazyload.jsx" + function (ignored because sourcemap used and context line available) + "call" + context_line* + "this.setState({" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react/cjs/react.production" + filename (ignored because module takes precedence) + "react.production.min.js" + function* + "setState" + context_line (ignored because line is too long) + "{snip} ructor=G;m(H,E.prototype);H.isPureReactComponent=!0;var I={current:null,currentDispatcher:null},J=Object.prototype.hasOwnProperty,K={key:!0, {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "enqueueSetState" + context_line (ignored because line is too long) + "{snip} &(e.callback=c);ff(a,e);If(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gf();c=Hf(c,a);var d=df(c);d.tag=2;void 0!==" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "tag" + context_line (ignored because line is too long) + "var U=null,T=null,ch=0,dh=void 0,V=!1,Y=null,Z=0,Vg=0,eh=!1,fh=!1,gh=null,hh=null,W=!1,Wg=!1,Ug=!1,ih=null,jh=ba.unstable_now(),kh=(jh/10|0) {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Yg" + context_line (ignored because line is too long) + "function Xg(a,b,c){V?t(\"245\"):void 0;V=!0;if(null===hh||c){var d=a.finishedWork;null!==d?rh(a,d,b):(a.finishedWork=null,Sg(a,!1,c),d=a.finis {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "Xg" + context_line (ignored because line is too long) + "function rh(a,b,c){var d=a.firstBatch;if(null!==d&&d._expirationTime<=c&&(null===ih?ih=[d]:ih.push(d),d._defer)){a.finishedWork=b;a.expirati {snip}" + frame* + module* + "usr/src/getsentry/src/sentry/node_modules/react-dom/cjs/react-dom.production" + filename (ignored because module takes precedence) + "react-dom.production.min.js" + function* + "ih" + context_line (ignored because line is too long) + "{snip} .__reactInternalSnapshotBeforeUpdate)}var kg=q.updateQueue;null!==kg&&(X.props=q.memoizedProps,X.state=q.memoizedState,lf(q,kg,X,p));break;c {snip}" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "q" + context_line* + "this.fetchData();" + frame* + module* + "app/views/groupDetails/shared/groupEventDetails" + filename (ignored because module takes precedence) + "groupeventdetails.jsx" + function (ignored because sourcemap used and context line available) + "fetchData" + context_line* + "fetchGroupEventAndMarkSeen(api, orgSlug, projSlug, groupId, eventId, envNames)" + frame* + module* + "app/api" + filename (ignored because module takes precedence) + "api.jsx" + function (ignored because sourcemap used and context line available) + "fetchGroupEventAndMarkSeen" + context_line* + "const preservedError = new Error();" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel.pysnap new file mode 100644 index 000000000000..ddb9daa2f105 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel.pysnap @@ -0,0 +1,724 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "04604148d9d04bfb7b3b3c19810a995c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" + stacktrace* + frame* (marked in-app by the client) + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* (marked in-app by the client) + filename* + "index.php" + function* + "require_once" + context_line* + "$request = Illuminate\\Http\\Request::capture()" + frame (marked out of app by the client) + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::handle" + context_line* + "$response = $this->sendRequestThroughRouter($request);" + frame (marked out of app by the client) + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter" + context_line* + "->then($this->dispatchToRouter());" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "checkformaintenancemode.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "validatepostsize.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "trustproxies.php" + function* + "Fideloper\\Proxy\\TrustProxies::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame (marked out of app by the client) + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}" + context_line* + "return $this->router->dispatch($request);" + frame (marked out of app by the client) + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatch" + context_line* + "return $this->dispatchToRoute($request);" + frame (marked out of app by the client) + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatchToRoute" + context_line* + "return $this->runRoute($request, $this->findRoute($request));" + frame (marked out of app by the client) + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRoute" + context_line* + "$this->runRouteWithinStack($route, $request)" + frame (marked out of app by the client) + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRouteWithinStack" + context_line* + "});" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "encryptcookies.php" + function* + "Illuminate\\Cookie\\Middleware\\EncryptCookies::handle" + context_line* + "return $this->encrypt($next($this->decrypt($request)));" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "addqueuedcookiestoresponse.php" + function* + "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::handle" + context_line* + "$response = $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "startsession.php" + function* + "Illuminate\\Session\\Middleware\\StartSession::handle" + context_line* + "$response = $next($request), $session" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "shareerrorsfromsession.php" + function* + "Illuminate\\View\\Middleware\\ShareErrorsFromSession::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "verifycsrftoken.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken::handle" + context_line* + "return tap($next($request), function ($response) use ($request) {" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame (marked out of app by the client) + filename* + "substitutebindings.php" + function* + "Illuminate\\Routing\\Middleware\\SubstituteBindings::handle" + context_line* + "return $next($request);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame (marked out of app by the client) + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}" + context_line* + "$request, $route->run()" + frame (marked out of app by the client) + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::run" + context_line* + "return $this->runCallable();" + frame (marked out of app by the client) + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::runCallable" + context_line* + "$this->parametersWithoutNulls(), new ReflectionFunction($this->action['uses'])" + frame* (marked in-app by the client) + filename* + "web.php" + function* + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + context_line* + "throw new Exception('LARAVEL TEST');" +-------------------------------------------------------------------------- +system: + hash: "f3b018db683f7190f410fec0fbc1a9b3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" + stacktrace* + frame* + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* + filename* + "index.php" + function* + "require_once" + context_line* + "$request = Illuminate\\Http\\Request::capture()" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::handle" + context_line* + "$response = $this->sendRequestThroughRouter($request);" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::sendRequestThroughRouter" + context_line* + "->then($this->dispatchToRouter());" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "checkformaintenancemode.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "validatepostsize.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "transformsrequest.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "trustproxies.php" + function* + "Fideloper\\Proxy\\TrustProxies::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame* + filename* + "kernel.php" + function* + "Illuminate\\Foundation\\Http\\Kernel::Illuminate\\Foundation\\Http\\{closure}" + context_line* + "return $this->router->dispatch($request);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatch" + context_line* + "return $this->dispatchToRoute($request);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::dispatchToRoute" + context_line* + "return $this->runRoute($request, $this->findRoute($request));" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRoute" + context_line* + "$this->runRouteWithinStack($route, $request)" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::runRouteWithinStack" + context_line* + "});" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::then" + context_line* + "return $pipeline($this->passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "encryptcookies.php" + function* + "Illuminate\\Cookie\\Middleware\\EncryptCookies::handle" + context_line* + "return $this->encrypt($next($this->decrypt($request)));" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "addqueuedcookiestoresponse.php" + function* + "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::handle" + context_line* + "$response = $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "startsession.php" + function* + "Illuminate\\Session\\Middleware\\StartSession::handle" + context_line* + "$response = $next($request), $session" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "shareerrorsfromsession.php" + function* + "Illuminate\\View\\Middleware\\ShareErrorsFromSession::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "verifycsrftoken.php" + function* + "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken::handle" + context_line* + "return tap($next($request), function ($response) use ($request) {" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" + frame* + filename* + "substitutebindings.php" + function* + "Illuminate\\Routing\\Middleware\\SubstituteBindings::handle" + context_line* + "return $next($request);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Routing\\Pipeline::Illuminate\\Routing\\{closure}" + context_line* + "return $destination($passable);" + frame* + filename* + "router.php" + function* + "Illuminate\\Routing\\Router::Illuminate\\Routing\\{closure}" + context_line* + "$request, $route->run()" + frame* + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::run" + context_line* + "return $this->runCallable();" + frame* + filename* + "route.php" + function* + "Illuminate\\Routing\\Route::runCallable" + context_line* + "$this->parametersWithoutNulls(), new ReflectionFunction($this->action['uses'])" + frame* + filename* + "web.php" + function* + "Illuminate\\Routing\\RouteFileRegistrar::{closure}" + context_line* + "throw new Exception('LARAVEL TEST');" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel_anonymous.pysnap new file mode 100644 index 000000000000..7b42a111a7fb --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/laravel_anonymous.pysnap @@ -0,0 +1,66 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "bf617e996d4427cda2f75c965c4266e2" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" + stacktrace* + frame* (marked in-app by the client) + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* (anonymous class method) + "run" + context_line* + "return $callable($passable);" + frame (marked out of app by the client) + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" +-------------------------------------------------------------------------- +system: + hash: "dc13fee96d9e544e8aee8f1b4e6cbf22" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" + stacktrace* + frame* + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + frame* + filename* + "pipeline.php" + function* (anonymous class method) + "run" + context_line* + "return $callable($passable);" + frame* + filename* + "pipeline.php" + function* + "Illuminate\\Pipeline\\Pipeline::Illuminate\\Pipeline\\{closure}" + context_line* + "? $pipe->{$this->method}(...$parameters)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap new file mode 100644 index 000000000000..67fb36a908bc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_prefers_message.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "8ec8bbc71eb6e2af7fbe5076a8534f96" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there %s!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap new file mode 100644 index 000000000000..af202eb5865e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/logentry_uses_formatted.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "329b29efcf1f77067a063e34f56e7791" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there world!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_amd_driver.pysnap new file mode 100644 index 000000000000..bd17c3715bfc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_amd_driver.pysnap @@ -0,0 +1,314 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CFRunLoopRunSpecific" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopRun" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopDoSources0" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRunLoopDoSource0" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "glTexSubImage2D" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "glTexSubImage2D_Exec" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gleTextureImagePut" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "11e3dca34353528edf7608d914e134f9" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame* + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame* + function* + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame* + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame* + function* + "glTexSubImage2D" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "glTexSubImage2D_Exec" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gleTextureImagePut" + frame + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gpusSubmitDataBuffers" + frame + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_intel_driver.pysnap new file mode 100644 index 000000000000..b148a6fdeddd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/macos_intel_driver.pysnap @@ -0,0 +1,370 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "start" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "-[NSApplication run]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_DPSNextEvent" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "ReceiveNextEventCommon" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "RunCurrentEventLoopInMode" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThreadPerformPerform" + frame (non app frame) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "-[NSView displayIfNeeded]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "CGLTexImageIOSurface2D" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CGLDescribeRenderer" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gliSetInteger" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldFlushObject" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "intelSubmitCommands" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusKillClientExt" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "_sigtramp" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "NSRunAlertPanel" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "_NSTryRunModal" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Transaction::commit" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Context::commit_transaction" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CA::Layer::display_if_needed" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "code" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "CGLTexImageIOSurface2D" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "CGLDescribeRenderer" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gliSetInteger" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "gldFlushObject" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "intelSubmitCommands" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "IntelCommandBuffer::getNew" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "gpusSubmitDataBuffers" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusKillClientExt" + frame (marked out of app by built-in stacktrace rule (category:telemetry -app)) + function* + "gpusGenerateCrashLog" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "abort" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "22760595718fcd37489c365e30a5e166" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored due to recursion) + function* + "start" + frame* + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame* + function* + "-[NSApplication run]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_DPSNextEvent" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "ReceiveNextEventCommon" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "RunCurrentEventLoopInMode" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThreadPerformPerform" + frame* + function* + "code" + frame* + function* + "-[NSView displayIfNeeded]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame* + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame* + function* + "CGLTexImageIOSurface2D" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CGLDescribeRenderer" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gliSetInteger" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "gldFlushObject" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "intelSubmitCommands" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "IntelCommandBuffer::getNew" + frame* + function* + "gpusSubmitDataBuffers" + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusKillClientExt" + frame (ignored by built-in stacktrace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "_sigtramp" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "NSRunAlertPanel" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "_NSTryRunModal" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Transaction::commit" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Context::commit_transaction" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CA::Layer::display_if_needed" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CGLTexImageIOSurface2D" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "CGLDescribeRenderer" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gliSetInteger" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gldFlushObject" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "intelSubmitCommands" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "IntelCommandBuffer::getNew" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusSubmitDataBuffers" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusKillClientExt" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/malloc_sentinel.pysnap new file mode 100644 index 000000000000..b1efbdf4790c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/malloc_sentinel.pysnap @@ -0,0 +1,196 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "SIGABRT" + value* + "" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "_pthread_start" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "stripped_application_code" + frame (marked out of app by the client) + function* + "std::__1::basic_string::~basic_string" + frame (marked out of app by the client) + function* + "free" + frame (marked out of app by the client) + function* + "malloc_report" + frame (marked out of app by the client) + function* + "malloc_vreport" + frame (marked out of app by the client) + function* + "abort" + frame (marked out of app by the client) + function* + "pthread_kill" + frame (marked out of app by the client) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "44fcfaf834a1238bfaa22fcfabeea65f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "SIGABRT" + value (ignored because stacktrace takes precedence) + "" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame* + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (ignored due to recursion) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (ignored due to recursion) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (ignored due to recursion) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (ignored due to recursion) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame (ignored due to recursion) + filename* + "stripped_application_code" + function* + "stripped_application_code" + frame* + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::__1::basic_string::~basic_string" + frame* + function* + "free" + frame* + function* + "malloc_report" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "malloc_vreport" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "abort" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "pthread_kill" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_prefers_message.pysnap new file mode 100644 index 000000000000..67fb36a908bc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_prefers_message.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "8ec8bbc71eb6e2af7fbe5076a8534f96" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there %s!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_uses_formatted.pysnap new file mode 100644 index 000000000000..19816133a2dc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_uses_formatted.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "d3f5e52d24e9c1eae5abe6c866cced63" + contributing component: message + hint: None + root_component: + default* + message* + "Hello there Peter!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap new file mode 100644 index 000000000000..2ba4b7a1bdba --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/message_with_key_pair_values.pysnap @@ -0,0 +1,11 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "96165d7350648408b585a16cdec87b5c" + contributing component: message + hint: None + root_component: + default* + message* (stripped event-specific values) + "Error key1= key2= key3= key4= key5= other_date=datetime.datetime(, , , , , tzinfo=d..." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/minified_javascript.pysnap new file mode 100644 index 000000000000..f68234f7c01c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/minified_javascript.pysnap @@ -0,0 +1,420 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "NS_ERROR_NOT_INITIALIZED" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "M" + context_line (ignored because line is too long) + "{snip} o,r;for(b&&(o=i.domain)&&o.exit();t;){r=t.fn,t=t.next;try{r()}catch(o){throw t?n():e=void 0,o}}e=void 0,o&&o.enter()};if(b)n=function(){i.n {snip}" + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function (ignored unknown function name) + "S/<" + context_line (ignored because line is too long) + "{snip} ,M):b(n)):M(o)}catch(t){a&&!i&&a.exit(),M(t)}};n.length>p;)i(n[p++]);t._c=[],t._n=!1,e&&!t._h&&x(t)})}},x=function(t){d.call(b,function(){va {snip}" + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "i" + context_line (ignored because line is too long) + "{snip} ry{c?(r||(2==t._h&&T(t),t._h=1),!0===c?n=o:(a&&a.enter(),n=c(o),a&&(a.exit(),i=!0)),n===e.promise?M(y(\"Promise-chain cycle\")):(p=N(n))?p.cal {snip}" + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "b" + context_line (ignored because line is too long) + "{snip} ply(e,o);function c(t){n(i,r,p,c,b,\"next\",t)}function b(t){n(i,r,p,c,b,\"throw\",t)}c(void 0)})}}},,,function(t,e,n){(t.exports=n(1466)).tz.lo {snip}" + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "n" + context_line (ignored because line is too long) + "{snip} e)}},function(t,e){function n(t,e,n,o,r,p,i){try{var c=t[p](i),b=c.value}catch(t){return void n(t)}c.done?e(b):Promise.resolve(b).then(o,r)} {snip}" + frame (marked out of app by the client) + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "g/p;)i(n[p++]);t._c=[],t._n=!1,e&&!t._h&&x(t)})}},x=function(t){d.call(b,function(){va {snip}" + frame* + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "i" + context_line (ignored because line is too long) + "{snip} ry{c?(r||(2==t._h&&T(t),t._h=1),!0===c?n=o:(a&&a.enter(),n=c(o),a&&(a.exit(),i=!0)),n===e.promise?M(y(\"Promise-chain cycle\")):(p=N(n))?p.cal {snip}" + frame* + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "b" + context_line (ignored because line is too long) + "{snip} ply(e,o);function c(t){n(i,r,p,c,b,\"next\",t)}function b(t){n(i,r,p,c,b,\"throw\",t)}c(void 0)})}}},,,function(t,e,n){(t.exports=n(1466)).tz.lo {snip}" + frame* + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "n" + context_line (ignored because line is too long) + "{snip} e)}},function(t,e){function n(t,e,n,o,r,p,i){try{var c=t[p](i),b=c.value}catch(t){return void n(t)}c.done?e(b):Promise.resolve(b).then(o,r)} {snip}" + frame* + module* + "sentry/dist/vendor" + filename (ignored because frame points to a URL) + "vendor.js" + function* + "g/::operator()" +-------------------------------------------------------------------------- +system: + hash: "9b78cced1eefcd0c655a0a3d8ce2cdd2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "::operator()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash1.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash1.pysnap new file mode 100644 index 000000000000..f42a4970940a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash1.pysnap @@ -0,0 +1,66 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "CUseCountedObject::UCDestroy" + frame (marked out of app by the client) + function* + "destructor'" + frame (marked out of app by the client) + function* + "CD3D11LayeredChild::LUCBeginLayerDestruction" + frame (marked out of app by the client) + function* + "CContext::LUCBeginLayerDestruction" + frame (marked out of app by the client) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (marked out of app by the client) + function* + "OpenAdapter10" + frame (marked out of app by the client) +-------------------------------------------------------------------------- +system: + hash: "2e0d26cae5986fcda5edf66612a78268" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame* + function* + "destructor'" + frame* + function* + "CD3D11LayeredChild::LUCBeginLayerDestruction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "OpenAdapter10" + frame diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash2.pysnap new file mode 100644 index 000000000000..a4a6beaed675 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash2.pysnap @@ -0,0 +1,56 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "CUseCountedObject::UCDestroy" + frame (marked out of app by the client) + function* + "CContext::LUCBeginLayerDestruction" + frame (marked out of app by the client) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (marked out of app by the client) + function* + "OpenAdapter10" + frame (marked out of app by the client) + frame (marked out of app by the client) +-------------------------------------------------------------------------- +system: + hash: "c85e23e804b52ea4b9f290ba838e77a0" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "OpenAdapter10" + frame + frame (ignored due to recursion) diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash3.pysnap new file mode 100644 index 000000000000..4b59d499c919 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_driver_crash3.pysnap @@ -0,0 +1,68 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "CUseCountedObject::UCDestroy" + frame (marked out of app by the client) + function* + "destructor'" + frame (marked out of app by the client) + function* + "NOutermost::CDeviceChild::LUCBeginLayerDestruction" + frame (marked out of app by the client) + function* + "CContext::LUCBeginLayerDestruction" + frame (marked out of app by the client) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (marked out of app by the client) + frame (marked out of app by the client) + function* + "OpenAdapter12" + frame (marked out of app by the client) +-------------------------------------------------------------------------- +system: + hash: "784442a33bd16c15013bb8f69f68e7d6" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame* + function* + "destructor'" + frame* + function* + "NOutermost::CDeviceChild::LUCBeginLayerDestruction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "OpenAdapter12" + frame diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_limit_frames.pysnap new file mode 100644 index 000000000000..7ea9c1292532 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_limit_frames.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "log_demo" + value* + "Holy shit everything is on fire!" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame (marked out of app by the client) + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (marked out of app by the client) + function* + "::operator()" +-------------------------------------------------------------------------- +system: + hash: "8f4c7709e4af98d3c47ce3519690e6d9" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame (ignored because only 1 frame is considered by custom stacktrace rule (family:native max-frames=1)) + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "::operator()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_malloc_chain.pysnap new file mode 100644 index 000000000000..5c5ff0de8421 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_malloc_chain.pysnap @@ -0,0 +1,64 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + value* + "Fatal Error: EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "application_frame" + frame (marked out of app by the client) + function* + "malloc_zone_malloc" + frame (marked out of app by the client) + function* + "nanov2_malloc" + frame (marked out of app by the client) + function* + "nanov2_allocate" + frame (marked out of app by the client) + function* + "nanov2_allocate_from_block" + frame (marked out of app by the client) + function* + "nanov2_allocate_from_block.cold.1" +-------------------------------------------------------------------------- +system: + hash: "3ff01ce959249abecc6bc8a8f1432b0b" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + stacktrace* + frame* + function* + "application_frame" + frame* + function* + "malloc_zone_malloc" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "nanov2_malloc" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "nanov2_allocate" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "nanov2_allocate_from_block" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "nanov2_allocate_from_block.cold.1" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_no_filenames.pysnap new file mode 100644 index 000000000000..83cfb9dcc7dc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_no_filenames.pysnap @@ -0,0 +1,112 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "418120a66f7031923031f5c52aca0724" + contributing component: exception + hint: None + root_component: + app* + exception* + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* (marked in-app by the client) + function* + "_main" + frame (marked out of app by the client) + function* + "std::rt::lang_start" + frame (marked out of app by the client) + function* + "std::rt::lang_start_internal" + frame* (marked in-app by the client) + function* + "___rust_maybe_catch_panic" + frame (marked out of app by the client) + function* + "std::panicking::try::do_call" + frame (marked out of app by the client) + function* + "std::rt::lang_start::{{closure}}" + frame* (marked in-app by the client) + function* + "log_demo::main" + frame* (marked in-app by the client) + function* + "log::__private_api_log" + frame (marked out of app by the client) + function* + "sentry::integrations::log::Logger::log" + frame (marked out of app by the client) + function* + "sentry::hub::Hub::with_active" + frame (marked out of app by the client) + function* + "sentry::hub::Hub::with" + frame (marked out of app by the client) + function* + "sentry::hub::Hub::with_active::{{closure}}" + frame (marked out of app by the client) + function (ignored unknown function) + "" + frame (marked out of app by the client) + function (ignored unknown function) + "" +-------------------------------------------------------------------------- +system: + hash: "bbcdb2e1d8df09ffe0fffd30fb361d4b" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::rt::lang_start_internal" + frame* + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame* + function* + "log::__private_api_log" + frame* + function* + "sentry::integrations::log::Logger::log" + frame* + function* + "sentry::hub::Hub::with_active" + frame* + function* + "sentry::hub::Hub::with" + frame* + function* + "sentry::hub::Hub::with_active::{{closure}}" + frame + function (ignored unknown function) + "" + frame + function (ignored unknown function) + "" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap new file mode 100644 index 000000000000..30f9069f1338 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_unlimited_frames.pysnap @@ -0,0 +1,46 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "log_demo" + value* + "Holy shit everything is on fire!" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame (marked out of app by the client) + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (marked out of app by the client) + function* + "::operator()" +-------------------------------------------------------------------------- +system: + hash: "9b78cced1eefcd0c655a0a3d8ce2cdd2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "::operator()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap new file mode 100644 index 000000000000..b08876361c11 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_windows_anon_namespace.pysnap @@ -0,0 +1,78 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (marked out of app by the client) + filename* + "exe_common.inl" + function* + "invoke_main" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "main" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "`anonymous namespace'::start" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "`anonymous namespace'::crash" +-------------------------------------------------------------------------- +system: + hash: "46b84e4da51648cc9f9741abd2bdad51" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* + filename* + "main.cpp" + function* + "main" + frame* + filename* + "main.cpp" + function* + "`anonymous namespace'::start" + frame* + filename* + "main.cpp" + function* + "`anonymous namespace'::crash" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_with_function_name.pysnap new file mode 100644 index 000000000000..b985a741a75e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/native_with_function_name.pysnap @@ -0,0 +1,69 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "main" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "(anonymous namespace)::start" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "(anonymous namespace)::crash" + frame (marked out of app by the client) + filename* + "main.cpp" + function* + "(anonymous namespace)::something::nested::Foo::crash" + threads (ignored because thread has no stacktrace) +-------------------------------------------------------------------------- +system: + hash: "c29439027eafcf7642f641554ab0f0ef" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + stacktrace* + frame* + filename* + "main.cpp" + function* + "main" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::start" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::crash" + frame* + filename* + "main.cpp" + function* + "(anonymous namespace)::something::nested::Foo::crash" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_exception_weird.pysnap new file mode 100644 index 000000000000..c0171e974560 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_exception_weird.pysnap @@ -0,0 +1,200 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "6a84e724a0d67c6b036ecc24fcfb4be5" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bla" + stacktrace* + frame* (marked in-app by the client) + module* + "hub" + filename (ignored because module takes precedence) + "hub.js" + function* (trimmed javascript function) + "withScope" + context_line* + "*/" + frame* (marked in-app by the client) + module* + "onunhandledrejection.ts" + filename (ignored because module takes precedence) + "onunhandledrejection.ts" + function (ignored unknown function name) + "" + frame (marked out of app by the client) + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function* (trimmed javascript function) + "mockConstructor [as captureException]" + context_line* + "return fn.apply(this, arguments);" + frame (marked out of app by the client) + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function (ignored unknown function name) + "" + context_line* + "})();" + frame (marked out of app by the client) + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function* + "finalReturnValue" + context_line* + "return specificMockImpl.apply(this, arguments);" + frame (marked out of app by the client) + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function (ignored unknown function name) + "" + context_line* + "return original.apply(this, arguments);" + frame* (marked in-app by the client) + module* + "hub.ts" + filename (ignored because module takes precedence) + "hub.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "if (maxBreadcrumbs <= 0) {" + frame* (marked in-app by the client) + module* + "hub" + filename (ignored because module takes precedence) + "hub.js" + function* (trimmed javascript function) + "invokeClient" + context_line* + "* @returns Scope, the new cloned scope" + frame* (marked in-app by the client) + module* + "baseclient.ts" + filename (ignored because module takes precedence) + "baseclient.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "promisedEvent" + frame* (marked in-app by the client) + module* + "backend.ts" + filename (ignored because module takes precedence) + "backend.ts" + function* (trimmed javascript function) + "eventFromException" +-------------------------------------------------------------------------- +system: + hash: "97adcd276fbfdd9ae8271c04255e522f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Error" + value (ignored because stacktrace takes precedence) + "bla" + stacktrace* + frame* + module* + "hub" + filename (ignored because module takes precedence) + "hub.js" + function* (trimmed javascript function) + "withScope" + context_line* + "*/" + frame* + module* + "onunhandledrejection.ts" + filename (ignored because module takes precedence) + "onunhandledrejection.ts" + function (ignored unknown function name) + "" + frame* + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function* (trimmed javascript function) + "mockConstructor [as captureException]" + context_line* + "return fn.apply(this, arguments);" + frame* + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function (ignored unknown function name) + "" + context_line* + "})();" + frame* + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function* + "finalReturnValue" + context_line* + "return specificMockImpl.apply(this, arguments);" + frame* + module* + "jest-mock.build:index" + filename (ignored because module takes precedence) + "index.js" + function (ignored unknown function name) + "" + context_line* + "return original.apply(this, arguments);" + frame* + module* + "hub.ts" + filename (ignored because module takes precedence) + "hub.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "if (maxBreadcrumbs <= 0) {" + frame* + module* + "hub" + filename (ignored because module takes precedence) + "hub.js" + function* (trimmed javascript function) + "invokeClient" + context_line* + "* @returns Scope, the new cloned scope" + frame* + module* + "baseclient.ts" + filename (ignored because module takes precedence) + "baseclient.ts" + function* (trimmed javascript function) + "captureException" + context_line* + "promisedEvent" + frame* + module* + "backend.ts" + filename (ignored because module takes precedence) + "backend.ts" + function* (trimmed javascript function) + "eventFromException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_low_level_async.pysnap new file mode 100644 index 000000000000..2871b1d65d13 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/node_low_level_async.pysnap @@ -0,0 +1,52 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (function:processTicksAndRejections -app)) + module* + "task_queues" + filename (ignored because module takes precedence) + "task_queues" + function* + "processTicksAndRejections" + frame (marked out of app by built-in stacktrace rule (function:runMicrotasks -app)) + filename* + "axiosinterceptor.js" + function* + "runMicrotasks" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app exception takes precedence + root_component: + system (ignored because app exception takes precedence) + exception (ignored because hash matches app variant) + type* + "Error" + value* + "bad" + stacktrace (ignored because it contains no contributing frames) + frame (ignored by built-in stacktrace rule (function:processTicksAndRejections -group)) + module* + "task_queues" + filename (ignored because module takes precedence) + "task_queues" + function* + "processTicksAndRejections" + frame (ignored by built-in stacktrace rule (function:runMicrotasks -group)) + filename* + "axiosinterceptor.js" + function* + "runMicrotasks" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_exception_base.pysnap new file mode 100644 index 000000000000..3e083f0edb35 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_exception_base.pysnap @@ -0,0 +1,54 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "beb01c07d991f36b9da1e90fc7169ad8" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + exception* + type* + "ValueError" + value* + "hello world" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "baz.py" +-------------------------------------------------------------------------- +system: + hash: "8c527d091797ca91a535be7b461e5059" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* + filename* + "baz.py" + exception* + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + stacktrace* + frame* + filename* + "baz.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 000000000000..20c1a45d9d2f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,208 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "4ec09a051686463f01ce05bffbcf3f89" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" + stacktrace* + frame (marked out of app by the client) + module* + "django.core.handlers.base" + filename (ignored because module takes precedence) + "base.py" + function* + "get_response" + context_line* + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + frame (marked out of app by the client) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "view" + context_line* + "return self.dispatch(request, *args, **kwargs)" + frame (marked out of app by the client) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "_wrapper" + context_line* + "return bound_func(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.views.decorators.csrf" + filename (ignored because module takes precedence) + "csrf.py" + function* + "wrapped_view" + context_line* + "return view_func(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "bound_func" + context_line* + "return func(self, *args2, **kwargs2)" + frame (marked in-app by the client but ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "dispatch" + context_line* + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "dispatch" + context_line* + "return handler(request, *args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "post" + context_line* + "hook.handle(request)" + frame* (marked in-app by the client) + module* + "sentry_plugins.heroku.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "handle" + context_line* + "email = request.POST['user']" + frame (marked out of app by the client) + module* + "django.utils.datastructures" + filename (ignored because module takes precedence) + "datastructures.py" + function* + "__getitem__" + context_line* + "raise MultiValueDictKeyError(repr(key))" +-------------------------------------------------------------------------- +system: + hash: "b19423b06ce0a7e46ae8b00e12804378" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" + stacktrace* + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.core.handlers.base" + filename (ignored because module takes precedence) + "base.py" + function* + "get_response" + context_line* + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "view" + context_line* + "return self.dispatch(request, *args, **kwargs)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "_wrapper" + context_line* + "return bound_func(*args, **kwargs)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.views.decorators.csrf" + filename (ignored because module takes precedence) + "csrf.py" + function* + "wrapped_view" + context_line* + "return view_func(*args, **kwargs)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "bound_func" + context_line* + "return func(self, *args2, **kwargs2)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "dispatch" + context_line* + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + frame (ignored by custom stacktrace rule (path:**/release_webhook.py v-group)) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "dispatch" + context_line* + "return handler(request, *args, **kwargs)" + frame* + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "post" + context_line* + "hook.handle(request)" + frame* + module* + "sentry_plugins.heroku.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "handle" + context_line* + "email = request.POST['user']" + frame* + module* + "django.utils.datastructures" + filename (ignored because module takes precedence) + "datastructures.py" + function* + "__getitem__" + context_line* + "raise MultiValueDictKeyError(repr(key))" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 000000000000..5cf97ca305c9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,208 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "MultiValueDictKeyError" + value* + "\"'user'\"" + stacktrace (ignored because it contains no contributing frames) + frame (marked out of app by the client) + module* + "django.core.handlers.base" + filename (ignored because module takes precedence) + "base.py" + function* + "get_response" + context_line* + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + frame (marked out of app by the client) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "view" + context_line* + "return self.dispatch(request, *args, **kwargs)" + frame (marked out of app by the client) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "_wrapper" + context_line* + "return bound_func(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.views.decorators.csrf" + filename (ignored because module takes precedence) + "csrf.py" + function* + "wrapped_view" + context_line* + "return view_func(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "bound_func" + context_line* + "return func(self, *args2, **kwargs2)" + frame (marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "dispatch" + context_line* + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + frame (marked out of app by the client) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "dispatch" + context_line* + "return handler(request, *args, **kwargs)" + frame (marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "post" + context_line* + "hook.handle(request)" + frame (marked in-app by the client but ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry_plugins.heroku.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "handle" + context_line* + "email = request.POST['user']" + frame (marked out of app by the client) + module* + "django.utils.datastructures" + filename (ignored because module takes precedence) + "datastructures.py" + function* + "__getitem__" + context_line* + "raise MultiValueDictKeyError(repr(key))" +-------------------------------------------------------------------------- +system: + hash: "5c0a281b9f8602e5d639d2f722fe5a9a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" + stacktrace* + frame* + module* + "django.core.handlers.base" + filename (ignored because module takes precedence) + "base.py" + function* + "get_response" + context_line* + "response = wrapped_callback(request, *callback_args, **callback_kwargs)" + frame* + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "view" + context_line* + "return self.dispatch(request, *args, **kwargs)" + frame* + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "_wrapper" + context_line* + "return bound_func(*args, **kwargs)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "django.views.decorators.csrf" + filename (ignored because module takes precedence) + "csrf.py" + function* + "wrapped_view" + context_line* + "return view_func(*args, **kwargs)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "django.utils.decorators" + filename (ignored because module takes precedence) + "decorators.py" + function* + "bound_func" + context_line* + "return func(self, *args2, **kwargs2)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "dispatch" + context_line* + "return super(ReleaseWebhookView, self).dispatch(*args, **kwargs)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "django.views.generic.base" + filename (ignored because module takes precedence) + "base.py" + function* + "dispatch" + context_line* + "return handler(request, *args, **kwargs)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry.web.frontend.release_webhook" + filename (ignored because module takes precedence) + "release_webhook.py" + function* + "post" + context_line* + "hook.handle(request)" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "sentry_plugins.heroku.plugin" + filename (ignored because module takes precedence) + "plugin.py" + function* + "handle" + context_line* + "email = request.POST['user']" + frame (ignored by custom stacktrace rule (function:wrapped_view ^-group -group)) + module* + "django.utils.datastructures" + filename (ignored because module takes precedence) + "datastructures.py" + function* + "__getitem__" + context_line* + "raise MultiValueDictKeyError(repr(key))" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_http_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_http_error.pysnap new file mode 100644 index 000000000000..21da4448c497 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_http_error.pysnap @@ -0,0 +1,91 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "721f24ff0b900f7945b4da03890d2a83" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "HTTPError" + value (ignored because stacktrace takes precedence) + " Client Error: Too Many Requests for url: " + stacktrace* + frame* (marked in-app by the client) + module* + "sentry.utils.safe" + filename (ignored because module takes precedence) + "safe.py" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* (marked in-app by the client) + module* + "sentry.integrations.slack.notify_action" + filename (ignored because module takes precedence) + "notify_action.py" + function* + "send_notification" + context_line* + "resp.raise_for_status()" + frame (marked out of app by the client) + module* + "requests.models" + filename (ignored because module takes precedence) + "models.py" + function* + "raise_for_status" + context_line* + "raise HTTPError(http_error_msg, response=self)" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system exception takes precedence + root_component: + default (ignored because app/system exception takes precedence) + message (ignored because app/system exception takes precedence) + "%s.process_error" +-------------------------------------------------------------------------- +system: + hash: "d2490be282c0ada7e13288fd90fb0cb3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "HTTPError" + value (ignored because stacktrace takes precedence) + " Client Error: Too Many Requests for url: " + stacktrace* + frame* + module* + "sentry.utils.safe" + filename (ignored because module takes precedence) + "safe.py" + function* + "safe_execute" + context_line* + "result = func(*args, **kwargs)" + frame* + module* + "sentry.integrations.slack.notify_action" + filename (ignored because module takes precedence) + "notify_action.py" + function* + "send_notification" + context_line* + "resp.raise_for_status()" + frame* + module* + "requests.models" + filename (ignored because module takes precedence) + "models.py" + function* + "raise_for_status" + context_line* + "raise HTTPError(http_error_msg, response=self)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap new file mode 100644 index 000000000000..51bf9dff66a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_posix.pysnap @@ -0,0 +1,397 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "4f60cfec2087a65190b283cb848bea62" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "TimeoutError" + value (ignored because stacktrace takes precedence) + "timed out" + stacktrace* + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app) and un-ignored by custom stacktrace rule (function:post_process_group +group v+group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "child_process" + context_line* + "run_worker(" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.taskworker.task" + filename (ignored because module takes precedence) + "task.py" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* (marked in-app by custom stacktrace rule (function:post_process_group +app v+app)) + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame (non app frame) + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "connect" + context_line* + "sock = self._connect()" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "raise err" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "sock.connect(socket_address)" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system exception takes precedence + root_component: + default (ignored because app/system exception takes precedence) + message (ignored because app/system exception takes precedence) + "Failed to process pipeline step %s" +-------------------------------------------------------------------------- +system: + hash: "e5ae333037d1ba0ea9379b6d9693aca4" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TimeoutError" + value (ignored because stacktrace takes precedence) + "timed out" + stacktrace* + frame* (un-ignored by custom stacktrace rule (function:post_process_group +group v+group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "child_process" + context_line* + "run_worker(" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* + module* + "sentry.taskworker.task" + filename (ignored because module takes precedence) + "task.py" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame* + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "connect" + context_line* + "sock = self._connect()" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "raise err" + frame (ignored due to recursion) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "sock.connect(socket_address)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap new file mode 100644 index 000000000000..23dc0b1fe406 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_bad_rules_windows.pysnap @@ -0,0 +1,749 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "620b9e72c9565c3ef54e519ec997b57a" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn._subprocess" + filename (ignored because module takes precedence) + "_subprocess.py" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.server" + filename (ignored because module takes precedence) + "server.py" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return runner.run(main)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_forever" + context_line* + "self._run_once()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "_run_once" + context_line* + "handle._run()" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "asyncio.events" + filename (ignored because module takes precedence) + "events.py" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.lifespan.on" + filename (ignored because module takes precedence) + "on.py" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "uvicorn.middleware.proxy_headers" + filename (ignored because module takes precedence) + "proxy_headers.py" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.errors" + filename (ignored because module takes precedence) + "errors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.base" + filename (ignored because module takes precedence) + "base.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.cors" + filename (ignored because module takes precedence) + "cors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.middleware.exceptions" + filename (ignored because module takes precedence) + "exceptions.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.middleware.asyncexitstack" + filename (ignored because module takes precedence) + "asyncexitstack.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app) and un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (marked in-app by custom stacktrace rule (function:run_app +app v+app)) + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame (non app frame) + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system threads take precedence + root_component: + default (ignored because app/system threads take precedence) + message (ignored because app/system threads take precedence) + "Error creating HTTP client: cannot import name 'create_http_client' from 'app.utils.http' (D:\\engine\\app\\utils\\http.py)" +-------------------------------------------------------------------------- +system: + hash: "ed32779a2628338d3534c4e182caf8e8" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "uvicorn._subprocess" + filename (ignored because module takes precedence) + "_subprocess.py" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* + module* + "uvicorn.server" + filename (ignored because module takes precedence) + "server.py" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return runner.run(main)" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_forever" + context_line* + "self._run_once()" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "_run_once" + context_line* + "handle._run()" + frame* + module* + "asyncio.events" + filename (ignored because module takes precedence) + "events.py" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* + module* + "uvicorn.lifespan.on" + filename (ignored because module takes precedence) + "on.py" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* + module* + "uvicorn.middleware.proxy_headers" + filename (ignored because module takes precedence) + "proxy_headers.py" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* + module* + "fastapi.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* + module* + "starlette.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.middleware.errors" + filename (ignored because module takes precedence) + "errors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.base" + filename (ignored because module takes precedence) + "base.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.cors" + filename (ignored because module takes precedence) + "cors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.exceptions" + filename (ignored because module takes precedence) + "exceptions.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "fastapi.middleware.asyncexitstack" + filename (ignored because module takes precedence) + "asyncexitstack.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* (un-ignored by custom stacktrace rule (function:run_app +group v+group)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame* + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap new file mode 100644 index 000000000000..ba67287a4462 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_posix.pysnap @@ -0,0 +1,397 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "TimeoutError" + value* + "timed out" + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame (non app frame) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "child_process" + context_line* + "run_worker(" + frame (non app frame) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame (non app frame) + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame (non app frame) + module* + "sentry.taskworker.task" + filename (ignored because module takes precedence) + "task.py" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame (non app frame) + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame (non app frame) + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame (marked out of app by built-in stacktrace rule (path:/usr/local/lib/** -app)) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "connect" + context_line* + "sock = self._connect()" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "raise err" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "sock.connect(socket_address)" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + default (ignored because system exception takes precedence) + message (ignored because system exception takes precedence) + "Failed to process pipeline step %s" +-------------------------------------------------------------------------- +system: + hash: "1bc764ab44acfab9a38f23ae670038bd" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "TimeoutError" + value (ignored because stacktrace takes precedence) + "timed out" + stacktrace* + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "child_process" + context_line* + "run_worker(" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "run_worker" + context_line* + "_execute_activation(task_func, inflight.activation)" + frame* + module* + "sentry.taskworker.workerchild" + filename (ignored because module takes precedence) + "workerchild.py" + function* + "_execute_activation" + context_line* + "task_func(*args, **kwargs)" + frame* + module* + "sentry.taskworker.task" + filename (ignored because module takes precedence) + "task.py" + function* + "__call__" + context_line* + "return self._func(*args, **kwargs)" + frame* + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "post_process_group" + context_line* + "run_post_process_job(" + frame* + module* + "sentry.tasks.post_process" + filename (ignored because module takes precedence) + "post_process.py" + function* + "run_post_process_job" + context_line* + "logger.exception(" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "exception" + context_line* + "self.error(msg, *args, exc_info=exc_info, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "connect" + context_line* + "sock = self._connect()" + frame* + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "raise err" + frame (ignored due to recursion) + module* + "redis.connection" + filename (ignored because module takes precedence) + "connection.py" + function* + "_connect" + context_line* + "sock.connect(socket_address)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap new file mode 100644 index 000000000000..589bde9268a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/python_multiprocessing_hardcoded_values_in_context_line_windows.pysnap @@ -0,0 +1,749 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system threads take precedence + root_component: + app (ignored because system threads take precedence) + threads (ignored because this variant does not have a contributing stacktrace, but the system variant does) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame (non app frame) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame (non app frame) + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame (non app frame) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame (non app frame) + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "uvicorn._subprocess" + filename (ignored because module takes precedence) + "_subprocess.py" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "uvicorn.server" + filename (ignored because module takes precedence) + "server.py" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame (non app frame) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return runner.run(main)" + frame (non app frame) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame (non app frame) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame (non app frame) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_forever" + context_line* + "self._run_once()" + frame (non app frame) + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "_run_once" + context_line* + "handle._run()" + frame (non app frame) + module* + "asyncio.events" + filename (ignored because module takes precedence) + "events.py" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "uvicorn.lifespan.on" + filename (ignored because module takes precedence) + "on.py" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "uvicorn.middleware.proxy_headers" + filename (ignored because module takes precedence) + "proxy_headers.py" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.middleware.errors" + filename (ignored because module takes precedence) + "errors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.middleware.base" + filename (ignored because module takes precedence) + "base.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.middleware.cors" + filename (ignored because module takes precedence) + "cors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.middleware.exceptions" + filename (ignored because module takes precedence) + "exceptions.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.middleware.asyncexitstack" + filename (ignored because module takes precedence) + "asyncexitstack.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (marked out of app by built-in stacktrace rule (path:**/site-packages/** -app)) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (non app frame) + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame (non app frame) + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame (non app frame) + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because system threads take precedence + root_component: + default (ignored because system threads take precedence) + message (ignored because system threads take precedence) + "Error creating HTTP client: cannot import name 'create_http_client' from 'app.utils.http' (D:\\engine\\app\\utils\\http.py)" +-------------------------------------------------------------------------- +system: + hash: "a18195beb2cfb93ea25c9331c988dbee" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame (ignored by built-in stacktrace rule (category:internals -group)) + module* + "__main__" + filename (ignored because module takes precedence) + "" + function* + "" + context_line* + "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=, pipe_handle=)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "spawn_main" + context_line* + "exitcode = _main(fd, parent_sentinel)" + frame* + module* + "multiprocessing.spawn" + filename (ignored because module takes precedence) + "spawn.py" + function* + "_main" + context_line* + "return self._bootstrap(parent_sentinel)" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "_bootstrap" + context_line* + "self.run()" + frame* + module* + "multiprocessing.process" + filename (ignored because module takes precedence) + "process.py" + function* + "run" + context_line* + "self._target(*self._args, **self._kwargs)" + frame* + module* + "uvicorn._subprocess" + filename (ignored because module takes precedence) + "_subprocess.py" + function* + "subprocess_started" + context_line* + "target(sockets=sockets)" + frame* + module* + "uvicorn.server" + filename (ignored because module takes precedence) + "server.py" + function* + "run" + context_line* + "return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())" + frame* + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return runner.run(main)" + frame (ignored due to recursion) + module* + "asyncio.runners" + filename (ignored because module takes precedence) + "runners.py" + function* + "run" + context_line* + "return self._loop.run_until_complete(task)" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_until_complete" + context_line* + "self.run_forever()" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "run_forever" + context_line* + "self._run_once()" + frame* + module* + "asyncio.base_events" + filename (ignored because module takes precedence) + "base_events.py" + function* + "_run_once" + context_line* + "handle._run()" + frame* + module* + "asyncio.events" + filename (ignored because module takes precedence) + "events.py" + function* + "_run" + context_line* + "self._context.run(self._callback, *self._args)" + frame* + module* + "uvicorn.lifespan.on" + filename (ignored because module takes precedence) + "on.py" + function* + "main" + context_line* + "await app(scope, self.receive, self.send)" + frame* + module* + "uvicorn.middleware.proxy_headers" + filename (ignored because module takes precedence) + "proxy_headers.py" + function* + "__call__" + context_line* + "return await self.app(scope, receive, send)" + frame* + module* + "fastapi.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await super().__call__(scope, receive, send)" + frame* + module* + "starlette.applications" + filename (ignored because module takes precedence) + "applications.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.middleware.errors" + filename (ignored because module takes precedence) + "errors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.base" + filename (ignored because module takes precedence) + "base.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.cors" + filename (ignored because module takes precedence) + "cors.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.middleware.exceptions" + filename (ignored because module takes precedence) + "exceptions.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "fastapi.middleware.asyncexitstack" + filename (ignored because module takes precedence) + "asyncexitstack.py" + function* + "__call__" + context_line* + "await self.app(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "__call__" + context_line* + "await self.middleware_stack(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "app" + context_line* + "await self.lifespan(scope, receive, send)" + frame* + module* + "starlette.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "lifespan" + context_line* + "async with self.lifespan_context(app) as maybe_state:" + frame* + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame (ignored due to recursion) + module* + "fastapi.routing" + filename (ignored because module takes precedence) + "routing.py" + function* + "merged_lifespan" + context_line* + "async with original_context(app) as maybe_original_state:" + frame* + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "run_app" + context_line* + "do_log(\"error\", f\"Error creating HTTP client: {e}\")" + frame* + module* + "app.main" + filename (ignored because module takes precedence) + "main.py" + function* + "do_log" + context_line* + "getattr(logger, level)(msg, *args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "error" + context_line* + "self._log(ERROR, msg, args, **kwargs)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "_log" + context_line* + "self.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.callHandlers(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "callHandlers" + context_line* + "hdlr.handle(record)" + frame* + module* + "logging" + filename (ignored because module takes precedence) + "__init__.py" + function* + "handle" + context_line* + "self.emit(record)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap new file mode 100644 index 000000000000..6afab8c69eec --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "11e6467c8358a9366c6538f95dcd7bd4" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." + exception* + type* + "TypeError" + value* + "Load failed" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 000000000000..ad462a21292b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "70dd09f56349dcce62a74137b00bb571" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 000000000000..01ebceb85dd3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,20 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "5f209162115f576bedbaf6f0ad30e5aa" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + type* + "TypeError" + value* + "Load failed" + exception* + type* + "Error" + value* + "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_native.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_native.pysnap new file mode 100644 index 000000000000..27453c7ab559 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/react_native.pysnap @@ -0,0 +1,412 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "33e3ac91fc256d3dfb789693be30a883" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "TypeError" + value (ignored because stacktrace takes precedence) + "undefined is not a function (evaluating '({}).invalidFunction()')" + stacktrace* + frame (marked out of app by the client) + module* + "react-native/Libraries/BatchedBridge/MessageQueue" + filename (ignored because module takes precedence) + "messagequeue.js" + function (ignored because sourcemap used and context line available) + "value" + context_line* + "return this.flushedQueue();" + frame (marked out of app by the client) + module* + "react-native/Libraries/BatchedBridge/MessageQueue" + filename (ignored because module takes precedence) + "messagequeue.js" + function (ignored because sourcemap used and context line available) + "flushedQueue" + context_line* + "this._inCall--;" + frame (marked out of app by the client) + module* + "react-native/Libraries/BatchedBridge/MessageQueue" + filename (ignored because module takes precedence) + "messagequeue.js" + function (ignored because sourcemap used and context line available) + "_inCall" + context_line* + "return this.flushedQueue();" + frame (marked out of app by the client) + module* + "react-native/Libraries/BatchedBridge/MessageQueue" + filename (ignored because module takes precedence) + "messagequeue.js" + function (ignored because sourcemap used and context line available) + "flushedQueue" + context_line* + "this._lastFlush = new Date().getTime();" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "_lastFlush" + context_line* + "_receiveRootNodeIDEvent(index, eventTopLevelType, i);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "_receiveRootNodeIDEvent" + context_line* + "batchedUpdates(function() {" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "batchedUpdates" + context_line* + "return _batchedUpdates(fn, bookkeeping);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "_batchedUpdates" + context_line* + "return fn(a);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "fn" + context_line* + "(forEachAccumulated(events, executeDispatchesAndReleaseTopLevel)," + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "forEachAccumulated" + context_line* + "Array.isArray(arr) ? arr.forEach(cb, scope) : arr && cb.call(scope, arr);" + frame (marked out of app by the client) + function* + "[native code] forEach" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "D" + context_line* + "executeDispatch(e, !1, dispatchListeners, dispatchInstances);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "executeDispatch" + context_line* + "ReactErrorUtils.invokeGuardedCallbackAndCatchFirstError(" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "invokeGuardedCallbackAndCatchFirstError" + context_line* + "ReactErrorUtils.invokeGuardedCallback.apply(this, arguments);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "apply" + context_line* + "invokeGuardedCallback.apply(ReactErrorUtils, arguments);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Renderer/ReactNativeRenderer-prod" + filename (ignored because module takes precedence) + "reactnativerenderer-prod.js" + function (ignored because sourcemap used and context line available) + "apply" + context_line* + "var funcArgs = Array.prototype.slice.call(arguments, 3);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Components/Touchable/Touchable" + filename (ignored because module takes precedence) + "touchable.js" + function (ignored because sourcemap used and context line available) + "arguments" + context_line* + "touchableHandleResponderRelease: function(e) {" + frame (marked out of app by the client) + module* + "react-native/Libraries/Components/Touchable/Touchable" + filename (ignored because module takes precedence) + "touchable.js" + function (ignored because sourcemap used and context line available) + "_receiveSignal" + context_line* + "this._performSideEffectsForTransition(curState, nextState, signal, e);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Components/Touchable/Touchable" + filename (ignored because module takes precedence) + "touchable.js" + function (ignored because sourcemap used and context line available) + "_performSideEffectsForTransition" + context_line* + "this.touchableHandlePress(e);" + frame (marked out of app by the client) + module* + "react-native/Libraries/Components/Touchable/TouchableNativeFeedback.android" + filename (ignored because module takes precedence) + "touchablenativefeedback.android.js" + function (ignored because sourcemap used and context line available) + "this" + context_line* + "this.props.onPress && this.props.onPress(e);" + frame* (marked in-app by the client) + module* + "App" + filename (ignored because module takes precedence) + "app.js" + function (ignored because sourcemap used and context line available) + "onPress" + context_line* + "" + filename (ignored because frame points to a URL) + "" +-------------------------------------------------------------------------- +system: + hash: "cd2a9fd0cdaa8cd55ed22b101fc65882" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module* + "" + filename (ignored because frame points to a URL) + "" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 000000000000..86859b593578 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,30 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "659ad79e2e70c822d30a53d7d889529e" + contributing component: stacktrace + hint: None + root_component: + app* + stacktrace* + frame* (marked in-app by the client) + filename* + "foo.py" + frame* (marked in-app by the client) + filename* + "bar.py" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app stacktrace takes precedence + root_component: + system (ignored because app stacktrace takes precedence) + stacktrace (ignored because hash matches app variant) + frame* + filename* + "foo.py" + frame* + filename* + "bar.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 000000000000..54e783e55bea --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,44 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system stacktrace takes precedence + root_component: + app (ignored because system stacktrace takes precedence) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename (ignored because filename is anonymous) + "" + frame (marked out of app by the client) + filename* + "dojo.js" + function* + "c" + frame (marked out of app by the client) + filename* + "dojo.js" + function* (trimmed javascript function) + "_createDocumentViewModel" +-------------------------------------------------------------------------- +system: + hash: "c5da56c71b31f34c5880d734cbc8f5bb" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame (ignored low quality javascript frame) + filename (ignored because filename is anonymous) + "" + frame* + filename* + "dojo.js" + function* + "c" + frame* + filename* + "dojo.js" + function* (trimmed javascript function) + "_createDocumentViewModel" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap new file mode 100644 index 000000000000..cb53ca0dcfa9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_negated_match.pysnap @@ -0,0 +1,70 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "log_demo" + value* + "Holy shit everything is on fire!" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "_main" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start_internal" + frame (non app frame) + function* + "___rust_maybe_catch_panic" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::rt::lang_start::{{closure}}" + frame (non app frame) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" +-------------------------------------------------------------------------- +system: + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame (ignored by custom stacktrace rule (!function:log_demo::* -group)) + function* + "_main" + frame (ignored by custom stacktrace rule (!function:log_demo::* -group)) + function* + "std::rt::lang_start_internal" + frame (ignored by custom stacktrace rule (!function:log_demo::* -group)) + function* + "___rust_maybe_catch_panic" + frame (ignored by custom stacktrace rule (!function:log_demo::* -group)) + function* + "std::panicking::try::do_call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame (ignored by custom stacktrace rule (!function:log_demo::* -group)) + function* + "log::__private_api_log" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust.pysnap new file mode 100644 index 000000000000..5d9d58738a33 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust.pysnap @@ -0,0 +1,70 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame (non app frame) + function* + "_main" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start_internal" + frame (non app frame) + function* + "___rust_maybe_catch_panic" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::rt::lang_start::{{closure}}" + frame* (marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" +-------------------------------------------------------------------------- +system: + hash: "193a67f0b7f8b5a69f29dc6a259d47c3" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame* + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame* + function* + "log::__private_api_log" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap new file mode 100644 index 000000000000..5c9bf2e53cc3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_rust2.pysnap @@ -0,0 +1,70 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "ef42635ff82b83bc711ed7c65b7cb189" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame (non app frame) + function* + "_main" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start_internal" + frame (non app frame) + function* + "___rust_maybe_catch_panic" + frame (marked out of app by built-in stacktrace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "std::rt::lang_start::{{closure}}" + frame* (marked in-app by custom stacktrace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" +-------------------------------------------------------------------------- +system: + hash: "68021c81b00bc4f2f983b11f10efbfda" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame (ignored by custom stacktrace rule (family:native function:__* -group)) + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame (ignored by custom stacktrace rule (family:native function:*::__* -group)) + function* + "log::__private_api_log" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 000000000000..c5c513cf6802 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,90 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "1effb24729ae4c43efa36b460511136a" + contributing component: stacktrace + hint: None + root_component: + app* + stacktrace* + frame* (marked in-app by the client) + filename* + "foo.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" + frame (marked out of app by the client) + filename* + "bar.py" +-------------------------------------------------------------------------- +system: + hash: "659ad79e2e70c822d30a53d7d889529e" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + filename* + "foo.py" + frame* + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" + frame (ignored due to recursion) + filename* + "bar.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/template_compute_hashes.pysnap new file mode 100644 index 000000000000..fb83a3a6094e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/template_compute_hashes.pysnap @@ -0,0 +1,14 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +default: + hash: "1f5bdebe3c9f414c7dbb4296a8353245" + contributing component: template + hint: None + root_component: + default* + template* + filename* + "foo.html" + context_line* + "{% invalid template tag %}" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap new file mode 100644 index 000000000000..4df2d89db491 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_compute_hashes.pysnap @@ -0,0 +1,30 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "1a11687556cf74559f0ae90b1c87e2fd" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.c" + function* + "main" +-------------------------------------------------------------------------- +system: + hash: null + contributing component: null + hint: ignored because app threads take precedence + root_component: + system (ignored because app threads take precedence) + threads (ignored because hash matches app variant) + stacktrace* + frame* + filename* + "baz.c" + function* + "main" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_no_hash.pysnap new file mode 100644 index 000000000000..e8c871eb68ab --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/threads_no_hash.pysnap @@ -0,0 +1,13 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + threads (ignored because it contains neither a single thread nor multiple threads with exactly one crashing or current thread; instead contains 0 crashing, 2 current, and 2 total threads) +-------------------------------------------------------------------------- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity.pysnap new file mode 100644 index 000000000000..785c825b83a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity.pysnap @@ -0,0 +1,108 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "63f25f224c4a56add964d1570880704c" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "NullReferenceException" + value (ignored because stacktrace takes precedence) + "Object reference not set to an instance of an object" + stacktrace* + frame (marked out of app by the client) + filename* + "eventsystem.cs" + function* + "UnityEngine.EventSystems.EventSystem:Update()" + frame (marked out of app by the client) + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor)" + frame (marked out of app by the client) + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)" + frame (marked out of app by the client) + filename* + "button.cs" + function* + "UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)" + frame (marked out of app by the client) + filename* + "button.cs" + function* + "UnityEngine.UI.Button.Press ()" + frame (marked out of app by the client) + filename* + "unityevent_0.cs" + function* + "UnityEngine.Events.UnityEvent.Invoke ()" + frame (marked out of app by the client) + filename* + "unityevent.cs" + function* + "UnityEngine.Events.InvokableCall.Invoke ()" + frame* (marked in-app by the client) + filename* + "samplescript.cs" + function* + "SampleScript.ThrowNull ()" +-------------------------------------------------------------------------- +system: + hash: "7909deacdb3f511a715efb7f2670d4dc" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "NullReferenceException" + value (ignored because stacktrace takes precedence) + "Object reference not set to an instance of an object" + stacktrace* + frame* + filename* + "eventsystem.cs" + function* + "UnityEngine.EventSystems.EventSystem:Update()" + frame* + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor)" + frame* + filename* + "executeevents.cs" + function* + "UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)" + frame* + filename* + "button.cs" + function* + "UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)" + frame* + filename* + "button.cs" + function* + "UnityEngine.UI.Button.Press ()" + frame* + filename* + "unityevent_0.cs" + function* + "UnityEngine.Events.UnityEvent.Invoke ()" + frame* + filename* + "unityevent.cs" + function* + "UnityEngine.Events.InvokableCall.Invoke ()" + frame* + filename* + "samplescript.cs" + function* + "SampleScript.ThrowNull ()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap new file mode 100644 index 000000000000..4c7eaaa2b933 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_coroutine_dispatch.pysnap @@ -0,0 +1,90 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "System.NullReferenceException" + value* + "Object reference not set to an instance of an object" + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* + "GameBootstrap" + filename (ignored because module takes precedence) + "gamebootstrap.cs" + function* + "GameBootstrap.Start()" + frame (non app frame) + module* + "UnityEngine.MonoBehaviour" + function* + "UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)" + frame (non app frame) + module* + "UnityEngine.SetupCoroutine" + function* + "UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator, System.IntPtr)" + frame (non app frame) + module* + "EnemySpawner+d__4" + filename (ignored because module takes precedence) + "enemyspawner.cs" + function* + "EnemySpawner+d__4.MoveNext()" + frame (non app frame) + module* + "CombatSystem" + filename (ignored because module takes precedence) + "combatsystem.cs" + function* + "CombatSystem.ApplyDamage(UnityEngine.GameObject, System.Int32)" +-------------------------------------------------------------------------- +system: + hash: "872f67574fe082419e092229105d22ca" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "System.NullReferenceException" + value (ignored because stacktrace takes precedence) + "Object reference not set to an instance of an object" + stacktrace* + frame* + module* + "GameBootstrap" + filename (ignored because module takes precedence) + "gamebootstrap.cs" + function* + "GameBootstrap.Start()" + frame* + module* + "UnityEngine.MonoBehaviour" + function* + "UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)" + frame* + module* + "UnityEngine.SetupCoroutine" + function* + "UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator, System.IntPtr)" + frame* + module* + "EnemySpawner+d__4" + filename (ignored because module takes precedence) + "enemyspawner.cs" + function* + "EnemySpawner+d__4.MoveNext()" + frame* + module* + "CombatSystem" + filename (ignored because module takes precedence) + "combatsystem.cs" + function* + "CombatSystem.ApplyDamage(UnityEngine.GameObject, System.Int32)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap new file mode 100644 index 000000000000..2ca68e3d706d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_android.pysnap @@ -0,0 +1,124 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "EXC_BAD_ACCESS" + value* + "Attempted to dereference null pointer." + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__libc_init" + frame (non app frame) + function* + "android_main" + frame (non app frame) + function* + "UnityPlayerLoop" + frame (non app frame) + function* + "ScriptingInvocation::Invoke" + frame (non app frame) + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame (non app frame) + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame (non app frame) + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame (non app frame) + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame (non app frame) + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame (non app frame) + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame (non app frame) + function* + "sentry__handle_signal" + frame (non app frame) + function* + "sentry_android_capture_envelope" +-------------------------------------------------------------------------- +system: + hash: "04d641eb30b794030ed5b0d7d779eb05" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "Attempted to dereference null pointer." + stacktrace* + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__libc_init" + frame* + function* + "android_main" + frame* + function* + "UnityPlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame* + function* + "sentry__handle_signal" + frame* + function* + "sentry_android_capture_envelope" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap new file mode 100644 index 000000000000..7398f131c4bd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_edge_cases.pysnap @@ -0,0 +1,96 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "539935023e2db3e104789c1c69ca2cf5" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "SIGABRT" + value (ignored because stacktrace takes precedence) + "Abort" + stacktrace* + frame* (marked in-app by the client) + filename* + "textures.cpp" + function* + "unrelated_native_app_source_under_assets_dir" + frame (marked out of app by built-in stacktrace rule (path:**/vendor/** -app)) + filename* + "bar.cpp" + function* + "unrelated_native_app_source_under_package_cache_dir" + frame* (marked in-app by the client) + function* + "developer_own_libgame_binary_not_unity_gameactivity_glue" + frame (non app frame) + filename* + "enemyspawner.cs" + function* + "windows_il2cpp_project_source_with_backslash_paths" + frame (non app frame) + filename* + "enemyspawner.cs" + function* + "linux_il2cpp_project_source" + frame (non app frame) + filename* + "inputaction.cs" + function* + "registry_package_source_under_runtime_dir_never_restored" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "legacy_ios_engine_binary_unity_6000_0_and_older" + frame (non app frame) + function* + "windows_sentry_native_sdk" +-------------------------------------------------------------------------- +system: + hash: "7429f5a97df8b817f3b36cab1970f9ea" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "SIGABRT" + value (ignored because stacktrace takes precedence) + "Abort" + stacktrace* + frame* + filename* + "textures.cpp" + function* + "unrelated_native_app_source_under_assets_dir" + frame* + filename* + "bar.cpp" + function* + "unrelated_native_app_source_under_package_cache_dir" + frame* + function* + "developer_own_libgame_binary_not_unity_gameactivity_glue" + frame* + filename* + "enemyspawner.cs" + function* + "windows_il2cpp_project_source_with_backslash_paths" + frame* + filename* + "enemyspawner.cs" + function* + "linux_il2cpp_project_source" + frame* + filename* + "inputaction.cs" + function* + "registry_package_source_under_runtime_dir_never_restored" + frame* + function* + "legacy_ios_engine_binary_unity_6000_0_and_older" + frame* + function* + "windows_sentry_native_sdk" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap new file mode 100644 index 000000000000..3924068858a7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_ios.pysnap @@ -0,0 +1,140 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "8bbdecb4ad2f92d58133a93ee009a07b" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "Attempted to dereference null pointer." + stacktrace* + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "start" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "main.mm" + function* + "main" + frame (non app frame) + function* + "UIApplicationMain" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "-[UnityAppController repaint]" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "PlayerLoop" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "ScriptingInvocation::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* (marked in-app by built-in stacktrace rule (family:native package:**/Containers/Bundle/Application/** +app)) + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryCrashInstallationReporter reportCrash]" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__pthread_kill" +-------------------------------------------------------------------------- +system: + hash: "bae55c8a9132232871adf6b662a2d6da" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "Attempted to dereference null pointer." + stacktrace* + frame* + function* + "start" + frame* + filename* + "main.mm" + function* + "main" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "UIApplicationMain" + frame* + function* + "-[UnityAppController repaint]" + frame* + function* + "PlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryCrashInstallationReporter reportCrash]" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__pthread_kill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap new file mode 100644 index 000000000000..b76f1b13cfba --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unity_il2cpp_macos.pysnap @@ -0,0 +1,124 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: null + contributing component: null + hint: ignored because system exception takes precedence + root_component: + app (ignored because system exception takes precedence) + exception (ignored because this variant does not have a contributing stacktrace, but the system variant does) + type* + "EXC_BAD_ACCESS" + value* + "Attempted to dereference null pointer." + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "main" + frame (non app frame) + function* + "UnityMain" + frame (non app frame) + function* + "PlayerLoop" + frame (non app frame) + function* + "ScriptingInvocation::Invoke" + frame (non app frame) + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame (non app frame) + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame (non app frame) + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame (non app frame) + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame (non app frame) + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame (non app frame) + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame (non app frame) + function* + "sentry__handle_signal" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureCrashEvent:]" +-------------------------------------------------------------------------- +system: + hash: "cd7247c52d95df0f046b9e8d86ca231f" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "Attempted to dereference null pointer." + stacktrace* + frame* + function* + "main" + frame* + function* + "UnityMain" + frame* + function* + "PlayerLoop" + frame* + function* + "ScriptingInvocation::Invoke" + frame* + filename* + "il2cppinvokertable.cpp" + function* + "RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017" + frame* + filename* + "enemyspawner.cs" + function* + "EnemySpawner_Update" + frame* + filename* + "combatsystem.cs" + function* + "CombatSystem_ApplyDamage" + frame* + filename* + "tmp_text.cs" + function* + "TMP_Text_SetText" + frame* + filename* + "animation.bindings.cs" + function* + "Animation_Play" + frame* + filename* + "il2cppcodegen.cpp" + function* + "il2cpp_codegen_raise_null_reference_exception" + frame* + function* + "sentry__handle_signal" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureCrashEvent:]" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap new file mode 100644 index 000000000000..070281cf231a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assert_mac.pysnap @@ -0,0 +1,220 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "2301317599ab22875b83ce2dafdab6ce" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "p__commonOp__fn__fn__makeReturn__fn___fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + stacktrace* + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThread__start__" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FGenericPlatformMisc::RaiseException" +-------------------------------------------------------------------------- +system: + hash: "65c0ee687814f8d166cc29c9443ffc8a" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "p__commonOp__fn__fn__makeReturn__fn___fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThread__start__" + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + function* + "USentryPlaygroundUtils::execTerminate" + frame* + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "FGenericPlatformMisc::RaiseException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 000000000000..382e98d9fdf9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,164 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "8c134ce2a43a0b2c55654902491307c2" + contributing component: exception + hint: None + root_component: + app* + exception* + type (ignored because exception is synthetic) + "SIGTRAP" + value (ignored because stacktrace takes precedence) + "Trap" + stacktrace* + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__start_thread" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "__pthread_start" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "android_main" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AndroidMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UGameEngine::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UWorld::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::ProcessLatentActions" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::TickLatentActionForObject" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AActor::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "tgkill" +-------------------------------------------------------------------------- +system: + hash: "f203e9bc12df86bb01fbd92a45643f86" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "SIGTRAP" + value (ignored because stacktrace takes precedence) + "Trap" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "__start_thread" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "__pthread_start" + frame + frame* + function* + "android_main" + frame* + function* + "AndroidMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "UGameEngine::Tick" + frame* + function* + "UWorld::Tick" + frame* + function* + "FLatentActionManager::ProcessLatentActions" + frame* + function* + "FLatentActionManager::TickLatentActionForObject" + frame* + function* + "AActor::ProcessEvent" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + function* + "USentryPlaygroundUtils::execTerminate" + frame* + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "TMulticastDelegateBase::Broadcast" + frame + frame* + function* + "tgkill" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..29f13f287b35 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,306 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "c246c95d4a435b3d601044aebae72a38" + contributing component: exception + hint: None + root_component: + app* + exception* + type (ignored because exception is synthetic) + "unknown 0x00004000 / 0x7ff89574837a" + value (ignored because stacktrace takes precedence) + "Fatal Error: unknown / " + stacktrace* + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "UserCallWinProcCheckWow" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::AssertFailed" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryoutputdeviceerror.cpp" + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by built-in stacktrace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsErrorOutputDevice::Serialize" + frame (marked out of app by built-in stacktrace rule (category:throw ^-app -app)) + function* + "RaiseException" +-------------------------------------------------------------------------- +system: + hash: "69925caf2921426d8587558ce078b9e2" + contributing component: exception + hint: None + root_component: + system* + exception* + type (ignored because exception is synthetic) + "unknown 0x00004000 / 0x7ff89574837a" + value (ignored because stacktrace takes precedence) + "Fatal Error: unknown / " + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* + function* + "WinMain" + frame* + function* + "LaunchWindowsStartup" + frame* + function* + "GuardedMainWrapper" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* + function* + "DispatchMessageWorker" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "UserCallWinProcCheckWow" + frame* + function* + "FWindowsApplication::AppWndProc" + frame* + function* + "FWindowsApplication::ProcessMessage" + frame* + function* + "FWindowsApplication::DeferMessage" + frame* + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "FDebug::CheckVerifyFailedImpl2" + frame* + function* + "FDebug::AssertFailed" + frame* + function* + "FOutputDevice::LogfImpl" + frame* + filename* + "sentryoutputdeviceerror.cpp" + function* + "FSentryOutputDeviceError::Serialize" + frame* + function* + "FWindowsErrorOutputDevice::Serialize" + frame (ignored by built-in stacktrace rule (category:throw ^-group -group)) + function* + "RaiseException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 000000000000..62c31512f552 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,524 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "dca3cb1a150c80ca2103ca14a870736e" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Ensure failed" + value (ignored because stacktrace takes precedence) + "Ensure condition failed: ensurePtr != nullptr [File:/Users/tustanivsky/Work/sentry-unreal/sample/Source/SentryPlayground/SentryPlaygroundUtils.cpp] [Line: ]" + stacktrace* + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThread__start__" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + threads (ignored because app/system exception takes precedence) + stacktrace* + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThread__start__" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient captureException:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" +-------------------------------------------------------------------------- +system: + hash: "d8dceed7558e86d6622149fd98607a02" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Ensure failed" + value (ignored because stacktrace takes precedence) + "Ensure condition failed: ensurePtr != nullptr [File:/Users/tustanivsky/Work/sentry-unreal/sample/Source/SentryPlayground/SentryPlaygroundUtils.cpp] [Line: ]" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThread__start__" + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame* + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame* + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame* + function* + "FDebug::EnsureFailed" + frame* + function* + "TMulticastDelegateBase::Broadcast" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + threads (ignored because app/system exception takes precedence) + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThread__start__" + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame* + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame* + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame* + function* + "FDebug::EnsureFailed" + frame* + function* + "TMulticastDelegateBase::Broadcast" + frame + frame (ignored due to recursion) + frame (ignored due to recursion) + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient captureException:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 000000000000..fd0613cf711a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,364 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "8961a4ec639f0697b27b860bbaf365bb" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "Ensure failed" + value (ignored because stacktrace takes precedence) + "Ensure condition failed: ensurePtr != nullptr [File:D:\\projects\\sentry-unreal\\sample\\Source\\SentryPlayground\\SentryPlaygroundUtils.cpp] [Line: ]" + stacktrace* + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame (marked out of app by built-in stacktrace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "UserCallWinProcCheckWow" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "CheckVerifyImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegate::Broadcast" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "delegateinstancesimpl.h" + function* + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "tuple.h" + function* + "UE::Core::Private::Tuple::TTupleBase::ApplyAfter" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "invoke.h" + function* + "Invoke" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentrysubsystem.cpp" + function* + "`USentrySubsystem::Initialize'::`2'::::operator()" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentrysubsystemdesktop.cpp" + function* + "SentrySubsystemDesktop::CaptureEnsure" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_value_set_stacktrace" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_value_new_stacktrace" + frame (marked out of app by built-in stacktrace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_unwind_stack_from_ucontext" +-------------------------------------------------------------------------- +system: + hash: "4fa979767cc67d57c9bc771f6e48ed45" + contributing component: exception + hint: None + root_component: + system* + exception* + type* + "Ensure failed" + value (ignored because stacktrace takes precedence) + "Ensure condition failed: ensurePtr != nullptr [File:D:\\projects\\sentry-unreal\\sample\\Source\\SentryPlayground\\SentryPlaygroundUtils.cpp] [Line: ]" + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* + function* + "WinMain" + frame* + function* + "LaunchWindowsStartup" + frame* + function* + "GuardedMainWrapper" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* + function* + "DispatchMessageWorker" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "UserCallWinProcCheckWow" + frame* + function* + "FWindowsApplication::AppWndProc" + frame* + function* + "FWindowsApplication::ProcessMessage" + frame* + function* + "FWindowsApplication::DeferMessage" + frame* + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "UObject::ProcessInternal" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execCallMathFunction" + frame* + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame* + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame* + function* + "CheckVerifyImpl" + frame* + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame* + function* + "FDebug::EnsureFailed" + frame* + function* + "TMulticastDelegate::Broadcast" + frame* + filename* + "delegateinstancesimpl.h" + function* + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + frame* + filename* + "tuple.h" + function* + "UE::Core::Private::Tuple::TTupleBase::ApplyAfter" + frame* + filename* + "invoke.h" + function* + "Invoke" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + filename* + "sentrysubsystem.cpp" + function* + "`USentrySubsystem::Initialize'::`2'::::operator()" + frame* + filename* + "sentrysubsystemdesktop.cpp" + function* + "SentrySubsystemDesktop::CaptureEnsure" + frame* + function* + "sentry_value_set_stacktrace" + frame* + function* + "sentry_value_new_stacktrace" + frame* + function* + "sentry_unwind_stack_from_ucontext" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap new file mode 100644 index 000000000000..cc5432dd3b3a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2026_10_24/unreal_event_capture_mac.pysnap @@ -0,0 +1,275 @@ +--- +source: tests/sentry/grouping/test_variants.py::test_variants +--- +app: + hash: "54e8028fb2526cf31b12dd66c01ad9e2" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by built-in stacktrace rule (package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by built-in stacktrace rule (category:internals -app)) + function* + "__NSThread__start__" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app) but ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::execLetObj" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessContextOpcode" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::CallFunction" + frame* (marked in-app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame (marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::execCaptureEventWithScope" + frame (marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::CaptureEventWithScope" + frame (marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::CaptureEventWithScope" + frame (marked out of app by built-in stacktrace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SentrySubsystemApple::CaptureEventWithScope" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureEvent:withScopeBlock:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureEvent:withScope:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by built-in stacktrace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" +-------------------------------------------------------------------------- +default: + hash: null + contributing component: null + hint: ignored because app/system threads take precedence + root_component: + default (ignored because app/system threads take precedence) + message (ignored because app/system threads take precedence) + "Message for scoped event" +-------------------------------------------------------------------------- +system: + hash: "9e04decaf79ecba9dc0314dc0edd3993" + contributing component: threads + hint: None + root_component: + system* + threads* + stacktrace* + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by built-in stacktrace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by built-in stacktrace rule (category:internals -group)) + function* + "__NSThread__start__" + frame* + function* + "-[FCocoaGameThread main]" + frame* + function* + "-[UEAppDelegate runGameThread:]" + frame* + function* + "GuardedMain" + frame* + function* + "FEngineLoop::Tick" + frame* + function* + "FSlateApplication::Tick" + frame* + function* + "FSlateApplication::TickPlatform" + frame* + function* + "FMacApplication::ProcessDeferredEvents" + frame* + function* + "FMacApplication::ProcessEvent" + frame* + function* + "FMacApplication::ProcessMouseUpEvent" + frame* + function* + "FSlateApplication::OnMouseUp" + frame* + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* + function* + "FSlateApplication::RoutePointerUpEvent" + frame* + function* + "SButton::OnMouseButtonUp" + frame* + function* + "SButton::ExecuteOnClick" + frame* + function* + "UButton::SlateHandleClicked" + frame* + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* + function* + "UObject::ProcessEvent" + frame* + function* + "UFunction::Invoke" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "ProcessLocalFunction" + frame (ignored by built-in stacktrace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* + function* + "ProcessScriptFunction" + frame* + function* + "ProcessLocalScriptFunction" + frame* + function* + "UObject::execLetObj" + frame* + function* + "UObject::ProcessContextOpcode" + frame* + function* + "UObject::CallFunction" + frame* + function* + "UFunction::Invoke" + frame* + function* + "USentrySubsystem::execCaptureEventWithScope" + frame* + function* + "USentrySubsystem::CaptureEventWithScope" + frame (ignored due to recursion) + function* + "USentrySubsystem::CaptureEventWithScope" + frame* + function* + "SentrySubsystemApple::CaptureEventWithScope" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureEvent:withScopeBlock:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureEvent:withScope:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by built-in stacktrace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" diff --git a/tests/sentry/grouping/test_config.py b/tests/sentry/grouping/test_config.py index 977d84ce87bd..76665a241936 100644 --- a/tests/sentry/grouping/test_config.py +++ b/tests/sentry/grouping/test_config.py @@ -4,9 +4,17 @@ from unittest.mock import MagicMock, patch from sentry import audit_log -from sentry.conf.server import DEFAULT_GROUPING_CONFIG, SENTRY_GROUPING_CONFIG_TRANSITION_DURATION +from sentry.conf.server import ( + BETA_GROUPING_CONFIG, + DEFAULT_GROUPING_CONFIG, + SENTRY_GROUPING_CONFIG_TRANSITION_DURATION, +) from sentry.grouping.api import get_grouping_config_dict_for_project -from sentry.grouping.ingest.config import is_in_transition, update_or_set_grouping_config_if_needed +from sentry.grouping.ingest.config import ( + CONFIGS_TO_DEPRECATE, + is_in_transition, + update_or_set_grouping_config_if_needed, +) from sentry.models.auditlogentry import AuditLogEntry from sentry.models.options.project_option import ProjectOption from sentry.testutils.cases import TestCase @@ -23,6 +31,17 @@ def _count_secondary_config_options(self) -> int: project_id=self.project.id, ).count() + def test_preserves_beta_grouping_config(self) -> None: + self.project.update_option("sentry:grouping_config", BETA_GROUPING_CONFIG) + + assert BETA_GROUPING_CONFIG not in CONFIGS_TO_DEPRECATE + assert ( + update_or_set_grouping_config_if_needed(self.project, "ingest") + == "skipped - beta config" + ) + assert self.project.get_option("sentry:grouping_config") == BETA_GROUPING_CONFIG + assert self._count_secondary_config_options() == 0 + def test_loads_default_config_if_stored_config_option_is_invalid(self) -> None: self.project.update_option("sentry:grouping_config", "dogs.are.great") config_dict = get_grouping_config_dict_for_project(self.project) diff --git a/tests/sentry/grouping/test_variants.py b/tests/sentry/grouping/test_variants.py index d6c815da6f87..2b11a8228343 100644 --- a/tests/sentry/grouping/test_variants.py +++ b/tests/sentry/grouping/test_variants.py @@ -3,9 +3,35 @@ from typing import Any, cast from unittest.mock import MagicMock, patch +import pytest + +from sentry.conf.server import ( + FALL_2025_GROUPING_CONFIG, + FALL_2026_GROUPING_CONFIG, + WINTER_2023_GROUPING_CONFIG, +) +from sentry.grouping.api import ( + get_default_grouping_config_dict, + get_grouping_variants_for_event, + load_grouping_config, +) +from sentry.grouping.component import ( + ErrorTypeGroupingComponent, + ErrorValueGroupingComponent, + ExceptionGroupingComponent, + RootGroupingComponent, +) from sentry.grouping.fingerprinting.types import FingerprintRuleJSON -from sentry.grouping.variants import BaseVariant, CustomFingerprintVariant, expose_fingerprint_dict +from sentry.grouping.strategies.base import StrategyConfiguration +from sentry.grouping.utils import hash_from_values +from sentry.grouping.variants import ( + BaseVariant, + CustomFingerprintVariant, + SaltedComponentVariant, + expose_fingerprint_dict, +) from sentry.services.eventstore.models import Event +from sentry.testutils.helpers.options import override_options from sentry.testutils.pytest.fixtures import InstaSnapshotter, django_db_all from tests.sentry.grouping import dump_variant, run_as_grouping_inputs_snapshot_test @@ -38,6 +64,156 @@ def test_variants( create_snapshot(output) +@pytest.fixture +def beta_grouping_config() -> StrategyConfiguration: + return load_grouping_config(get_default_grouping_config_dict(FALL_2026_GROUPING_CONFIG)) + + +@pytest.mark.parametrize( + "fingerprints", + [ + [["checkout", "12", "34"], ["checkout", "123", "4"]], + [["tenant", "12", "3"], ["tenant", "1", "23"], ["tenant", "123"]], + [["ab", "c"], ["a", "bc"], ["abc"]], + [["ab"], ["", "ab"], ["a", "", "b"], ["ab", ""]], + [["a\x00", "b"], ["a", "\x00b"], ["a\x00b"]], + [["a:", "b"], ["a", ":b"], ["a:b"]], + [["é", "猫"], ["é猫"]], + [["a", "b"], ["b", "a"]], + ], +) +@pytest.mark.parametrize( + "default_position, default_values", + [(0, []), (0, ["{{ default }}"]), (1, ["{{ default }}"]), (99, ["{{ default }}"])], +) +def test_fingerprint_value_boundaries( + beta_grouping_config: StrategyConfiguration, + fingerprints: list[list[str]], + default_position: int, + default_values: list[str], +) -> None: + hashes = [] + with override_options({"grouping.experimental_parameterization": 0.0}): + for fingerprint in fingerprints: + values = fingerprint.copy() + values[default_position:default_position] = default_values + event = Event( + project_id=1, + event_id="a" * 32, + data={"logentry": {"message": "Checkout failed"}, "fingerprint": values}, + ) + variants = get_grouping_variants_for_event(event, beta_grouping_config) + contributing_hashes = [v.get_hash() for v in variants.values() if v.contributes] + assert len(contributing_hashes) == 1 + assert contributing_hashes[0] is not None + hashes.extend(contributing_hashes) + + assert len(set(hashes)) == len(fingerprints) + + +@pytest.mark.parametrize("config_id", [WINTER_2023_GROUPING_CONFIG, FALL_2025_GROUPING_CONFIG]) +@pytest.mark.parametrize( + "fingerprint, expected_hash", + [ + (["checkout", "12", "34"], "9c586ffc6a6ca3d7abd874376424b48d"), + (["checkout", "123", "4"], "9c586ffc6a6ca3d7abd874376424b48d"), + (["tenant", "12", "3"], "e71a10fcac4dabace79d8ff4c903ead6"), + (["tenant", "1", "23"], "e71a10fcac4dabace79d8ff4c903ead6"), + (["tenant", "123"], "e71a10fcac4dabace79d8ff4c903ead6"), + (["{{ default }}", "12", "3"], "d512cea612c731c5f303c987cff24f75"), + (["{{ default }}", "1", "23"], "d512cea612c731c5f303c987cff24f75"), + ], +) +def test_legacy_fingerprint_hashes( + config_id: str, fingerprint: list[str], expected_hash: str +) -> None: + event = Event( + project_id=1, + event_id="a" * 32, + data={"logentry": {"message": "Checkout failed"}, "fingerprint": fingerprint}, + ) + with override_options({"grouping.experimental_parameterization": 0.0}): + variants = get_grouping_variants_for_event( + event, load_grouping_config(get_default_grouping_config_dict(config_id)) + ) + assert [v.get_hash() for v in variants.values() if v.contributes] == [expected_hash] + + +@pytest.mark.parametrize( + "data", + [ + {}, + {"logentry": {"message": "Checkout failed"}}, + {"logentry": {"message": "Checkout failed"}, "fingerprint": ["{{ default }}"]}, + {"checksum": "a" * 32}, + {"checksum": "legacy checksum"}, + {"fingerprint": ["{{ default }}", "custom"]}, # Non-contributing default component + ], +) +def test_non_fingerprint_hashes_unchanged( + beta_grouping_config: StrategyConfiguration, data: dict[str, Any] +) -> None: + event = Event(project_id=1, event_id="a" * 32, data=data) + with override_options({"grouping.experimental_parameterization": 0.0}): + old_variants = get_grouping_variants_for_event(event, load_grouping_config()) + new_variants = get_grouping_variants_for_event(event, beta_grouping_config) + assert {name: v.get_hash() for name, v in new_variants.items()} == { + name: v.get_hash() for name, v in old_variants.items() + } + + +@pytest.mark.parametrize( + "fingerprint", [["{{ default }}", "salt"], ["salt", "{{ default }}", "{{ default }}"]] +) +def test_hybrid_preserves_default_grouping_equivalence( + beta_grouping_config: StrategyConfiguration, fingerprint: list[str] +) -> None: + hashes = [] + for error_type, error_value in [("ab", "c"), ("a", "bc")]: + component = ExceptionGroupingComponent( + values=[ + ErrorTypeGroupingComponent(values=[error_type]), + ErrorValueGroupingComponent(values=[error_value]), + ] + ) + root = RootGroupingComponent(variant_name="default", values=[component]) + variant = SaltedComponentVariant(fingerprint, root, component, beta_grouping_config, {}) + hashes.append(variant.get_hash()) + assert hashes[0] is not None + assert hashes[0] == hashes[1] + + +@pytest.mark.parametrize("default_value, custom_value", [("ab", "c"), ("a", "bc")]) +def test_hybrid_default_boundary( + beta_grouping_config: StrategyConfiguration, default_value: str, custom_value: str +) -> None: + # The default expansion is one value, not a flattened list of component values. + component = ExceptionGroupingComponent( + values=[ErrorTypeGroupingComponent(values=[default_value])] + ) + root = RootGroupingComponent(variant_name="default", values=[component]) + variant = SaltedComponentVariant( + ["{{ default }}", custom_value], root, component, beta_grouping_config, {} + ) + assert variant.get_hash() == hash_from_values( + [default_value, custom_value], with_value_boundaries=True + ) + + +@pytest.mark.parametrize( + "values, encoded", + [ + (["ab", "c"], "2:ab1:c"), + (["a", "bc"], "1:a2:bc"), + (["", "a\x00:b", ""], "0:4:a\x00:b0:"), + (["é", "猫"], "2:é3:猫"), + (["\ud800", "a"], "1:?1:a"), + ], +) +def test_length_prefixed_fingerprint_hashes(values: list[str], encoded: str) -> None: + assert hash_from_values(iter(values), with_value_boundaries=True) == hash_from_values([encoded]) + + @django_db_all # TODO: This can be deleted after Jan 2025, when affected events have aged out def test_old_event_with_no_fingerprint_rule_text() -> None: @@ -57,6 +233,7 @@ def test_old_event_with_no_fingerprint_rule_text() -> None: }, ) }, + load_grouping_config(), ) assert expose_fingerprint_dict(variant.values, variant.fingerprint_info) == { "values": ["dogs are great"],